자바의 Error는 프로그램의 실행을 이어가도록 조치할 수 없는 상황입니다.

Exception은 프로그램에서 조치가 가능한 경우입니다.

IOException과 같이 반드시 코드에서 처리를 해줘야하는 CheckedException 계열이 있고,

RuntimeException과 그 상속받은 예외들처럼 코드 상에서 반드시 처리를 하지 않아도 되는 UncheckedException 계열로 나눌 수 있습니다.




try catch finally 명령을 통해서 예외를 처리하거나, 메소드 시그너처에서 노출합니다. 그 메소드를 부르는 상위 메소드에서 처리하도록 강제하는 것입니다.




package net.okjsp.java;

public class ExceptionTest {

	public static void main(String[] args) {
		divide(30, 5);
		try {
			//divide(30, 0);
			divide2(3, 0);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("반드시 실행되는 코드");
		}
	}

	private static void divide(int a, int b) {
		int c = a / b;
		System.out.println(c);
	}

	private static void divide2(int a, int b) throws Exception {
		if (b == 0) {
			throw new Exception("0으로 나눌 수 없습니다.");
		}
		int c = a / b;
		System.out.println(c);
	}

}


http://alexgorbatchev.com/SyntaxHighlighter 사이트에서 syntaxhighlighter_3.0.83.zip 파일을 다운로드 받고, 압축을 해제합니다. index.html 파일을 실행해서 소스를 참고하면 좋습니다.


관리자 화면에서 HTML/CSS 메뉴 선택합니다. 


이 4줄은 다운로드받은 패키지의 index.html 소스를 참고했습니다.

<script type="text/javascript" src="./images/shCore.js"></script>

<script type="text/javascript" src="./images/shBrushJScript.js"></script>

<link type="text/css" rel="stylesheet" href="./images/shCoreDefault.css">

<script type="text/javascript">SyntaxHighlighter.all();</script>


Hello SyntaxHighlighter

function helloSyntaxHighlighter()
{
	return "hi!";
}


저장을 누르고, 파일업로드 탭을 눌러서 해당 파일을 업로드합니다.



shCore.js는 scripts 폴더와 src에 있습니다. 업로드할 파일은 scripts/shCore.js 입니다.




가장 많이 사용하는 ArrayList와 HashMap의 근본입니다.



다이어그램 읽기

삼각형 실선은 상속(extends), 삼각형 점선은 구현(implements), 그리고 화살표는 사용(has)입니다.

SortedMap<K,V>는 Map<K,V>를 상속하고,

public interface SortedMap<K,V> extends Map<K,V> 


HashMap<K,V>는 Map<K,V>를 구현했습니다.

public class HashMap<K,V>

    extends AbstractMap<K,V>

    implements Map<K,V>, Cloneable, Serializable


HashMap<K,V>는 Set<E>를 필드로 사용하고 있습니다.

    private transient Set<Map.Entry<K,V>> entrySet = null;



UML class diagram은 ObjectAid 이클립스 플러그인을 사용했습니다.

http://www.objectaid.com/

site-url : http://www.objectaid.net/update


간단 플러그인 사용법

ctrl+N > class 필터 > Class Diagram 선택

model.ucls 파일 생성

클래스를 끌어서 ucls 파일에 놓으면 생성

show attributes > none

show operations > none

Layout Diagram 정렬


Add > Java Classifier : 클래스명으로 추가


아웃라인 기능




objectaid 플러그인에서 Sequence Diagram은 라이선스가 있어야 됩니다. Class Diagram만 무료로 사용할 수 있습니다.





IntelliJ IDEA에서는 클래스 선택하고 ctrl+alt+U 로 UML을 바로 볼 수 있네요. 무료버전인 Community Edition에서도 가능합니다.

이클립스처럼 따로 플러그인을 설치하지 않아도 되는 편한 기능입니다.

http://www.jetbrains.com/idea/features/uml_class_diagram.html


이클립스에서 sysout 입력하고 ctrl+space를 치면 System.out.println(""); 코드가 자동으로 완성됩니다.

날짜 시간을 기록하는 dtlog 라는 것을 만들어 보겠습니다.


Quick Access(ctrl+3)에서 templates로 검색해서 Templates - Java/Editor를 선택합니다. 


sysout도 이곳에 설정되어 있습니다. New... 버튼을 클릭합니다.



dtlog를 입력하고 Pattern:에 ${date} ${time} 을 입력합니다.


이제 코드에서 dtlog라고 입력하고 ctrl+space를 입력하면 현재 날짜와 시간이 기록됩니다.



