달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
.. .. ..

원본글 : http://oh-sun.blogspot.kr/2012/03/javalangclassnotfoundexception.html#!/2012/03/javalangclassnotfoundexception.html

 

작성자 : 권오선 님

부재 :

이유 없는 "java.lang.ClassNotFoundException : org.springframework.web.context.ContextLoaderListener" 을 더이상 보고 싶지 않은 개발자에게..

전자정부 표준프레임워크 기반을 프로젝트 수행 중에 개발환경에서 "java.lang.ClassNotFoundException : org.springframework.web.context.ContextLoaderListener" 를 한번 보지 못한 사람은 아마도 없을 것이다. 필자역시 표준프레임워크 구축 프로젝트를 수행하면서 업무로직을 구현하고 집으로 칼퇴근 해야 할 아까운 시간에 WTP, Tomcat, M2Eclipse, maven 의 궁합에 대해 고민하는 무의미한 시간을 보내는 쓰디쓴 경험을 한 기억이 있다.


1. Eclipse Upgrage로 해결?

WTP, m2Eclipse로 고민하던 때… 처음으로 시도한 방법은 Eclipse 업그레이드!!
소프트웨어의 업그레이드는 막연한 기대감을 주는데.. 나도 그 유혹에 잘 넘어가는 편이라 문제가 발생하면 먼저 업그레이드 부터 생각한다. 전자정부 표준프레임워크의 개발환경 IDE는 Eclipse 3.4를 기반으로 개발되었다. 현재 Eclipse는 3.7 까지 릴리이즈 되었으니 상당히 구버전이라고 할 수 있다. 테스트는 Eclipse 3.6 에서 수행하였다.
먼저 프로젝트 생성 후 pom.xml에 표준프레임워크 관련 dependency를 설정하고 WTP, Tomcat으로 실행!! 역시 눈에 익은 오류가 보인다.

"java.lang.ClassNotFoundException : org.springframework.web.context.ContextLoaderListener"

maven dependency에 설정한 라이브러리가 배포되지 않아서 발생하는 오류다. 이를 해결하기위해서 "프로젝트 선택 > 우클릭 > properties > Deployment Assembly 메뉴 > Add 버튼 > Java Build Path Entries > Maven Dependencies 선택" 을 한 후 다시 실행하였다. 성공!!

축배를 들고 싶었다. 여기서 더이상 시간을 쓰고 싶지 않았다. 하지만 이 방법은 치명적인 단점이 있었다. 그것은 maven dependency의 scope가 정상적으로 적용되지 않는다는 것이다.

maven은 dependency에 scope란 옵션이 있다. scope는 compile, provided, test 등이 있으며 의미를 가진다.
예를 들어 provided 의 경우, 컴파일 단계에서 클래스 패스에 추가 하여 사용되긴 하지만 배포 모듈에 포함되지는 않는다. 일반적으로 Java EE 의 API 클래스가 이런 옵션을 사용하게 된다.

Eclipse의 Deployment Assembly를 사용하는 경우, war안에 Java EE API가 포함되어 일부 WAS에 뜻하지 않는 오류가 발생하였다.

2. Maven & Jetty
고심끝에 두번째 방법은 WTP와 Tomcat을 버리는 것이었다. 또 한가지 알게된 것은 Maven이 eclipse가 없는 환경에서도 너무나 많은 일을 할 수 있다는 것이다. 유명한 오픈소스 apache camel은 배포 파일에 까지 포함해서 실행시 maven 명령어를 쓰도록 가이드 하고 있다.

WTP와 Tomcat을 대체할 maven의 플러그인은 바로 jetty plugin 이다. jetty 는 www.mortbay.org 에서 관리하는 오픈소스 servlet 컨테이너 이다. 워낙 경량형 이기도 하고 실행 모듈에 포함해서 서블릿 엔진을 따로 설치하지 않아도 사용할 수 있는 제품을 패키징 할때 포함하기도 한다. Google Appengine의 개발환경에서도 log를 통하여 jetty를 사용하고 있다는 사실도 주목할 만 하다.( App Engine에 흠뻑 빠진 요즘 구글이라면 항상 믿음이 간다. )

