..
DEV/java (42)
get 방식으로 한글 전달시 한글 깨짐 발생
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

get 방식으로 한글 전달시 한글 깨짐 발생


1) jeus 인코딩 설정 변경 / tomcat 설정

  <encoding> 
    <response-encoding> 
   <forced>euc-kr</forced> 
    </response-encoding> 
    <postdata-encoding> 
   <forced>euc-kr</forced> 
    </postdata-encoding>
  </encoding>


2) 


encodeURIComponent( encodeURIComponent( val ) );  // 두번 인코딩
URLDecoder.decode() 함수를 한번만 호출

참고 

http://gampol.tistory.com/99


http://aslike.egloos.com/3000604

'DEV > java' 카테고리의 다른 글

JSP에서 JSTL과 EL(Expression Language) 사용하기  (0) 2013.08.20
파일 업로드시 용량  (0) 2012.01.05
객체 동치성 비교 방법  (0) 2011.12.04
  Comments,     Trackbacks
파일 업로드시 용량
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
1. 문제 사항

1. 이미지 업로드시 용량이 큰이미지는 업로드가 안되요.

Resolving exception from handler [null]: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. C:\eGovDev\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2
\work\Catalina\localhost\_\upload_1519e7ca_132d6fb608d__8000_00000000.tmp
(지정된 경로를 찾을 수 없습니다)


이런 에러가 납니다.


작은 사이즈의 이미지는잘 올라가구요.


업로드 파일 용량에 따라서 위의 에러메시지가 나옴.

2. 해결

maxUploadSize 를 조정 한다.

<bean id="multipartResolver" class="~~~.TestMultipartResolver">

<property name="defaultEncoding" value="UTF-8" />

<property name="maxUploadSize" value="200000000" />

</bean>


 
  Comments,     Trackbacks
객체 동치성 비교 방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
객체 동일성 비교

A a = new A(3);
A aa = a;

if( a == aa ) //true



객체 동치성 비교 

A a = new A(3);
A b = new A(3);

if( a == b ) //false 



객체 자체가 다름.
그러나 객체 안의 값은 동일 하다.
org.apache.commons.lang.builder 패키지에서 제공하고 있는 유틸리티

1. equalsBuilder 의 리플렉션 api 사용하기

public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); }



2. hashcodebuilder의 리플렉션 api 사용하기

public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); }



3. toStringBuilder의 리플렉션 api 사용하기

public String toString() { return ToStringBuilder.reflectionToString(this); }



참고 : http://www.gurubee.net/pages/viewpage.action?pageId=6260166

 
  Comments,     Trackbacks
Swfupload(UTF-8)과 프로젝트(EUC-KR)가 인코딩이 달라 한글이 깨지는 문제점
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. 인코딩

1) 프로젝트의 인코딩 : EUC-KR
2) SwfUpload의 인코딩 : UTF-8

2. SwfUpload에서 업로드 할 파일을 CommonsMultipartResolver에서 받아서 처리 합니다.

1) HyunjaeMultipartResolver 클래스를 생성합니다.
2) determineEncoding 메소드를 오버라이딩 합니다.

    @Override    protected String determineEncoding(HttpServletRequest request) {        StringBuffer url = request.getRequestURL();        if(url.indexOf("imageUpload") != -1){ // swfupload를 사용하고 있는 imageUpload의 경우 filename(한글)을 UTF-8로 가져옵니다.             return "UTF-8";        }        return "EUC-KR"; // 그외의 경우 EUC-KR로 받아옵니다.    }

3. xxx-servlet.xml에 Bean 등록

    <bean id="multipartResolver" class="net.schoolunit.hyunjae.upload.HyunjaeMultipartResolver">        <property name="defaultEncoding" value="UTF-8" />        <property name="maxUploadSize" value="100000000" />    </bean>

4. 업로드 완료 후 filename(EUC-KR) ==> vm에 출력 ( UTF-8 )

1) controller에 uploadFile객체를 vm에 출력하기 전에 UTF-8로 인코딩

uploadFile.setFilename( URLEncoder.encode(uploadFile.getFilename(), "UTF-8"));uploadFile.setRealname(URLEncoder.encode(uploadFile.getRealname(), "UTF-8"));

2) hanclers.js에 decodeURIComponent를 해준다.