더 많은 옵션들이 스택오버플로우에서 공유되고 있습니다.

http://stackoverflow.com/questions/1028858/useful-eclipse-java-code-templates

아직은 JDK8의 정식 버전이 나오지 않아서 이 화면을 보기 쉽지 않습니다.



eclipse 개발중인 다른 버전을 다운로드 받아서 JDK8을 테스트할 수 있습니다.

efxclipse는 e(fx)clipse 즉, JavaFX 개발용 패키지들이 포함된 이클립스입니다. 그래서 용량이 350MB 이상입니다.

http://downloads.efxclipse.org/eclipse-java8/


http://docs.oracle.com/javase/tutorial/java/javaOO/examples/RosterTest.java
http://docs.oracle.com/javase/tutorial/java/javaOO/examples/Person.java
두 소스는 JDK8 샘플입니다.
설명은 http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html 주소의 문서를 참고하세요.



Lambda Expression 이라고 얘기합니다. jdk8에 포함된 기능입니다.

인터페이스의 메소드가 하나일 때, 이것에 대한 인터페이스를 만들고, 익명 클래스로 만들어서 처리하는 것을 단순화 시켰습니다.

http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

예제가 잘 되어 있습니다.


최종 결과는 다음과 같은 코드입니다. C++에서 보던 -> 기호 때문에 당황스럽군요.

printPersons( roster, (Person p) -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25 

    );


람다 표현식을 사용하기 전의 코드는 다음과 같이 익명 클래스로 되어 있습니다.

printPersons(
    roster,
    new CheckPerson() {
        public boolean test(Person p) {
            return p.getGender() == Person.Sex.MALE
                && p.getAge() >= 18
                && p.getAge() <= 25;
        }
    } 

    );


interface CheckPerson {
    boolean test(Person p);
}


확실히 interface 파일 하나 줄이고, 코드를 1/3로 줄이는 효과가 있습니다.

람다 표현식을 사용하려면 아직 개발자 미리보기 버전을 설치해야 합니다.

http://jdk8.java.net



갑자기 이 노래가 생각납니다.

Lambada




워니퍼님의 글이 확실히 도움이 되었습니다.

이클립스가 workspace 중심이라면 인텔리J는 프로젝트 중심입니다. 이클립스의 워크스페이스는 프로젝트 그룹입니다.


습관이란 게 무서운 것이더군요. 이클립스에서 JUnit 테스트 케이스는 자동으로 프로젝트에 라이브러리를 추가해줍니다. IntelliJ 매뉴얼을 보니, "우리는 자동으로 테스트케이스 라이브러리를 추가하지 않습니다."라고 되어 있네요.


JAR, 즉 junit.jar를 추가하는 방법입니다.


hellojunit이라는 새로운 프로젝트를 만들었습니다.


Preferences...에서 찾을 수 없습니다.


File > Project Preferences... 메뉴가 따로 있습니다.


Project Settings 섹션에 Modules를 선택하고, Dependencies 탭을 선택합니다.


Jars or directories를 통해서 연결하면 됩니다.


13버전은 업그레이드 비용 $99를 지불해야 사용할 수 있습니다. 이전 버전 12.*는 아래 링크에서 다운로드 받을 수 있습니다.

http://confluence.jetbrains.com/display/IntelliJIDEA/Previous+IntelliJ+IDEA+Releases


Version 12.1.6

Version 12.0.4


지난 연말 12/30 표준프레임워크 2.7.0이 출시되었습니다.

개발도구 64bit full버전이 추가되었고, 버그들이 수정되었습니다.

실행환경의 스프링버전 3.0.5는 변화가 없습니다. 

개인적인 생각으로는 2.6.1 정도의 업그레이드라고 생각됩니다만, 아마 스프링 버전이 올라간다면 eGovFrame 3.x로 될 것 같습니다.


개발환경 변화는 다음과 같습니다.

