转载:http://blog.csdn.net/caoyinghui1986/archive/2008/03/25/2216198.aspx
初学Struts的人一定遇到过中文的乱码问题 ,目前解决的方法有很多。我这有两种经典的方法和大家分享。
1,重写 RequestProcessor 这是最简单的方法。
public class MyRequestProcessor extends RequestProcessor {
@Override
protected boolean processPreprocess(HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("UTF-8"); //在这加一行设置编码的的代吗。
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.processPreprocess(request, response);
}
}
页面的编码也要保持一致
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
另外在struts-config.xml 中配置 <controller> 元素
<controller processorClass="com.cao.struts.MyRequestProcessor"/>
不过该方法只对 post 请求有作用
如果对get 方法也有作用processPreprocess 方法写成
if( request.getMethod().compareToIgnoreCase("post")>=0){
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
Iterator iter=request.getParameterMap().values().iterator();
while(iter.hasNext())
{
String[] parames=(String[])iter.next();
for (int i = 0; i < parames.length; i++) {
try {
parames[i]=new String(parames[i].getBytes("iso8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
2,通过过滤器使用请求代理
public class EncodingFilter extends javax.servlet.http.HttpServlet implements Filter {
FilterConfig filterConfig;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
// TODO Auto-generated method stub
MyRequest req = new MyRequest( (HttpServletRequest)request);//设置代理请求
filterChain.doFilter(req, response);
}
public void init(FilterConfig arg0) throws ServletException {
this.filterConfig = arg0;
}
}
class MyRequest extends javax.servlet.http.HttpServletRequestWrapper{//自定义的代理请求类
HttpServletRequest request;
public MyRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
public String[] getParameterValues(String name){
String strs[] = super.getParameterValues(name);
for(int i=0;i<strs.length;i++){
strs[i] = this.myEncoding(strs[i]);
}
return strs;
}
private String myEncoding(String input){
String output ="";
try {
output = new String(input.getBytes("ISO-8859-1"),"UTF-8"); //注意同页面的编码保持一致
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return output;
}
}
在web.xml中进行配置
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.cao.struts.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
该方法既可以用于post请求又可以用于get请求。
希望对大家有所帮助!
分享到:
相关推荐
struts中文乱码问题解决详细步骤(两种方法)
Struts中文乱码解决方案
struts 中文乱码问题解决
Struts中中文乱码的解决方法 Struts中中文乱码的解决方法 Struts中中文乱码的解决方法
struts1.2 解决中文乱码(Java技术)
解决Struts2.0中文乱码详细方法。
关于StrutsPrepareAndExecuteFilter最新的过滤器,在Struts.xml定义常量<constant name="struts.i18n.encoding" value="UTF-8"/>...关于Struts2各个版本、各种过滤器,用get方式提交都方法都无法解决的中文乱码问题。
解决myeclipse Struts中文乱码问题视频
struts2中文乱码的解决DEMO,绝对可以运行。
解决中文乱码的问题
struts2中存在中文乱码的问题解决方 中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。 大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码...
在进行web应用程序开发的过程中,中文问题经常困扰着很多程序员。因此,在接下来的两个课程的学习中,我将根据实践经验来谈一下web应用中的中文问题的解决方法。让大家不再为此而头痛。
struts中中文乱码问题解决方法,并对其进行了总结。
Struts2资源文件在jsp页面中显示乱码解决
奇怪的struts2的中文乱码问题及解决.docx
struts2中文乱码解决方案 1.在struts.xml文件中加入一个常量配置: <struts> <constant name="struts.i18n.encoding" value="GBK"/> </struts> 2.在web.xml文件中struts的filter之前加入 <filter> ...
Struts实现文件下载中文乱码解决方案收藏
JSP struts2 url传参中文乱码解决办法.docx
本文档含有四种解决struts中出现的中文乱码的方法,只要按步骤,一定可以使用,非常经典哦
在web开发的时候,经常会出现中文乱码,你首先看看,你的乱码问题是处在数据库方面呢? 还是代码中,这里的解决是代码中的乱码,里面有两种方法可以解决