统一全站字符编码的过滤器
原理:通过配置参数encoding指明使用何种字符编码,以处理Html Form请求参数的中文问题
知识:
由于开发人员在filter中可以得到代表用户请求和响应的request、response对象,因此在编程中可以使用Decorator(装饰器)模式对request、response对象进行包装,再把
包装对象传给目标资源,从而实现一些特殊需求。
package com.jjyy.filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
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 EncodeFilter implements Filter {
private FilterConfig config = null;
private String encode = null;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//响应的乱码处理
response.setContentType("text/html;charset=utf-8");
//装饰
chain.doFilter(new MyHttpServletRequest((HttpServletRequest)request), response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
this.encode = config.getInitParameter("encode")==null?"utf-8":config.getInitParameter("encode");
}
//请求乱码的处理
class MyHttpServletRequest extends HttpServletRequestWrapper{
private HttpServletRequest request = null;
boolean isNotEncode = true;
public MyHttpServletRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public Map getParameterMap() {
try {
if(request.getMethod().equalsIgnoreCase("POST")){
request.setCharacterEncoding(encode);
return request.getParameterMap();
}else if(request.getMethod().equalsIgnoreCase("GET")){
//request.getParameterMap()第一次会解决,然后缓存起来
//request.getParameterMap()第二次直接从缓存中的map
Map<String,String[]> map = request.getParameterMap();
if(isNotEncode){
for(Map.Entry<String, String[]> entry:map.entrySet()){
String [] vs = entry.getValue();
for(int i=0;i<vs.length;i++){
vs[i]= new String(vs[i].getBytes("iso8859-1"),encode);
}
}
isNotEncode = false;
}
return map;
}else{
return request.getParameterMap();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return super.getParameterMap();
}
@Override
public String getParameter(String name) {
return getParameterValues(name)==null?null:getParameterValues(name)[0];
}
@Override
public String[] getParameterValues(String name) {
return (String[])getParameterMap().get(name);
}
}
}
分享到:
相关推荐
配置Filter过滤器处理JSP中文乱码 参考Tomcat服务器目录webapps的examples示例 简单配置步骤: 1.在项目web.xml文件添加过滤器标记<filter>和<filter-mapping>; 2.实现过滤器代码; 3.对Tomcat服务器conf目录里的...
character-encoding-filter 是 Java Web 乱码过滤器。 web.xml <filter> <filter-name>character-encoding-filter</filter-name> <filter-class>...
用eclipse集成开发环境, jsp 过滤器——解决中文乱码问题
在 WEB.XML文件里粘贴一下代码 可以解决乱码问题 <filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.highcom.filter.EncodingFilter</filter-class> <init-param> <param-name>encoding...
乱码解决 乱码解决 乱码解决 乱码解决 乱码解决 乱码解决 乱码解决
过滤器代码--解决jsp中的字符乱码问题,可以让你不在为字符的乱码担心。
解决java乱码的代码,配置过滤器,解决乱码问题。
利用过滤器(filter)解决myeclipse中的乱码问题,包含过滤器源代码,不懂的加Q9402055517。
使用过滤器解决中文乱码。有时候碰见乱码问题,作为开发人员总得想办法解决不是吗?
本教程中以实际例子介绍了过滤器的运行方式,以JSP开发中常见的中文乱码过滤器和限抽客户机IP访问的二个例子,本教程中代码部分转载,都经过本人修改了其中错误,加了详细注释,保证可以正常运行,希望对大家有所帮助
利用过滤器解决JavaWeb(JSP)的乱码问题
过滤器实现get请求乱码问题 过滤器实现get请求乱码问题 过滤器实现get请求乱码问题
使用filter过滤器解决中文乱码问题,包含源码,以及filter的配置,希望能帮上大家
乱码解决方案和过滤器的解决与用户的登陆error解决 乱码解决方案和过滤器的解决与用户的登陆error解决
解决两个问题:一、从反编译代码的界面CTRL+C复制是如果选中内容包含中文,贴到其他编辑器时,中文丢失; 二、打开xml文件、properties文件等包含中文时。中文在反编译界面中显示乱码。用其他工具打开正常。
jd-gui.exe反编译后复制中文是乱码,xml,yml...等配置文件中文显示为乱码,本资源修改了编码,反编译后中文随意复制,配置文件显示也是正常的
jsp用过滤器解决中文乱码问题的方法.docx
jsp 课件 过滤器 中文乱码的处理
java里中文乱码的解决篇之过滤器,可以存档,需用时拿过来就能用。