用过滤器来解决JSP中文乱码问题
来源:互联网 发布:知页简历官网登陆 编辑:程序博客网 时间:2024/05/16 13:58
首先写一个过滤器的类,如下:
1 package com.util; 2 3 import java.io.IOException; 4 import java.io.UnsupportedEncodingException; 5 6 import javax.servlet.Filter; 7 import javax.servlet.FilterChain; 8 import javax.servlet.FilterConfig; 9 import javax.servlet.ServletException;10 import javax.servlet.ServletRequest;11 import javax.servlet.ServletResponse;12 import javax.servlet.http.HttpServletRequest;13 import javax.servlet.http.HttpServletRequestWrapper;14 import javax.servlet.http.HttpServletResponse;15 import javax.servlet.http.HttpSession;16 17 18 //过滤器处理表单传到servlet的乱码问题19 public class MyFilter implements Filter{20 //自写一个request换掉原来的request,重写里面的getParemeter方法,可以设置编码21 class MyRequest extends HttpServletRequestWrapper{22 23 @Override24 public String getParameter(String param) {25 String value = null;26 try {27 //post28 super.setCharacterEncoding(encoding);//把编码转换为encoding29 value = super.getParameter(param);30 if(super.getMethod().equalsIgnoreCase("GET")){31 if(value!=null){32 value = new String(value.getBytes("iso8859-1"),encoding);33 }34 }35 } catch (UnsupportedEncodingException e) {36 // TODO Auto-generated catch block37 e.printStackTrace();38 }39 return value;40 }41 42 public MyRequest(HttpServletRequest request) {43 super(request);44 }45 46 }47 protected String encoding=null; 48 public void destroy() { //销毁49 // TODO Auto-generated method stub50 this.encoding=null;51 }52 //对编码问题进行转换53 public void doFilter(ServletRequest request, ServletResponse response,54 FilterChain chain) throws IOException, ServletException {55 // TODO Auto-generated method stub56 response.setContentType("text/html;charset="+encoding);57 //过滤未登录用户58 HttpServletRequest req = (HttpServletRequest) request;59 HttpServletResponse resp = (HttpServletResponse) response;60 String path=req.getServletPath();61 String param=req.getQueryString();62 if(path!=null){63 path=path+"?"+param;//全请求路径64 }65 if(path.endsWith("myAddress")||path.endsWith("myJingDong")||path.indexOf("myShouCang")!=-1||path.endsWith("updateUser")||path.indexOf("showOrder")!=-1||path.indexOf("showValidOrder")!=-1||path.indexOf("showCancelOrder")!=-1||path.indexOf("fillOrder")!=-1){66 HttpSession session = req.getSession();67 String userName = (String) session.getAttribute("username");68 if(userName == null){69 session.setAttribute("url", path.replaceFirst("/", ""));70 System.out.println(session.getAttribute("url"));71 resp.sendRedirect("user.do?op=loginAction");72 return;73 }74 }75 //把过滤器给下一个过滤器或资源处理器76 chain.doFilter(new MyRequest((HttpServletRequest) request), response); 77 }78 79 public void init(FilterConfig filterConfig) throws ServletException {80 // TODO Auto-generated method stub81 this.encoding=filterConfig.getInitParameter("encoding");//encoding在web.xml中指定82 }83 84 }
然后在web.xml对该过滤器进行注册和映射:
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.util.MyFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
上面写的过滤器MyFilter类,本来只能处理post提交的数据(post是先处理后接收,get是先接收后处理)。
但是MyFilter里面在对任何页面过滤的时候,来了一个偷梁换柱:把原来客户端请求的request给换掉了,换成自己定义的一个request了,即内部类MyRequest,不过该类要继承一个类HttpServletRequestWrapper。
在自定义的一个内部类MyRequest里面,实现了一个好强大的功能,就是重写了request的getParameter()方法。该方法里面即处理了post提交,又能处理get提交,返回的值就是处理后的值,所以该过滤器就能实现处理post和get提交的乱码问题!
- 用过滤器来解决JSP中文乱码问题
- 用过滤器来解决JSP中文乱码问题
- 用过滤器来解决JSP中文乱码问题
- jsp利用过滤器解决中文乱码问题
- JSP用过滤器解决request中文乱码问题
- jsp用过滤器解决中文乱码
- jsp过滤器中文乱码解决
- JSP 用监听器Filter来解决中文乱码问题
- 用过滤器解决jsp乱码问题!!
- JavaWeb中使用过滤器来解决中文乱码问题
- 在JSP中使用过滤器解决中文乱码问题
- 过滤器解决中文乱码问题
- 过滤器-解决中文乱码问题
- 过滤器 解决中文乱码问题
- 使用过滤器来解决中文乱码
- 备忘录:用servlet过滤器解决JSP中文乱码
- 一个解决JSP中文乱码的过滤器
- 利用过滤器解决jsp乱码问题
- JSP实现分页显示
- java文件下载
- span 换行与不换行
- tomcat启动报错 java.net.ConnectException: Connection refused: connect
- 读cookie中文字符乱码问题
- 用过滤器来解决JSP中文乱码问题
- 编程学习感悟
- IE下margin:0 auto不居中解决方法
- 绝对定位的div的居中方法,下面的写法兼容IE系列浏览器和火狐浏览器。
- 初学hibernate框架
- hibernate中一对多关系的映射
- Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)------转帖
- 使用MyEclipse构建webService简单案例
- Debug:This kind of launch is configured to openthe debug perspective when it解决办法