您的位置:首页 > 其它

过滤器解决form表单中中文乱码问题

2011-11-23 21:51 393 查看
form表单中post请求的乱码问题很容易解决,只需设置request请求的响应头就OK了,但是get请求就不是那么容易解决的,下面就是在不改变服务器配置文件的前提下,利用过滤器将浏览器所有的请求的乱码问题解决。

在测试页面中:

<%@ page language="java" import="java.util.*" 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>

<title>测试页面</title>

</head>

<body>

<%--System.out.println("Filter is working");--%>

<form action="./TestCharacterEncoding.do" method="get">

<input type="text" name="city"/>

<input type="submit" value="提交"/>

</form>

</body>

</html>

过滤器的配置文件 web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>cn.csdn.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>charset</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<servlet>

<description>This is the description of my J2EE component</description>

<display-name>This is the display name of my J2EE component</display-name>

<servlet-name>TestCharacterEncoding</servlet-name>

<servlet-class>cn.csdn.web.servlet.TestCharacterEncoding</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>TestCharacterEncoding</servlet-name>

<url-pattern>/TestCharacterEncoding.do</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

下面就是过滤器的代码部分了

package cn.csdn.web.filter;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

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;

import javax.servlet.http.HttpServletRequestWrapper;

import javax.servlet.http.HttpServletResponse;

import com.sun.net.httpserver.HttpsConfigurator;

public class CharacterEncodingFilter implements Filter {

private String defaultEncoding = "utf-8";

private FilterConfig config = null;

class sword extends HttpServletRequestWrapper{

public sword(HttpServletRequest request) {

super(request);

}

@Override

public String getParameter(String name) {

name = super.getParameter(name);

try {

return new String(name.getBytes("iso8859-1"),"utf-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return null;

}

}

public void init(FilterConfig filterConfig) throws ServletException {

config = filterConfig;

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

if(req.getMethod().equals("post")){

req.setCharacterEncoding("utf-8");

}else{

request = new sword(req);

}

String charset = config.getInitParameter("charset");

if(charset==null){

charset=defaultEncoding;

}

response.setCharacterEncoding(charset);

response.setContentType("text/html;charset="+charset);

chain.doFilter(request, response);

}

public void destroy() {

}

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