이러한 경량의 특성을 살려 maven plug-in으로서도 널리 사용된다. jetty maven 플러그인은 (http://docs.codehaus.org/display/JETTY/Maven Jetty Plugin)에서 사용법을 확인 할 수 있다.

적용방법

1. 먼저 전자정부 표준프레임워크 개발환경에서 수행중인 프로젝트의 pom.xml 을 연다.
2. <build> 설정에 아래의 플러그인 설정을 추가한다.

<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.2.2.v20101205</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<reload>automatic</reload>
</configuration>
</plugin>
</plugins>
</build>

3. "프로젝트 선택 > 우클릭 > Run As > Maven Build > Goal에 jetty:run 입력 > 확인 " 을 차례로 수행'
4. 웹브라우저 접속 "http://localhost:8080";
5. 성공!!

사실 이 방법은 실행 및 테스트에 있어서 Eclipse의 도움을 거의 받지 않는 방법이다. 이로 인해 integration으로 인한 자잘 한 오류에서 벗어 날수 있었다.
무엇보다도 maven의 특성이 정확하게 적용되는 것으로 인해 개발자 PC의 환경의 pom.xml이 개발서버에서도 일관되게 사용할 수 있어 Continuous Integration 적용에도 큰 도움이 된다.

참고 사이트 : http://docs.codehaus.org/display/JETTY/Maven Jetty Plugin

 

.
:
Posted by .07274.
2012. 11. 15. 17:32

이클립스 다운 / 멈춤 현상 I.lib()/I.lib(Eclipse)2012. 11. 15. 17:32

.. .. ..

http://www.androidpub.com/android_dev_info/1323151

.
:
Posted by .07274.
.. .. ..

<form> 에

 

accept-charset="EUC-KR"

 

위와 같은 옵션을 넣는다. 보통의 브라우져는 다 이부분이 적용되는데 익스플로어는 적용이 잘 안된다. 그렇기 때문에

 

폼을 submit 하기 전에

 

   if (document.폼이름.canHaveHTML) { // detect IE
   document.charset = document.폼이름.acceptCharset;
     }

 

위와 같은 명령을 넣어주면 잘된다.

 

 

'I.lib() > I.lib(Script)' 카테고리의 다른 글

AngularJS 자료 정리  (0) 2014.03.11
팝업창에서 submit 시 새창이 뜰때  (1) 2012.06.14
.
:
Posted by .07274.
2012. 10. 25. 11:37

캐리커쳐 그리기 쉬운 사이트 I.lib()/I.lib(etc)2012. 10. 25. 11:37

.. .. ..
http://www.befunky.com/

 

'I.lib() > I.lib(etc)' 카테고리의 다른 글

겔럭시 s 부두 패치 경로  (0) 2013.04.19
[펌] TDD  (0) 2013.03.28
7만번대 ps2 하드 플스 개조 (펌)  (0) 2011.08.04
하드 플스 관련 주소  (0) 2011.04.26
주루마블  (0) 2010.12.27
.
:
Posted by .07274.
.. .. ..

[펌] : http://technet.tmax.co.kr/kr/inquiry/qna/jeus/readBoardForm.do?bbsCode=qna_jeus&fc=inquiry&sc=inquiry_qna&tc=inquiry_qna_jeus&currentPage=1&seqNo=47708&categoryId=&productCode=&range=10&searchType=ALL&searchText

 

질의:

 

안녕하세요.
Jeus 를 기동하게 되면 라이브러리를 읽어오죠,
순서는
1. JEUS_HOME/lib/application
2. Web 프로젝트 안의 WEB-INF/lib
이렇게 읽어오는게 맞다는 가정하에 질문을 드리겠습니다.
JEUS_HOME/lib/application 폴더안의 jar 파일 안에는 a.b.c.class
라는 클레스가 있습니다.
그런데 제가 Web 프로젝트 안의 WEB-INF/lib 폴더 안의 jar 파일에 있는
동일한 명칭을 가진 a.b.c.class 라는 라이브러리를 쓰고 싶습니다.
결론
Jeus 의 라이브러리보다 Deploy 된 Web의 Lib 를 사용하고 싶은데 가능한가요?

 

 

답변:

 

안녕하세요.
티맥스소프트입니다.
질문하신 사항만으로는 가능은 합니다.
즉 해당 ap가 있는 곳의 WEB-INF/jeus-web-dd.xml 파일의 webinf-first라는 옵션을 사용하시면 됩니다.
하지만 class간의 참조에 따라 ClassCastException도 발생할 수 있으니 가능하면 해당 application의 lib쪽에 두고 사용하시는 것을 권해드립니다.
(300) <jeus-web-dd> <webinf-first>
Description 클래스를 로딩할 때 web-inf 디렉터리 아래에서 먼저 찾을 것인지의 여부를 설정한다. true로 설정하면 web-inf 아래에서 먼저 찾고 false로 설정되면 상위 classloader에서 먼저 찾는다. true로 설정하는 경우 중복된 클래스로 인한 ClassCastException을 주의하여야 한다.
Value Type boolean
Default Value false
(300) <jeus-web-dd> <webinf-first>
Description 클래스를 로딩할 때 web-inf 디렉터리 아래에서 먼저 찾을 것인지의 여부를 설정한다. true로 설정하면 web-inf 아래에서 먼저 찾고 false로 설정되면 상위 classloader에서 먼저 찾는다. true로 설정하는 경우 중복된 클래스로 인한 ClassCastException을 주의하여야 한다.
Value Type boolean
Default Value false
<jeus-web-dd> <webinf-first>
Description
클래스를 로딩할 때 web-inf 디렉터리 아래에서 먼저 찾을 것인지의 여부를 설정한다. true로 설정하면 web-inf 아래에서 먼저 찾고 false로 설정되면 상위 classloader에서 먼저 찾는다. true로 설정하는 경우 중복된 클래스로 인한 ClassCastException을 주의하여야 한다.
Value Type
boolean
Default Value
false
.
:
Posted by .07274.
.. .. ..

[펌] : http://01041741840.tistory.com/40

 

Server 측입니다.

@Path("/") // 이 class가 받는 경로. Web.xml에서 url-pattern으로 /*를 주었을 때 @Path를 Controller마다 다르게 주면 각각 다르게 인식한다.

public class RestServerController {

@POST

@Produces("text/xml")

@Consumes("application/xml")

@Path("users")

public RestServerVO getUsers(RestClientVO rcVO) {

String name = rcVO.getUserName();

RestServerVO rsVO = new RestServerVO();

rsVO.setUserName(name);

rsVO.setAddress("조선");

return rsVO;

}

}

@Path는 Spring에서 @RequestMapping과 같습니다. 어떤 path로 요청하면 받겠다는 설정입니다.

@POST는 다음 메소드가 요청받을 Http Method입니다. POST로 설정하면 POST요청 이외에는 이용할 수 없게 됩니다.

@Produces, @Consumes는 요청, 응답 data type입니다. 설정 값과 어긋나면 type이 맞지 않는다고 Error가 발생합니다.

parameter로 RestClientVO라는것을 받았습니다. 이것은 요청시 RestClientVO로 넘겨준것을 받은것입니다.

이것이 Client에서 요청시에는 자동으로 XML로 바뀌었다가 Server에 와서는 자연스럽게 VO로 바뀐 것입니다.

실제로 이부분을 String 으로 바꾸면 String 형식의 xml로 나타납니다.

그 이후에는 일반적인 작업을 처리하고 결과를 return 하는 부분입니다. 역시나 간단하지 않습니까?

다만, 환경설정시 아시겠지만 Server측은 UrlMapping에 "*.do"가 아니고 "/"로 정의합니다.

그리고 REST를 이용시에는 요청값과 응답값이 무엇이 있는지 서로간에 확인을 해야지만 사용이 가능합니다.

굳이 똑같은 VO가 아니더라도 xml 혹은 json에서 값들을 분리하여 사용이 가능하므로

요청 값들이 String에 무엇인지 int의 무엇인지 정도를 꼭 확인해야 합니다.


굉장히 허접하게 정리해서 이걸 계속 웹에 정리해야 하는지 의문이긴 합니다만, 그래도 저같은 초보들이 조금이나마

도움이 되었으면 좋겠습니다. 다음번에는 Spring 3.0에서 REST구현법을 정리하겠습니다.

.
:
Posted by .07274.
.. .. ..

[펌] : http://devhome.tistory.com/64

 

 

TOMCAT SSL 적용

JDK에 포함된 keytool을 이용하여 Tomcat에 SSL을 적용하는 방법을 소개한다.

1. JDK bin 폴더라 이동한다.

- %JAVA_HOME%\bin

Ex) Win7의 경우 'C:\Program Files (x86)\Java\jdk1.6.0_32\bin' 경로에 존재한다. - 버전에 따라 상이

