Struts中文乱码
来源:互联网 发布:帝国cms 中华养生 编辑:程序博客网 时间:2024/04/30 00:58
框架:struts1.2,使用struts标签编写页面,Web容器:Tomcat 5.5 JDK:1.5
问题描述:做完demo,在<html:text>输入中文,点击提交,存在中文乱码
可能是问题太初级也太老,网上相关解决方案很多,也有很多人整理过,拿过来验证梳理一下,以下三种方式均运行通过,都能达到解决问题的目的。
方案一:重新ActionServlet类的process方法,dongyp511 博客(http://blog.csdn.net/dongyp511/)上的推荐方法
1.写一个MyActionServlet来并重写ActionServlet中的process()方法。
/** *//**@todo Override this org.apache.struts.action.ActionServlet method*/
request.setCharacterEncoding("UTF-8");//就加着一行一切都解决了,我用的编码UTF-8,^_^
super.process(request, response);
}
2.修改一下web.xml里面的配置,把<servlet-class>中默认的 org.apache.struts.action.ActionServlet 换成,你的MyActionServlet如 strutsdemo.MyActionServlet
<servlet-class>strutsdemo.MyActionServlet</servlet-class>
结论:问题解决,一劳永逸
方案二:使用ISO_8895_1直接转码,String str2=new String(str.getBytes("ISO_8859_1"),"UTF-8");
1. 做成通用方法如下:
...{
String strRet=null;
try...{
strRet = new String(src.getBytes("ISO_8859_1"),"UTF-8");
}catch(Exception e)
...{
}
return strRet;
}
2.在Action中调用上述方法,转码成功该方式可行,不知流传的不成功为何,不过感觉这样做比较麻烦。
方案三:使用 过滤器filter
1. 添加一个过滤类(继承Filter) SetCharacterEncodingFilter ,完整代码(注:假如我们是用tomcat作服务器的话,那就更方便了,我们可以直接在tomcat的webapps/jsp-examples/Web-INF/classes/filters目录中的SetCharacterEncodingFilter.java复制到你使用的包下即可)如下:
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;
/**
* @author Jesun
* @date 2008-2-16
* 源码来自Internet,我只作了简单的修改
* 解决Struts中文显示乱码问题
* */
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true; //在web.xml文件里定义filter时要用到此参数
public void destroy() {
// TODO Auto-generated method stub
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// 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 {
// TODO Auto-generated method stub
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);
}
}
//class end
2 配置web.xml文件,添加filter,
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.jesun.character.Filter.SetCharacterEncodingFilter</filter-class>//包名
<init-param>
<!-- 定义编码格式,我用的是UTF-8-->
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<!-- innore参数是在过滤器类定义的 -->
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>*.jsp</servlet-name>
</filter-mapping>
<!-- Filter 定义结束 -->
<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>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
3 jsp页面的编码格式要设成和配置文件中一致的格式
<META http-equiv=Content-Type content="text/html;charset=UTF-8">
rascal_hu博客(http://hi.baidu.com/rascal_hu/blog/item/e6dd2a342647b84a241f1470.html)
zhanglixin2006博客(http://zhanglixin2006.bokee.com/viewdiary.12273650.html)
结论:问题解决,虽然看似很复杂,解决的过程中需要做的不是很多
小结:应该还有其他的很多方法吧,第一种和第三种要做的东西基本类似,添加类和修改配置文件,能方便的应用于整个系统,不用在程序中嵌入大量的代码,个人感觉都不错。
- Struts中文乱码问题解决
- struts中文乱码问题解决
- struts中文乱码问题解决
- struts中文乱码
- struts中文乱码解决方案
- struts中文乱码问题解决
- struts中文乱码问题解决
- 解决Struts中文乱码
- struts中文乱码问题
- struts解决中文乱码
- struts中文乱码问题解决
- struts中文乱码解决方法
- struts 中文乱码问题
- Struts中文乱码
- struts中文乱码解决方案
- struts中文乱码解决
- struts中文乱码解决方案
- struts中文乱码问题
- monorail----ViewComponents
- 弦图判断
- SQL Server学习笔记之 T-SQL研究之[基本查询]
- 如何让 eclipse 全面 使用 Java API中文帮助文档
- 关于iis HTTPERR日志
- Struts中文乱码
- Java 核心技术丛书 卷I 学习心得
- phpMyAdmin中文乱码解决方法
- Gamit在fedora core8下的安装
- 人的价值
- 走出围城—程序员职业生涯规划路线图
- 08--04--05阶段 工作经验总结,,布局,复杂列表模型数据监听
- 程序设计的真正含义
- 我的爷爷,我的父亲