function uploadSuccessImage(file, serverData) {    try {        var progress = new FileProgress(file, this.customSettings.progressTarget);        progress.setComplete();        progress.setStatus("Complete.");        progress.toggleCancel(false);        var url = location.href;        var hostname = url.substring(0, url.indexOf("/", 7));        var fileinfo = serverData.split(";");        var upflieno = fileinfo[0];        var filemime = fileinfo[1];        var filename = fileinfo[2];        var filesize = fileinfo[3];        var regdate = fileinfo[4];        var datepath = fileinfo[5];        var realname = fileinfo[6];        var filedata = {            'upfileno' : upflieno,            'imageurl': hostname + '/imageFiles/' + datepath + decodeURIComponent(realname),            'filename': decodeURIComponent(filename),            'filesize': filesize,            'imagealign': 'C',            'originalurl': hostname + '/imageFiles/' + datepath + decodeURIComponent(realname),            'thumburl': '/imageFiles/' + datepath + '/_thumb_' + decodeURIComponent(realname)        };        execAttach(filedata);    } catch (ex) {        this.debug(ex);    }}

'DEV > java' 카테고리의 다른 글

객체 동치성 비교 방법  (0) 2011.12.04
velocity reference url  (0) 2010.08.04
iterate  (0) 2010.07.13
  Comments,     Trackbacks
velocity reference url
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

주소 : http://velocity.apache.org/engine/devel/vtl-reference-guide.html

#set($cnt = $!math.sub($!entity.answer_cnt,1))
#set($answer_list = ["$!entity.answer1","$!entity.answer2","$!entity.answer3","$!entity.answer4"])
        
#foreach($i in [0 .. $cnt])
      <label for="textfield">단문항답변</label>
      <input name="textfield" type="text" id="textfield" value="$answer_list.get($i)" size="15" />
#end

$!math.toNumber($!entity.answer_cnt) : string -> number 타입으로 변경

  Comments,     Trackbacks
iterate
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
AND B.UNITNO in
  <iterate property="arrary_unitnos" conjunction="," open="(" close=")" >
   #arrary_unitnos[]#  
  </iterate>


arrary_unitnos : 배열형태

'DEV > java' 카테고리의 다른 글

velocity reference url  (0) 2010.08.04
HttpSessionBindingListener와 HttpSessionAttributeListener  (0) 2010.04.27
encoding  (0) 2010.04.15
  Comments,     Trackbacks
HttpSessionBindingListener와 HttpSessionAttributeListener
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

리스너라? 어떠한 특정 이벤트가 발생하면 실행이되도록 web.xml에 추가
어떠한 특정 이벤트가 발생하면 ? 이란걸 어떻게 알까? 이미 구현되어 있는 인터페이스를 사용하자.
이미 존재한 인터페이스는 아래 정리가 되어 있음....

HttpSessionAttributeListener는 세션에 어떤 속성이 추가, 제거, 수정되는 이벤트가 발생하는지 알고 싶을 때 사용한다. 반면에 HttpSessionBindingListener는 자신이 세션에 속성으로 추가되었는지, 제거 되었는지 알기 위하여 사용한다.

HttpSessionAttributeListener 인터페이스를 구현한 클래스를 web.xml의 리스너로 등록하여 현재 로그인시 online_user를 추가하고 로그아웃시 삭제 해준다.

자신이 원하는 로직으로 구현하기 위해서는 HttpSessionAttributeListener 인터페이스를 상속하여 재정의 하여 사용하면 된다.

[출처] http://www.4te.co.kr/549

