'jetty'에 해당되는 글 6건

  1. 2014.05.14 Jetty 로 개발할때 org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8! 익셉션 처리
  2. 2014.02.18 jetty 7.x 에서 JNDI Oracle Datasource 설정하기
  3. 2012.02.09 java.lang.IllegalStateException: Form too large xxx>200000 익셉션이 발생할때.
  4. 2011.08.22 Eclipse Maven Jetty Plugin 으로 개발하면서 java.lang.OutOfMemoryError: PermGen space 익셉션이 발생할때.
  5. 2011.08.16 Maven & Jetty Plugin - PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required 에러가 날때. 4

Jetty 로 개발할때 org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8! 익셉션 처리


Jetty 로 개발하면서 org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8! 익셉션이 발생한다면


Jetty 스타트시 vm argument 로 요런 옵션을 추가해 주고 스타트 하면 에러가 안난다.

1
2
3
-Dfile.encoding=EUC-KR
-Dorg.eclipse.jetty.util.UrlEncoding.charset=EUC-KR
-Dorg.eclipse.jetty.util.URI.charset=EUC-KR



이클립 Run-Jetty-Run 훌러그인을 사용할 경우 요렇게 하면 된다~




정확하게는 모르겠지만 org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8! 에러가 날때를 보니 url 상에 한글이 있을 경우 익셉션이 발생하는것 같았다.

jetty 7.x 에서 JNDI Oracle Datasource 설정하기



먼저 Datasource 를 설정하기 위해 당연히 WEB-INF/lib 에 오라클 jdbc 드라이버 jar 파일이 들어가 있어야 된다.




JNDI 설정하기


1. WEB-INF/jetty-web.xml 파일 추가

jetty-web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
 
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <New class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg></Arg>
        <Arg>JNDI 이름</Arg>
        <Arg>
            <New class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
                <Set name="URL">jdbc:oracle:thin:@아이피:포트:디비이름</Set>
                <Set name="User">아이디</Set>
                <Set name="Password">비밀번호</Set>
            </New>
        </Arg>
    </New>
</Configure>



이것저것 찾아보니 요렇게 설정한 다음에 web.xml 파일에 <resource-ref> 부분을 추가해 주라고 하던데 테스트 해보니 굳이 추가 안해줘도 된다.



2. JSP 에서 쪽바로 되는지 테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
<%
    Context ctx = new InitialContext();
    DataSource ds = (DataSource)ctx.lookup("JNDI 이름");
    // 이름을 myds 로 설정 했다면 ctx.lookup("myds"); 요렇게
    // 이름을 jdbc/myds 로 설정 했다면 ctx.lookup("jdbc/myds"); 요렇게 lookup 하면된다.
     
    Connection conn = ds.getConnection();
    ResultSet rs = conn.prepareStatement("select sysdate from dual").executeQuery();
     
    while( rs.next() ){
        out.print(rs.getString("sysdate"));
    }
%>




※ JNDI 트리 확인해 보기

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.tistory.stove99;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
 
public class JNDIUtil {
    public final static boolean INCREASE = true;
    public final static boolean DECREASE = false;
 
    private int level = 0;
    private Context context = null;
 
    public JNDIUtil() throws NamingException{
        context = new InitialContext();
    }
     
    public void print(){
        print("");
    }
 
    public void print(String name){
        try{
            print(context.list(name), name);
        }catch (NamingException e){}
    }
 
    private void print(NamingEnumeration pairs, String parent) throws NamingException{
        while (pairs.hasMoreElements()) {
            NameClassPair pair = (NameClassPair)pairs.nextElement();
             
            print(pair);
             
            indent(JNDIUtil.INCREASE);
            print((parent.length() == 0) ? pair.getName() : parent + "/" + pair.getName());
            indent(JNDIUtil.DECREASE);
        }
    }
 
    private void print(NameClassPair entry){
        for (int i = 0; i < level; i++) {
            System.out.print(" ");
        }
         
        System.out.println("-->" + entry);
    }
     
