您的位置:首页 > 编程语言 > Java开发

在控制器中添加过滤器,解决中文由jsp到action进而到数据库传输过程中出现的乱码问题(Struts)

2006-02-15 08:48 836 查看
解决方案:通过在控制器中添加过滤器,解决中文由jsp到action进而到数据库传输过程中出现的乱码问题。
具体实现:
web-app概述:该文件是所有的WEB APP共用的部署配置文件,每当一个WEB APP被DEPLOY,该文件都将先被处理,然后才是WEB APP自己的/WEB-INF/web.xml。
 
web-app的代码如下:(注意:红字内容所在的位置是固定的,不能随意放置。)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
 
 
 <filter>
    <filter-name>setcharacterencodingfilter</filter-name>
<filter-class>com.aide.zxdk.servlet.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>ignore</param-name>
      <param-value>true</param-value>
    </init-param>
 </filter>
 
 
 <filter-mapping>
    <filter-name>setcharacterencodingfilter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>
 <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>application</param-name>
      <param-value>com.aide.zxdk.message.Messages_zh</param-value>
    </init-param>
    <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>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
 </servlet>
 <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.x</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <error-page>
    <exception-type>com.aide.zxdk.exception.StandardException</exception-type>
    <location>/jsp/errors/standard.jsp</location>
 </error-page>
 <error-page>
    <exception-type>com.aide.zxdk.exception.UserNotLoggedException</exception-type>
    <location>/jsp/errors/userNotLogged.jsp</location>
 </error-page>
 <taglib>
    <taglib-uri>http://displaytag.sf.net</taglib-uri>
    <taglib-location>/WEB-INF/tlds/displaytag-12.tld</taglib-location>
 </taglib>
</web-app>
因此只需在其中加入过滤器:
<filter>
    <filter-name>setcharacterencodingfilter</filter-name>
<filter-class>com.aide.zxdk.servlet.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>ignore</param-name>
      <param-value>true</param-value>
    </init-param>
 </filter>
再通过:
<filter-mapping>
    <filter-name>setcharacterencodingfilter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>
将其映射到过滤器的类中,
该类的代码如下:
package com.aide.zxdk.servlet;
 
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
 
public class SetCharacterEncodingFilter extends HttpServlet implements Filter {
 
 protected String encoding = null;
 protected FilterConfig filterConfig = null;
 protected boolean ignore = true;
 
 //Handle the passed-in FilterConfig
 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;
   }
 
 }
 
 //Process the request/response pair
 
 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);
 
}
 
protected String selectEncoding(ServletRequest request) {
 return (this.encoding);
}
 
 //Clean up resources
 public void destroy() {
    this.encoding = null;
    this.filterConfig = null;
 }
}
即完成了对所有写入的中文的过滤。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