拦截器利用装饰类的对getParameter()和getParameterValues()方法的重写对中文编码的转换
来源:互联网 发布:撮合交易平台源码 编辑:程序博客网 时间:2024/06/06 02:04
效果如下图:
运行如下图所示:
首先在拦截器重写getParameter()和getParametervalues()方法:
package star.july.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;public class FilterDecorate implements Filter{public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//对POST方法有用request.setCharacterEncoding("utf-8");//用装饰类方法重写getParameter()//创建装饰类对象MyRequest myRequest = new MyRequest((HttpServletRequest) request);chain.doFilter(myRequest, response);}public void destroy() {}}//1、继承HttpServletRequest的实现类class MyRequest extends HttpServletRequestWrapper{//2、声明一个变量HttpServletRequest request;public MyRequest(HttpServletRequest request) {super(request);//3、接收被装饰类对象this.request = request;}//4、重写getParameter方法@Overridepublic String getParameter(String name) {try {//得到原来的参数String value = request.getParameter(name);//增强if("GET".equals(request.getMethod())){value = new String(value.getBytes("ISO-8859-1"),"utf-8");}//返回增强后的内容return value;} catch (UnsupportedEncodingException e) {e.printStackTrace();throw new RuntimeException(e);}}//重写getParameterValues方法@Overridepublic String[] getParameterValues(String name) {try {String[] values = request.getParameterValues(name);//对GET方法进行转码if(values !=null && "GET".equals(request.getMethod())){for(int i = 0 ;i< values.length; i++){//对每一个元素进行转码values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");}}//返回增强值return values;} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}}
然后创建Servlet类接收请求:
package star.july.web;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DecorateServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//得到重写后的getParameter方法String name = request.getParameter("name");//得到重写后的getParameterValues方法String[] values = request.getParameterValues("hobby");//输出重写后的方法System.out.println(name);for(int i = 0 ;i<values.length;i++){System.out.println(values[i]);}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
最后是拦截器Filter的xml配置:
<filter> <filter-name>FilterDecorate</filter-name> <filter-class>star.july.filter.FilterDecorate</filter-class> </filter> <filter-mapping> <filter-name>FilterDecorate</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
0 0
- 拦截器利用装饰类的对getParameter()和getParameterValues()方法的重写对中文编码的转换
- getparameter和getparametervalues的区别
- getParameterValues和getParameter的区别
- 对数组进行转换编码的方法
- request的getParameterValues与getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request对象getParameterValues与getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- Scala入门之OOP
- Hibernate 注解注册
- 标准Web系统的架构分层
- NSOperation 和 GCD 的区别
- 线性表的C语言实现
- 拦截器利用装饰类的对getParameter()和getParameterValues()方法的重写对中文编码的转换
- Deep Residual Network实验复现
- 关于tomcat 8080端口被占用
- jsp指令
- a++ + ++a
- android设计模式系列之组合模式
- 数据库表创建注意事项
- 2016多校训练Contest6: 1007 This world need more Zhu hdu5799
- Own your Android! Yet Another Universal Root CVE-2015-3636 (中文翻译) (1)