요즘 자바8이 대세이고, 앞으로를 위해 hello world를 찍어보고자 한다. 지금 사용하고 있는 이클립스 버전이 indigo(3.7)인데 안타깝게도 1.7까지 밖에는 지원하지 못하는 관계로 kepler(4.3)을 설치하게 되었다. 설치만 하면 바로 자바8 코딩이 가능할 줄 알았지만 플러그인을 설치해야지만 가능하니 marketplace에서 다운을 받도록 하자. "Java8"로 검색하기만 하면 "Java 8 support for Kepler SR2"가 나오니 해당 플러그인을 설치하기만 하면 된다. 메이븐 프로젝트를 생성하고, Java Build Path에서 JDK8 라이브러리를 추가해 주고, Java Compiler에서 컴파일 레벨을 1.8로 지정해주기만 하면 설정 끝~ 람다 표현식을 쓴것과 안 쓴것을 ..
리눅스에서 ifconfig 명령어를 치면 -bash: ifconfig: command not found 와 같은 메세지가 출력된다.이와 같은 오류 발생 시 ifconfig 파일이 존재하는 디렉토리의 패스를 지정해 줘야 하는데 2가지 방법이 있다. 로그인한 계정의 홈 디렉토리로 이동하여 .bash_profile을 vi 편집기로 다음과 같이 수정하면 된다. 1번째 방법PATH=$PATH:$HOME/bin --> PATH=$PATH:$HOME/bin:/sbin 패스 구분자 : 를 추가해 준 후 ifconfig 명령어가 존재하는 /sbin 디렉토리를 추가해 주면 된다. 2번째 방법export sbin=/sbinexport 명령어를 이용하여 패스를 추가해 줄 때에는 JAVA_HOME 또는 CATALINA_HOME..
태그 라이브러리 파일을 jar 파일에 포함시키기 위한 설정에 대해서 정리한다.메이븐 project의 src/main/resources 디렉토리 하위에 META-INF 디렉토리를 생성한 후 jar에 포함시키고자 하는 tld 파일을 모두 추가해 준다. 위와 같이 tld 파일을 추가한 후 mvn package goal을 실행하면 tld 파일이 jar파일에 포함되어진다.다음과 같이 포함시킬 파일과 포함시키지 말아야 할 파일을 구분할 수도 있다. src/main/resources **/*.tld **/*.xml **/*.properties
예전 스프링 스터디를 하면서 bean 에리먼트의 parent 어트리뷰트를 정의하는 것을 배운적이 있다. 사실 그때까지만해도 이 기능을 사용할 일이 있을까라는 생각을 했는데 오늘 난 이 기능을 사용하게 되었고 유용함을 느꼈다. 내가 사용하게 된 계기는 interceptor의 property 에 validator bean을 추가하는 과정에서 중복이 발생한다는 것이였다.예를 들어 /a 라는 URL 패턴으로 접근하는 요청에 대해서 A라는 인터셉터가 동작하고 A라는 인터셉터에서는 valid_1, valid_2, valid_3 가 동작해야 한다./b 라는 URL 패턴에서는 B라는 인터셉터가 동작하고 valid_1, valid_2, valid_4 가 동작해야 한다.여기서 확인할 수 있는 것은 valid_1, vali..
spring에서 제공해 주는 util:map 기능을 사용하여 xml 파일에 다음과 같이 에러 코드를 정의해 주었다. 이와 같이 선언하게 되면 key, value 는 String 타입으로 지정되어 HashMap 객체에 저장이 된다. 아이러니한건 스프링 DI 방식을 이용하여 다음과 같이 객체 주입을 해도 예외가 발생되지 않는 다는 것이다.@Resource(name = "loginCheckErrorCodes")private Map loginCheckErrorCodes; 에러가 발생될 것이라 예상을 하게된 이유는 DI로 주입 받는 Map 클래스의 key 타입이 Integer로 되어 있기 때문이다. 자동으로 type conversion이 발생되어 key 타입이 Integer형으로 바뀐것일까? 만약 type con..
RequestParamMethodArgumentResolver.class 파일의 소스 코드를 이클립스 안에서 확인해 보고 싶었다.찾고자 하는 파일이 이클립스의 Project에 존재한다면 CTRL + SHIFT + R 단축키를 이용하여 쉽게 찾을 수 있다. 만약 jar 파일 안에 존재하는 class 파일이라면?CTRL + SHIFT + T 를 이용하여 쉽게 찾을 수 있다. stackoverflow 물어보면 다 나온다.http://stackoverflow.com/questions/7567887/how-to-find-class-name-inside-a-bunch-of-jars
현재 진행하고 있는 프로젝트에서 Tiles를 사용하고 있는데 다음과 같이 defaultLayout의 left를 동적으로 바꿀 수 있는 방법에 대해서 얘기가 나왔다. 흔히 tiles를 이용할 때 사용하는 방법은 다음과 같이 새로운 definition을 정의한 후 body와 left를 put하는 방법을 이용한다. 하지만 특정 요구 사항으로 인하여 xml 설정이 아닌 코드를 이용하여 left 영역을 동적으로 바꿀 수 있는 방법을 찾아야 했다. 찾아보니 ViewPreparer 인터페이스가 있었고, 해당 인터페이스를 구현하면 tiles definition을 렌더링하기 전에 execute 메소드가 실행된다. 해당 메소드 안에서 다음의 코드와 같이 putAttribute 메소드를 이용하여 layoutId 변수 값에 ..
HTTP request 시 json 스트링을 서버에 넘겨주고, 서버는 interceptor에서 먼저 HTTP request body에 있는 json 스트링을 읽어와 값에 대한 체크를 진행하는 로직을 개발하고 있었다. json 스트링 검증 후 spring controller에서 @RequestParam 으로 데이터를 받으려고 할 때 다음과 같은 예외가 발생java.lang.RuntimeException: java.io.EOFException: No content to map to Object due to end of input interceptor에서 request body의 데이터를 이미 읽어 들였기 때문에 나오는 증상이다.시퀀스 다이어그램으로 표현하자면 다음의 4번에 해당하는 부분에서 예외가 발생된다...
다음과 같이 self closing을 사용하여 외부 자바스크립트를 불러오게 되면 문제가 발생한다.문제라 함은 브라우저에서 해당 외부 자바스크립트의 함수를 호출하지 못하는 것.self closing이란 와 같은 문법을 말한다. Start tag는 존재하지만 End tag는 존재하지 않는 것이다. 여하튼 개발을 하다 이와 같은 문제를 겪게 되었고 왜 브라우저가 정상적으로 자바스크립트를 로딩하지 못하는지에 대해서 확인을 해보았다. self closing 은 원래 XHTML 에서 사용하는 문법이라고 하며 다음과 같이 엘리먼트를 꼭 slash를 이용하여 self-closing해야 한다고 적혀 있다.XHTML requires that tags like and get an extra slash to make them..