'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 로 요런 옵션을 추가해 주고 스타트 하면 에러가 안난다.

-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

<?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 에서 쪽바로 되는지 테스트

<%@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 트리 확인해 보기

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 구조를 확인해 볼 수 있다.

<%@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 요걸 설정해 줘야 한다.



<?xml version="1.0"?>
  <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
  "http://jetty.mortbay.org/configure.dtd">

<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