package com.yida.filter;
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;
public class CharacterFilter implements Filter
{
private String encoding;
/**
* 自定义一个类,完成get请求的中文乱码解决
*
* @author yohn
*/
class MyRequest extends HttpServletRequestWrapper
{
public MyRequest(HttpServletRequest request)
{
super(request);
}
/**
* 重写父类的方法
*
* @param name
* 元素名
*/
public String getParameter(String name)
{
String str = super.getParameter(name);
try
{
str = new String(str.getBytes("iso8859-1"),encoding);
}
catch (Exception e)
{
}
return str;
}
}
public void destroy()
{
}
@SuppressWarnings("unchecked")
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
{
try
{
HttpServletRequest hsr = (HttpServletRequest) request;
if ("get".equalsIgnoreCase(hsr.getMethod()))
{
MyRequest mr = new MyRequest(hsr);
response.setCharacterEncoding(encoding);
chain.doFilter(mr,response);
}
else
{
hsr.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request,response);
}
}
catch (Exception e)
{
}
}
public void init(FilterConfig cfg) throws ServletException
{
String ie = cfg.getInitParameter("encoding");
if (null != ie && "" != ie)
{
this.encoding = ie;
}
else
{
this.encoding = "UTF-8";
}
}
public String getEncoding()
{
return encoding;
}
public void setEncoding(String encoding)
{
this.encoding = encoding;
}
}
****************web.xml****************
<filter>
<filter-name>ChineseFilter</filter-name>
<filter-class>com.yida.filter.CharacterFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ChineseFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter>
GET请求中文乱码解决方案
本文介绍了一种解决HTTP GET请求中出现的中文乱码问题的方法。通过自定义过滤器和请求包装类,确保了客户端传递的中文参数能正确解析并处理。此方案适用于Java Web应用,特别针对使用Servlet API的项目。
1549

被折叠的 条评论
为什么被折叠?