2. JDK를 이용해 Tomcat 인증서를 생성한다.

- keytool -genkey -alias tomcat -keyalg RSA

3. 생성된 .keystore 파일 확인

- 사용자 홈 폴더에 .keystore 파일이 생성되어 있음

- Ex) Win7의 경우 'C:\Users\사용자계정\.keystore' 위치에 생성되어 있음

4. Tomcat server.xml 설정

1.<connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" keystoreFile="${user.home}/.keystore" keystorePass="passwd" clientAuth="false" sslProtocol="TLS"></connector>

5. Tomcat 시작 및 SSL 적용확인

- https로 개발된 페이지를 접근해 보면됨

- Ex) https://localhost:8443

 

.
:
Posted by .07274.
.. .. ..
[WEBTOBDIR]/ssl 디렉토리에 보시면 wbssl.cnf 파일이 있습니다.
CA명령을 실행할 경우 이 configuration 파일을 참조하게 되어 있습니다.
이 파일내에 default_bits 를 검색해 보시면 1024로 나와 있습니다.
이 부분을 2048로 변경해 주시면 될 것 같습니다.
그리고 기본적으로 Message Digest는 md5입니다.
sha1로 변경하시려면 default_md 부분을 변경하시면 됩니다.
사용가능한 md 확인은 프롬프트 상에서 wbssl 이라고 치시면 OpenSSL 프롬프트가 떨어지고
여기서에 아무 명령을 치시면 에러가 나면서 MD나 Cipher 를 보실 수 있습니다.
수고하세요.

