个人关于web2.5中的动态反射代理来解决sevlet中文乱码理解

来源:互联网 发布:全国棉花加工数据 编辑:程序博客网 时间:2024/06/11 03:14
第一部分:Filter(手动在web.xml中配制Filter)
package com.sml.web.filter;import java.io.IOException;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;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.HttpServletResponse;/** * 在filter中就先处理乱码问题 * jdk中的动态代理 proxy  * fliter *服务器的启动而创建 * 关闭而关闭 *  * @author Administrator * */public class Filter4Login implements Filter {@Overridepublic void destroy() {System.out.println("filter销毁了");}@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {// 强转HttpServletRequest request = (HttpServletRequest) arg0;HttpServletResponse response = (HttpServletResponse) arg1;// 动态代理HttpServletRequest requestProxy = (HttpServletRequest) Proxy.newProxyInstance(request.getClass().getClassLoader(), request.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if ("getParameter".equals(method.getName())) {if ("get".equalsIgnoreCase(request.getMethod())) {String s = (String) method.invoke(request, args);return new String(s.getBytes("iso-8859-1"), "utf-8");} else if ("post".equalsIgnoreCase(request.getMethod())) {request.setCharacterEncoding("utf-8");return method.invoke(request, args);}}return method.invoke(request, args);}});arg2.doFilter(requestProxy, response);}@Overridepublic void init(FilterConfig arg0) throws ServletException {System.out.println("filter创建了");}}
第二部分:关于servlet
package com.sml.web.servlet;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 LoginServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String username = request.getParameter("username");System.out.println(username);String hobby = request.getParameter("hobby");System.out.println(hobby);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}@Overridepublic void init() throws ServletException {super.init();System.out.println("servlet创建了");}@Overridepublic void destroy() {super.destroy();System.out.println("servlet销毁了");}}


原创粉丝点击