리스너는 컨테이너가 애플리케이션과 HTTP 세션에 관련된 어떤 동작을 할 때마다
개발자가 정의한 다른 코드를 실행 가능하도록 만든 장치이다.
[세션리스너]
[javax.servlet.http.HttpSessionBindingListener]
[메소드]
valueBound(event) :: 객체가 세션에 추가되고 있음을 알림
valueUnbound(event) :: 객체가 세션에서 제거되고 있음을 알림
valueBound()메소드가 자동호출되고, 그 객체가 세션에서 빠지면 valueUnbound()
메소드가 자동으로 호출된다.
[javax.servlet.http.HttpSessionActivationListener]
이 기능을 지원하는 서버는 로드 밸런싱을 적절히 수행하여, 같은 컴퓨터
다수의 컴퓨터에 떠있는 여러 개의 JVM 사이서 세션을 주고 받게 할수 있다.
[메소드]
sessionDidActivate(event) :: 세션이 액티브 상태가 되었음을 알림
sessionWillPassivate(event) :: 세션이 패시브 상태가 되었음을 알림
어떤 세션이 다른 JVM 에 옮겨질 목적으로 저장된 것을 패시브 상태라고 하고
세션이 다른 JVM 으로 전송된 후에는 액티브 상태가 된다.
위의 두 리스너는 컨테이너에 따로 등록할 필요가 없다.
만들어 놓으면 이벤트 처리가 자동으로 된다.
[javax.servlet.http.HttpSEssionListener]
세션의 생성과 소멸을 나타내는 이벤트를 알리는 기능
[메소드]
sessionCreated(event) :: 세션이 메모리에 올라오고 초기화되었음을 알림
sessionDestroyed(event) :: 세션이 메모리에서 없어졌음을 알림
[javax.servlet.http.HttpSessionAttributeListener]
세션 속성에 관련된 이벤트 처리
[메소드]
attributeAdded(HttpSessionBindingEvent event)
:: 새 세션 속성에 값이 대입되었음을 알림
attributeReplaced(HttpSessionBindingEvent event)
:: 기존재 세션 속성에 새 값이 대입되었음을 알림
attributeRemoved(HttpSessionBindingEvent event)
:: 세션 속성이 제거 되었음을 알림.
event.getName() / event.getValue() 속성과 초기값 반환
HttpSessionAttributeListener HttpSessionBindingListener 는 동작상의
유사함을 가지고 있으나 가장 큰 차이점HttpSessionBindingListener
세션에 추가되는 객체가 직접 구현하지만 HttpSessionAttributeListener
구현하는 클래스는 세션에 직접 들어가지 않아도 된다는 점이다.
[애플리케이션 리스너]
[javax.servlet.ServletContext]
모든 서블릿과 JSP 페이지들이 공유한다는 점으로 오랜시간 사용해야하는
전역 리소스를 저장하는 장소
[메소드]
contextInitialized(ServletContextEvent event)
:: 애플리케이션이 로드되고 초기화됨을 알림
contextDestroy(ServletContextEvent event)
::애플리케이션이 언로드됨을 알림
[javax.servletServletContextAttributeListener]
[메소드]
attributeAdded(ServletContextAttributeEvent event)
:: 새 애플리케이션 속성에 값이 대입 되었음을 알림
attributeReplaced(event)
:: 이미 있는 애플리케이션 속성에 새 값 대입되었음을 알림
attributeRemoved(event) :: 애플리케이션 속성 제거되었음을 알림

[출처] http://happy2ni.egloos.com/2837900

'DEV > java' 카테고리의 다른 글

iterate  (0) 2010.07.13
encoding  (0) 2010.04.15
LinkedHashMap  (0) 2010.04.08
  Comments,     Trackbacks
encoding
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

http://ohgyun.com/230
 
javascript


encodeURIComponent('$!params.key')
homePost.setKey(URLDecoder.decode(homePost.getKey(), "UTF-8"));

document.xls.location.href= "sleepoutExcelInfo.do?bno=$params.bno&where=$!params.where&key="+encodeURIComponent('$!params.key');