'I.lib() > I.lib(WebtoB)' 카테고리의 다른 글

webtob 와 jeus6 간 다른 머신간 연동  (1) 2012.07.13
.
:
Posted by .07274.
2012. 7. 26. 15:21

역 컴파일러 , 디 컴파일 I.lib()/I.lib(Eclipse)2012. 7. 26. 15:21

.. .. ..

[펌] : http://ngweb.tistory.com/121

 

이클립스에서 class 파일을 디컴파일하여 보여주는 플러그인을 소개합니다.



컴파일러와 플러그인이 필요하며 아래에서 다운로드 받을 수 있습니다.

- jad 디컴파일러 : http://www.kpdus.com/jad.html
(ver 1.5.8g)

- jadclipse 이클립스 플러그인 : http://jadclipse.sourceforge.net/




디컴파일러를 적당한 디렉토리에 압축 해제 하고 jadclipse를 이클립스 플러그인 디렉토리에 복사합니다.

이클립스를 재시작해서 jad 디컴파일러의 위치를 지정해 주시면 됩니다.


사용자 삽입 이미지



설정후 클래스 파일을 선택하면 아래와 같이 디컴파일되어 표시됩니다.


사용자 삽입 이미지





매우 유용하고 에러시에도 해당 내용을 표시할 수 있으나
생성되는 코멘트 덕분에 정확한 라인을 알 수 없다는게 조금 아쉽습니다.

.
:
Posted by .07274.
.. .. ..
기본적으로 jeus는 reverse connection을 사용하므로, webtob에서 jeus로 붙는것이 아니라, jeus에서 webtob로 붙습니다. 따라서 jeus의 WEBMain.xml의 address 부분에 webtob의 ip를 입력 해주시면 됩니다.
먼저 jeus의 servlet_engine에 보시면 WEBMain.xml의 <webtob-address>에 webtob 서버의ip를 넣어 줍니다.
그리고, <webtob-home>태그에 현재 경로에 맞게 아래와 같은 방식으로 넣어 설정 합니다.
<webtob-listener>테그의 registration-id 값과 webtob의 server절의 server네임과 매핑 시켜 주셔야 합니다.
예를 들면, 다음과 같습니다.
WEBMain.xml
<webtob-listener>
<listener-id>webtob1</listener-id>
<port>9900</port>
<output-buffer-size>8192</output-buffer-size>
<thread-pool>
<min>10</min>
<max>30</max>
<step>1</step>
<max-idle-time>30000</max-idle-time>
</thread-pool>
<webtob-address>localhost</webtob-address>
<webtob-home>D:\was\WebtoB4.1</webtob-home>
<registration-id>MyGroup</registration-id>
</webtob-listener>
http.m
*SERVER
html SVGNAME = htmlg, MinProc = 1, MaxProc = 5, ASQCount = 100
MyGroup SVGNAME = jsvg1, MinProc = 10, MaxProc = 30
마지막으로 각각의 min, max 값을 동일하게 맞춰 줍니다.

'I.lib() > I.lib(WebtoB)' 카테고리의 다른 글

WebToB CA 명령시 1024 를 2048로 변경하는 방법  (0) 2012.08.01
.
:
Posted by .07274.