您的位置:首页 > 其它

过滤器解决中文编码问题

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";

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: