2014년 8월 13일 수요일

[심심풀이]Struts 에서 한글 사용하기[자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육]

Struts 에서 한글 사용하기 

한글의 경우 필요한 시기에 그때그때 인코딩을 해도 되지만 Servlet2.3에서 제공하는 Filter기능을 이용하는 것처럼 스트럿츠에서도 그러한 기능의 구현이 가능 합니다. 

-------------------------------------------------- 
우선 서블릿의  필터 기능을 이용하여 작성한 예입니다. 
-------------------------------------------------- 

[SetCharacterEncodingFilter.java] 

package filters; 


import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.UnavailableException; 



public class SetCharacterEncodingFilter implements Filter { 

    protected String encoding = null; 

    protected FilterConfig filterConfig = null; 


    /** 
    * Should a character encoding specified by the client be ignored? 
    */ 
    protected boolean ignore = true; 


    public void destroy() { 

        this.encoding = null; 
        this.filterConfig = null; 

    } 


    public void doFilter(ServletRequest request, ServletResponse response, 
                        FilterChain chain) 
        throws IOException, ServletException { 

        // Conditionally select and set the character encoding to be used 
        if (ignore || (request.getCharacterEncoding() == null)) { 
            String encoding = selectEncoding(request); 
            if (encoding != null) 
                request.setCharacterEncoding(encoding); 
        } 

        // Pass control on to the next filter 
        chain.doFilter(request, response); 

    } 

    public void init(FilterConfig filterConfig) throws ServletException { 

        this.filterConfig = filterConfig; 
        this.encoding = filterConfig.getInitParameter("encoding"); 
        String value = filterConfig.getInitParameter("ignore"); 
        if (value == null) 
            this.ignore = true; 
        else if (value.equalsIgnoreCase("true")) 
            this.ignore = true; 
        else if (value.equalsIgnoreCase("yes")) 
            this.ignore = true; 
        else 
            this.ignore = false; 

    } 


    protected String selectEncoding(ServletRequest request) { 

        return (this.encoding); 

    } 



[web.xml] 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> 
<web-app> 

<!-- Example filter to set character encoding on each request --> 
<filter> 
 <filter-name>Set Character Encoding</filter-name> 
 <filter-class>filters.SetCharacterEncodingFilter</filter-class> 
 <init-param> 
  <param-name>encoding</param-name> 
  <param-value>EUC-KR</param-value> 
 </init-param> 
</filter> 

<!-- Define filter mappings for the defined filters --> 
<filter-mapping> 
 <filter-name>Set Character Encoding</filter-name> 
 <servlet-name>action</servlet-name> 
</filter-mapping> 

    <servlet> 
        <servlet-name>action</servlet-name> 
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
        
        <init-param> 
            <param-name>config</param-name> 
            <param-value>/WEB-INF/struts-config.xml</param-value> 
        </init-param> 
        <init-param> 
            <param-name>debug</param-name> 
            <param-value>3</param-value> 
        </init-param> 
        <init-param> 
            <param-name>detail</param-name> 
            <param-value>3</param-value> 
        </init-param> 
        <load-on-startup>1</load-on-startup> 
    </servlet> 
    
    <servlet-mapping> 
        <servlet-name>action</servlet-name> 
        <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 
  
</web-app> 


------------------------------------------------------------- 
다음은 스트럿츠의 RequestProcessor 클래스를 이용한 예 입니다. 
------------------------------------------------------------- 

스트러츠의 RequestProcessor클래스의 processPreprocess라는 메소드를 이용하여 다른 작업이 이루어지기 전에 미리 설정할 것들을 이 메소드에서 정의할 수 있는데 …. 이곳에 한글 인코딩 부분을 기술하여 모든 스트럿츠 애플리케이션에서 적용 되도록 합니다. 

아래 파일을 MyFilter.java로 저장 합니다. (WEB-INF/classes/filter에 저장) 

package filter; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.struts.action.RequestProcessor; 

public class MyFilter extends RequestProcessor { 

        protected boolean processPreprocess( 
                HttpServletRequest request, 
                HttpServletResponse response) { 
                
                try { 
                        request.setCharacterEncoding("euc-kr"); 
                                                
                        return true; 
                } catch (Exception e) {                
                        return false;                        
                } 
        } 



이번에 struts-config.xml 파일에 Controller 매핑을 합니다. 

<!-- 한글 문제 처리를 위해 --> 
    <controller 
            contentType="text/html;charset=euc-kr" 
            debug="3"            
            locale="true" 
            nocache="true" 
            processorClass="filter.MyFilter"/> 

이상과 같이 설정하면 폼액션을 통해 넘어 오는 데이터에 대해 한글 변환을 일일이 하지 않아도 됩니다. 

테스트는 각자 해 보시구요~ 



평일주간[100%환급과정]
(8/18)Spring,MyBatis,Hibernate실무과정
(8/18)자바기초JDBC,Servlet/JSP까지
(8/18)PL/SQL,ORACLE HINT,TUNING
(8/25)C#4.0,WinForm,ADO.NET
(8/25)안드로이드개발자과정
(8/25)SQL기초에서 Schema Object까지
(8/25)오라클자바채용확정교육
평일야간[개인80%환급]
(8/21)Spring, MyBatis, Hibernate
(8/21)HTML5,CSS3,Ajax,jQuery마스터
(8/21)C#,Network,ADO.NET,ASP.NET
(8/26)SQL기초에서실무까지
(8/26)안드로이드개발자과정
(8/28)자바JSP,jQuery,Spring,MyBatis
주말주간[개인80%환급]
(8/16)C#,ASP.NET마스터(8/16)웹퍼블리싱 마스터
(8/16)Spring, MyBatis, Hibernate
(8/16)자바웹&스프링,마이바티스
(8/23)SQL기초에서실무까지
(8/23)자바,네트워크,웹&스프링
(8/30)안드로이드개발자과정
주말야간[개인80%환급]
(8/23)SQL기초에서실무까지
(8/23)자바,네트워크,웹&스프링

댓글 없음:

댓글 쓰기