拦截器利用装饰类的对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
原创粉丝点击