过滤器解决中文编码问题
2014-07-14 22:06
323 查看
不多说,上代码
如果不使用struts标签库的话,可以考虑我写的这个简单例子
JSP:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'TestForm.jsp' starting page</title>
</head>
<body>
<form action="testForm.action" name="t" method="post" >
姓名111<input name="name" type="text"/>
<input type="button" value="提交" onclick="javascript:t.submit();">
</form>
</body>
</html>
Filter:
package strutsTest;
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.http.HttpServletRequest;
public class SetCharacterEncodingFilter implements Filter {
private String encoding;
private FilterConfig filterConfig=null;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest r=(HttpServletRequest) request;
if(null==request.getCharacterEncoding())
{
r.setCharacterEncoding(encoding);
System.out.println("FILTER SET ENCODING SUCCESS!");
}
System.out.println("filter encoding:"+r.getCharacterEncoding());
System.out.println("filter param :"+r.getParameter("name"));//这两句话一定要放在setCharacterEncoding的后面,否则的话还是乱码,传到Action也会乱码,或者去掉这两行
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig = arg0;
this.encoding = filterConfig.getInitParameter("encoding");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
web.xml:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>strutsTest.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
struts.xml:
<package name="zxl" extends="struts-default">
<!-- 测试form表单参数请求会不会出现在url地址栏里面 -->
<action name="testForm" class="strutsTest.TestForm">
<!-- / 表示跟路径下 即webRoot路径下面 -->
<result name="success">/jsp/TestFormSuccess.jsp</result>
</action>
</package>
action代码:
package strutsTest;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
public class TestForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println("TestForm.java:"+name);
/*try {
System.out.println("TestForm.java:"+new String(name.getBytes("ISO-8859-1"),"UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
}
public String execute(){
return "success";
}
}
如果不使用struts标签库的话,可以考虑我写的这个简单例子
JSP:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'TestForm.jsp' starting page</title>
</head>
<body>
<form action="testForm.action" name="t" method="post" >
姓名111<input name="name" type="text"/>
<input type="button" value="提交" onclick="javascript:t.submit();">
</form>
</body>
</html>
Filter:
package strutsTest;
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.http.HttpServletRequest;
public class SetCharacterEncodingFilter implements Filter {
private String encoding;
private FilterConfig filterConfig=null;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest r=(HttpServletRequest) request;
if(null==request.getCharacterEncoding())
{
r.setCharacterEncoding(encoding);
System.out.println("FILTER SET ENCODING SUCCESS!");
}
System.out.println("filter encoding:"+r.getCharacterEncoding());
System.out.println("filter param :"+r.getParameter("name"));//这两句话一定要放在setCharacterEncoding的后面,否则的话还是乱码,传到Action也会乱码,或者去掉这两行
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig = arg0;
this.encoding = filterConfig.getInitParameter("encoding");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
web.xml:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>strutsTest.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
struts.xml:
<package name="zxl" extends="struts-default">
<!-- 测试form表单参数请求会不会出现在url地址栏里面 -->
<action name="testForm" class="strutsTest.TestForm">
<!-- / 表示跟路径下 即webRoot路径下面 -->
<result name="success">/jsp/TestFormSuccess.jsp</result>
</action>
</package>
action代码:
package strutsTest;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
public class TestForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println("TestForm.java:"+name);
/*try {
System.out.println("TestForm.java:"+new String(name.getBytes("ISO-8859-1"),"UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
}
public String execute(){
return "success";
}
}
相关文章推荐
- Tomcat 5/6 GBK 编码下完美解决中文表单问题的过滤器
- 过滤器解决中文编码问题
- Tomcat 5/6 GBK 编码下完美解决中文表单问题的过滤器
- 解决页面中文的乱码问题,使用过滤器为所有页面配置编码格式,解决大部分的中文乱码问题
- Tomcat 5/6 GBK 编码下完美解决中文表单问题的过滤器
- Tomcat 5/6 GBK 编码下完美解决中文表单问题的过滤器
- 使用过滤器解决中文编码问题
- 帮助解决网页和JS文件中的中文编码问题的小工具
- 在控制器中添加过滤器,解决中文由jsp到action进而到数据库传输过程中出现的乱码问题(Struts)
- 利用扩展ActionServlet,解决中文编码问题
- 使用Servlet过滤器-解决了中文问题
- Sybase BCP导入数据时碰到中文编码问题的解决方法
- 解决STRUTS的中文编码问题
- 彻底解决jsp中文乱码问题(eclips 添加中文编码方式gb2312).
- 解决 Struts 国际化资源的中文编码问题
- 帮助解决网页和JS文件中的中文编码问题的小工具
- PHP 发送UTF-8编码中文邮件标题乱码问题解决
- 全方位解决xml中文编码问题
- Tomcat 5/6 GBK编码下解决中文表单问题的过滤器get方式(借鉴)
- 如何解决hp-unix中文二级编码乱码问题("喆")?