    private void indent(boolean increase){
        if(increase) level += 4;
        else level -= 4;
    }
}


JSP 쪽에서 요 클래스를 땡겨다 실행해 보면 콘솔창에서 JNDI 구조를 확인해 볼 수 있다.

1
2
3
4
<%@page import="com.tistory.stove99.JNDIUtil"%>
<%
    new JNDIUtil().print();
%>



java.lang.IllegalStateException: Form too large xxx>200000 익셉션이 발생할때.

뭐 대부분의 경우 요 익셉션을 볼 건덕지가 없겠지만~

요 익셉션은 후로그램 상의 문제가 아니라 후로그램이 돌아가는 서버에서 발생하는 익셉션이다.


웹 개발에서 POST 로 서브밋 할때 최대한 보낼수 있도록 설정된 데이터 크기보다 더 큰 데이터를 서브밋 해서 발생하는 익셉션이다.

로컬에서 개발할때 Jetty 를 서버로 써서 개발하고 있기 때문에 Jetty 에서 요 익셉션을 해결하는 방법을 알아 보았다.


찾아보니까 뭐 이것저것 알아들을 수 없는 말을 써 놨던데

방법들 중에서 제일 간편한 방법은 /WEB-INF 폴더에 아래와 같은 jetty-web.xml 파일을 맹글어, 추가해 주면 간단히 해결할 수 있다.

Jetty 가 스타트 될때 web.xml 처럼, 아마 jetty-web.xml 파일을 자동으로 참조해서 설정을 하나보다.

※ maxFormContentSize 의 값으로 원하는 만큼 쭉 늘려주면 된다. 익셉션 내용에서도 알수 있겠지만 디폴트값은 200000 인것 같다.

※ Jetty 7 버전 이상부터 패키지가 org.eclipse.xxx 요걸로 바껴서 class 부분을 죠렇게 설정했고, 이전버전을 쓰고 있다면 class 에 org.mortbay.jetty.webapp.WebAppContext 요걸 설정해 줘야 한다.



1
2
3
4
5
6
7
<?xml version="1.0"?>
  <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
 
<Configure id="WebAppContext" class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="maxFormContentSize" type="int">1000000</Set>
</Configure>

Eclipse Maven Jetty Plugin 으로 개발하면서 java.lang.OutOfMemoryError: PermGen space 익셉션이 발생할때.

Run > Run Configurations 로 가서 실행할때 썼던 런설정을 왼쪽트리에서 선택하고, 아래 그림처럼 JRE VM arguments에 셋팅해주면됨

 

VM arguments 셋팅


추가해줄 항목
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m

※ Jetty 뿐만 아니라 다른데서도 permgen space 에러가 나면 죠 위에 옵션을 jvm 구동시 옵션으로 주면 된다. 
 

Maven & Jetty Plugin - PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required 에러가 날때.

이클립에서 Maven과 Jetty Plugin을 이용해서 뭔가를 쪼물락 거릴때 저런 에러가 났다.

이유는 workspace 에서 사용하도록 디폴트로 설정된게 JDK 가 아닌 JRE 라서 나는 에러인것 같다.

죠것을 해결하기 위해서는

Window >  Preference > Java >  Installed JREs 에 가보면 현재 사용한다고 체크되 있는것이 JDK 가 이닌 JRE 일껀데 고 체크되있는 것을 클릭한후 Edit 버튼을 눌러서 JDK 로 바꿔주면 된다.

만약 JDK로 바꿨는데 에러모양이 뜨면 Project > Clean 으로 클린을 한번싹 시켜주면 된다~

선택후 Edit 버튼클릭


JDK 가 설치된 디렉토리로 변경해준다.


prev 1 2 next


Article Category

분류 전체보기 (223)
이클립 (28)
maven (9)
Spring (7)
Java (26)
mybatis (8)
jQuery Plugi.. (8)
Javascript (14)
Javascript 예.. (12)
CSS (2)
잡다구리 샘플 (4)
쓸만한지식 (81)
Ubuntu serve.. (22)
쇼핑물건 평가 (1)

Recent Article