拦截器利用装饰类的对getParameter()和getParameterValues()方法的重写对中文编码的转换
2016-08-07 00:26
429 查看
效果如下图:
运行如下图所示:
首先在拦截器重写getParameter()和getParametervalues()方法:
然后创建Servlet类接收请求:
最后是拦截器Filter的xml配置:
运行如下图所示:
首先在拦截器重写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方法 @Override public 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方法 @Override public 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>
相关文章推荐
- 利用jsp中request对象getParameterValues(String name)方法同时删除多个checkbox的值
- get post方法传递中文的编码问题
- JSP 表单输入,UTF编码,get方式提交数据出现中文乱码解决方法
- request.getParameterValues与request.getParameter的区别
- 利用属性名称配置,自动转换成java bean对象的set、get方法的方法
- request.getParameterValues与request.getParameter的区别
- 页面 GB18030 编码 get 参数包含中文 服务器 乱码 java 转换编码
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的差别
- vi文本编码及其与中文转换的实现方法
- 利用Uri获取返回的参数即getQueryParameter()方法的使用
- 中文文件名转换为UTF8编码的方法.
- JSP中接收所有参数的方法——request.getParameterNames() ,request.getParameterValues(name)
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- request.getParameterValues与request.getParameter的区别
- 利用Uri获取返回的参数即getQueryParameter()方法的使用
- 利用request.getParameterNames()方法读取form表单中所有元素