java

String word = "무궁화 꽃이 피었습니다.";
System.out.println("utf-8 -> euc-kr        : " + new String(word.getBytes("utf-8"), "euc-kr"));
System.out.println("utf-8 -> ksc5601       : " + new String(word.getBytes("utf-8"), "ksc5601"));
System.out.println("utf-8 -> x-windows-949 : " + new String(word.getBytes("utf-8"), "x-windows-949"));
System.out.println("utf-8 -> iso-8859-1    : " + new String(word.getBytes("utf-8"), "iso-8859-1"));
System.out.println("iso-8859-1 -> euc-kr        : " + new String(word.getBytes("iso-8859-1"), "euc-kr"));
System.out.println("iso-8859-1 -> ksc5601       : " + new String(word.getBytes("iso-8859-1"), "ksc5601"));
System.out.println("iso-8859-1 -> x-windows-949 : " + new String(word.getBytes("iso-8859-1"), "x-windows-949"));
System.out.println("iso-8859-1 -> utf-8         : " + new String(word.getBytes("iso-8859-1"), "utf-8"));
System.out.println("euc-kr -> utf-8         : " + new String(word.getBytes("euc-kr"), "utf-8"));
System.out.println("euc-kr -> ksc5601       : " + new String(word.getBytes("euc-kr"), "ksc5601"));
System.out.println("euc-kr -> x-windows-949 : " + new String(word.getBytes("euc-kr"), "x-windows-949"));
System.out.println("euc-kr -> iso-8859-1    : " + new String(word.getBytes("euc-kr"), "iso-8859-1"));
System.out.println("ksc5601 -> euc-kr        : " + new String(word.getBytes("ksc5601"), "euc-kr"));
System.out.println("ksc5601 -> utf-8         : " + new String(word.getBytes("ksc5601"), "utf-8"));
System.out.println("ksc5601 -> x-windows-949 : " + new String(word.getBytes("ksc5601"), "x-windows-949"));
System.out.println("ksc5601 -> iso-8859-1    : " + new String(word.getBytes("ksc5601"), "iso-8859-1"));
System.out.println("x-windows-949 -> euc-kr     : " + new String(word.getBytes("x-windows-949"), "euc-kr"));
System.out.println("x-windows-949 -> utf-8      : " + new String(word.getBytes("x-windows-949"), "utf-8"));
System.out.println("x-windows-949 -> ksc5601    : " + new String(word.getBytes("x-windows-949"), "ksc5601"));
System.out.println("x-windows-949 -> iso-8859-1 : " + new String(word.getBytes("x-windows-949"), "iso-8859-1"));

'DEV > java' 카테고리의 다른 글

HttpSessionBindingListener와 HttpSessionAttributeListener  (0) 2010.04.27
LinkedHashMap  (0) 2010.04.08
JDBC 드라이버를 이용하여 접속 테스트 하기  (0) 2010.03.11
  Comments,     Trackbacks
LinkedHashMap
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

LinkedHashMap은  HashMap 달리 순서가 유지 된다.

두개씩 쌍을 이루고 원하는 값을 키값만 알고 있다면 get으로 불러올수 있음.

velocity macro의 select , radio를 사용 시에는 map형태로 뿌려줘야 하는데 이때 내가 원하는 순서대로 나오기 위해서는 LinkedHashMap로 담아야 한다.

코드 테이블을 예를 들면 우선 list 형식으로 가져온다. 그리고 LinkedHashMap에 넣는다.

List<CodeSpec> codeList = getSqlMapClientTemplate().queryForList("쿼리아이디", 부모코드);

LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();

  for (CodeSpec codeSpec : codeList) {
   map.put(codeSpec.getCode(), codeSpec.getCodename());
  }

'DEV > java' 카테고리의 다른 글

encoding  (0) 2010.04.15
JDBC 드라이버를 이용하여 접속 테스트 하기  (0) 2010.03.11
[java] File 클래스 활용  (0) 2009.08.23
  Comments,     Trackbacks