2013.12.30 : 개발환경 2.7.0 릴리즈

  • 기존 버전 패치 및 업그레이드 
    - eGovFrame Template -> CRUD Program 오류 수정(등록용 jsp 화면, reset 버튼 오류수정)
    - Batch Template Project 실행환경 2.7 반영
    - android-maven compile 오류 수정
    * pom.xml에 properties(android.sdk.path) 추가
    * android-maven-plugin 버전 변경(3.1.1 -> 3.6.1)
    - 모바일 디바이스 API pom.xml에 mysql 주석해제
    - 모바일 디바이스 API Wizard 설정오류 수정
    - 템플릿 프로젝트 context-idgen.xml수정(blockSize 10으로 일괄수정)
    - 템플릿 프로젝트(portalsite) 오류 수정
    * 관리자 회원 등록폼에서 회원 등록시 폼 name과 컨트롤러의 ModelAttribute가 상이하여 발생하는 오류 수정
      (EgovMberManageController.java)
    * 관리자 회원 등록폼의 집지역번호 validation rule 속성 누락 수정(EgovMberManage.xml)
    - 템플릿 프로젝트(Enterprise,Portalsite) 오류 수정
    * 회원정보 수정시 오류 수정
    - Template-Web-Simple_Homepage hsql DB로 변경
    - 프로젝트 템플릿 프로젝트 2종 변경
    * 공통컴포넌트 / 모바일 공통컴포넌트 all-in-one 추가
    * 모바일 공통컴포넌트 2종 템플릿 삭제(Collaboration, User Support)
    - 템플릿 엔터프라이즈 시스템 로그 정보 jsp 파일 추가
    - 실행환경 2.7.0 업데이트
    * ID Generation 서비스 버그개선(오류 현상 : 일부 DBMS 상에서 ID 중복 발생)
    * Data Access 서비스 버그개선(오류 현상 : EgovAbstractDAO 클래스의 listWithPaging() 메소드 pageSize 처리 오류 발생)
    - 이클립스 최적화 eclipse.ini 반영
    - splash 이미지 변경(2.6 -> 2.7)
    - 개발환경 64bit full 버전 추가

from: http://www.egovframe.go.kr/EgovDevEnvReleaseNote.jsp?menu=3&submenu=2


STS에 설치된 플그인도 업데이트됩니다.



Kepler 버전에서 CodeGen 플러그인은 아직 지원되지 않습니다.




아프리카 방송에서 사용했던 내용입니다.

http://afreeca.com/kenuheo






JSP 시작하기

  • 시작 전 확인
    • 필요지식
      • HTML
      • Java
        • Java Server Pages
    • + - 배우는 것
      • 동적인 HTML
      • 서버 기술
      • JSP와 서블릿
        • JavaEE의 일부
    • + - JSP 트렌드
      • + - 국내 기업용 시장 장악
        • 전자정부 표준프레임워크
        • http://www.egovframe.go.kr
        • Spring + Eclipse + maven + template wizard
      • + - JavaEE 7 기능 점차 지원
        • http://www.eclipse.org/jetty/documentation/current/jetty-javaee.html
      • + - 서블릿 컨테이너 임베디드
        • Maven
        • 스프링 부트
      • + - 웹서버와 연동 없이 단독 웹 처리
        • + - 아주 초창기
          • + - 톰캣3이 느려서
            • 아파치랑 연결해서 사용
            • AJP
            • mod_jk
        • + - 톰캣4 부터
          • + - 카탈리나 엔진
            • LTE 빠름
            • 커넥터가 병목이 될 수 있다
            • 혼자써라
          • 예) OKJSP 하루 12만PV 2.2만UV 톰캣 혼자
    • + - Browser와 서버의 런타임 환경
      • request ->
      • <- response
      • JS vs JSP
        • JS와 JSP 사이에 변수 공유 
          • JSP는 서버에서 실행
          • JS는 브라우저에 실행
    • + - polyglot 다언어
      • JSP 파일 하나에
        • 6가지 문법
        • JSP
          • JSTL
            • SQL
        • Expression Language
        • Java
        • HTML
        • JavaScript
        • CSS
    • + - HTTP
      • GET
      • POST
      • 쿠키
    • + - HTML
      • + - html 기본 구조
        • DOCTYPE과 html
        • <head>
        • <body>
      • <h1> ~ <h6>
      • <p>
      • <img>
      • <form>
      • + - <input>
        • text
        • button
        • textarea
        • checkbox, radio
    • JavaScript
    • + - CSS
      • selector
      • box model
      • position
  • JSP개발환경
    • JDK
      • http://java.sun.com
      • + - 환경변수
        • JAVA_HOME
        • PATH
          • %JAVA_HOME%\bin; 추가
        • 글로벌 CLASSPATH 환경변수는 이제 안 씀
    • IDE
      • 이클립스
        • JavaEE 패키지
        • Japan Advanced ... 미러에서 다운로드
      • NetBeans
      • IntelliJ(JavaEE 기능 유료)
  • 시작하기
    • 동적으로 HTML을 만드는 법
      • Servlet
      • JSP
    • 표현식(expressions)
    • 스크립틀릿(scriptlets)
    • 지시자(directives)
    • 선언(declarations)
    • 태그
    • 세션
    • 빈(beans)
    • 태그 라이브러리  


+ Recent posts