首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts中文有关问题解决办法

2012-09-14 
struts中文问题解决方法最近正在学习struts,学习过java的人都知道,中文乱码是的问题的。今次运用struts框架

struts中文问题解决方法

最近正在学习struts,学习过java的人都知道,中文乱码是的问题的。今次运用struts框架同样需要解决这个问题的。这次运用在从页面提交数据到ationForm中时出现的乱码问题。只有从页面提交至actionForm的乱码问题解决以后,我们再能说怎么解决提交至数据库的 乱码问题。

??????? (一)自己编写一个类,来覆盖ActionServlet中的RequestProcessor方法。大致的意思就是说当使用到RequestProcessor方法时,并不是使用ActionServlet中提供的方法,而是使用我们自己定义的方法(其实是废话!呵呵!),提供代码如下:
package cn;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;

public class MyRequestProcessor extends RequestProcessor {?
?protected boolean processPreprocess(HttpServletRequest request,HttpServletResponse response){
??try{
???request.setCharacterEncoding("GB2312");
??}
??catch(Exception e){
???System.out.println("set character failed!");
??}
??return true;
?}
}

很简单的几行代码。
还需要在struts-config.xml中设置一下。
<controller processor/>
这个配置的位置必须要放正确,使用过struts的人都知道的。放在<action-mappings/>之后,<message-resources/>之前。否则是不正确的。
这样就可以实现从表单提交至actionForm的改成中文编码,而不会是乱码。

(二)使用filter过滤器
同样需要自己添加一个类,具体代码如下:
package cn;
/*
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 SetEncodingFilter ?implements Filter{
??protected String encoding=null;
??
??protected FilterConfig filterConfig=null;
??
??protected boolean ignore=true;
??
??public void destory(){
???this.encoding=null;
???this.filterConfig=null;
??}
??
??public void doFilter(ServletRequest request,
????ServletResponse response,
????FilterChain chain)throws IOException,ServletException{
???if(ignore||(request.getCharacterEncoding()==null)){
????request.setCharacterEncoding(selectEncoding(request));
???}
???chain.doFilter(request,response);
??}
??
??public void init(FilterConfig filterConfig)throws ServletException{
???this.encoding=filterConfig.getInitParameter("encoding");
???String value=filterConfig.getInitParameter("ignore");
???if(value==null)
????this.ignore=true;
???else if(value.equalsIgnoreCase("true")||value.equalsIgnoreCase("yes"))
???this.ignore=true;
???else
????this.ignore=false;
??}
??
??protected String selectEncoding(ServletRequest request){
???return (this.encoding);
??}
??
??public FilterConfig getFilterConfig(){
???return filterConfig;
??}
??
??public void setFitlerConfig(FilterConfig filterConfig){
???this.filterConfig=filterConfig;
??}
?}

我们需要在web.xml文件中做以下配置:
<filter>
? ?<filter-name>Set Character Encoding</filter-name>
? ?<filter-class>cn.SetEncodingFilter</filter-class>
? ?<init-param>
? ??<param-name>encoding</param-name>
? ??<param-value>GB2312</param-value>
? ?</init-param>
? ?<init-param>
? ??<param-name>enable</param-name>
? ??<param-value>true</param-value>
? ?</init-param>
? </filter>
???
? <filter-mapping>
? ?<filter-name>Set Character Encoding</filter-name>
? ?<url-pattern>/*</url-pattern>? ?
? </filter-mapping>
? <filter-mapping>
? ?<filter-name>Set Character Encoding</filter-name>
? ?<servlet-name>Action Servlet</servlet-name>
? </filter-mapping>
? <filter-mapping>
? ?<filter-name>Set Character Encoding</filter-name>
? ?<servlet-name>Faces Servlet</servlet-name>
? </filter-mapping>

这部分配置放在哪?看了几个网页的方法,就拿来用,居然不能成功。最后发现是位置不对。应该放在</servlet-mapping>后面。我之前放在了<servlet>之前。怎么弄都不成功。最后换了一下位置就OK了!

还需要说明的一点是:
?? <init-param>
? ??<param-name>encoding</param-name>
? ??<param-value>GB2312</param-value>
? ?</init-param>

需要在页面中使用<%@page language="java" contentType="text/html; charset=GB2312"%>才行。如果换成其他编码,那么这个<param-value>的值也需要更换。

?

热点排行