JDBC 드라이버를 이용하여 접속 테스트 하기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

JDBC 드라이버를 이용하여 접속 테스트 하기

소스 파일 다운로드 : jdbc_test.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@ page language="java" import="java.sql.*" %>
     
    <%
    String url = "jdbc:oracle:thin:@211.58.154.212:1521:test";
    //String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=211.58.154.212)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=test)(SERVER=DEDICATED)))";
    String user = "apps";
    String pwd = "apps";
     
    Connection conn = null;
     
    try  {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        out.println("드라이버 로딩 성공");
        out.println("<br /><br />");
     
        conn = DriverManager.getConnection(url, user, pwd);
     
        out.println("드라이버 버전 : " + conn.getMetaData().getDriverVersion());
        out.println("<br /><br />");
     
        out.println("DB 접속 성공");
        out.println("<br /><br />");
    }  catch (ClassNotFoundException e)  {
        e.printStackTrace();
        out.println("드라이버 로딩 에러 : " + e.getMessage());
        out.println("<br /><br />");
    }  catch (SQLException e) {
        e.printStackTrace();
        out.println("DB 접속 에러 : " + e.getMessage());
        out.println("<br /><br />");
    }  finally  {
        if (null != conn)  {
            try  {
                conn.close();
            }  catch (Exception e) {
                e.printStackTrace();
            } finally {
                conn = null;
            }
        }
    }
    %>

WAS 컨넥션 풀을 이용하여 접속 테스트 하기

소스파일 다운로드 : jdbc_pool_test.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@ page language="java" import="java.sql.*" %>
    <%@ page language="java" import="javax.sql.*" %>
    <%@ page language="java" import="javax.naming.*" %>
     
    <%
    String jndi = "java:/jdbc/Oracle";
    String user = "system";
    String pwd = "manager";
     
    Context context = new InitialContext();
    DataSource ds = null;
    Connection conn = null;
     
    try  {
        ds = (DataSource)context.lookup(jndi);
        out.println("DataSource lookup 성공");
        out.println("<br /><br />");
    }  catch (NamingException e)  {
        e.printStackTrace();
        out.println("풀 에러 : " + e.getMessage());
        out.println("<br /><br />");
    } finally  {
        if (null != context) {
            try  {
                context.close();
            }  catch (NamingException e)  {
                e.printStackTrace();
            }  finally  {
                context = null;
            }
        }
    }
     
    try  {
        conn = ds.getConnection();
     
        out.println("드라이버 버전 : " + conn.getMetaData().getDriverVersion());
        out.println("<br /><br />");
     
        out.println("getConnection() - DB 접속 성공");
        out.println("<br /><br />");
    }  catch (SQLException e)  {
        e.printStackTrace();
        out.println("getConnection() - DB 접속 에러 : " + e.getMessage());
        out.println("<br /><br />");
    }  finally  {
        if (null != conn)  {
            try  {
                conn.close();
            }  catch (Exception e)  {
                e.printStackTrace();
            }
            conn = null;
        }
    }
     
    try  {
        conn = ds.getConnection(user, pwd);
        out.println("getConnection(\"" + user + "\", \"" + pwd + "\") - DB 접속 성공");
        out.println("<br /><br />");
    }  catch (SQLException e)  {
        e.printStackTrace();
        out.println("getConnection(\"" + user + "\", \"" + pwd + "\") - DB 접속 에러 : " + e.getMessage());
        out.println("<br /><br />");
    }  finally  {
        if (null != conn)  {
            try  {
                conn.close();
            }  catch (Exception e)  {
                e.printStackTrace();
            }
            conn = null;
        }
    }
    %>

'DEV > java' 카테고리의 다른 글

LinkedHashMap  (0) 2010.04.08
[java] File 클래스 활용  (0) 2009.08.23
[ java ] 날짜 관련 클래스 정리  (0) 2009.08.23
  Comments,     Trackbacks