zoukankan      html  css  js  c++  java
  • 动态代理实现设置tomcat请求编码

    1)htmlcode:

    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
      <form action="/login"  method="post" >
        姓名:<input  type="text" name="username"><br>
        备注:<textarea></textarea>
    
        <input type="submit"><br>
    
      </form>
      </body>
    </html>

     2)servlet code

     1 package jd.com.coding;
     2 
     3 import javax.servlet.ServletException;
     4 import javax.servlet.annotation.WebServlet;
     5 import javax.servlet.http.HttpServlet;
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 import java.io.IOException;
     9 
    10 @WebServlet(name = "Servletlogin" ,urlPatterns ="/login")
    11 public class Servletlogin extends HttpServlet {
    12     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    13         String username=request.getParameter("username");
    14         System.out.println(username);
    15 
    16 
    17 
    18     }
    19 
    20     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    21 
    22     }
    23 }

    3)filter代码:

     1 package jd.com.coding;
     2 
     3 import javax.servlet.*;
     4 import javax.servlet.annotation.WebFilter;
     5 import javax.servlet.http.HttpServletRequest;
     6 import javax.servlet.http.HttpServletResponse;
     7 import java.io.IOException;
     8 import java.lang.reflect.InvocationHandler;
     9 import java.lang.reflect.Method;
    10 import java.lang.reflect.Proxy;
    11 
    12 @WebFilter(filterName = "FilterCoding",urlPatterns = "/login")
    13 public class FilterCoding implements Filter {
    14     public void destroy() {
    15     }
    16 
    17     public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    18         //增强
    19         HttpServletResponse response= (HttpServletResponse) resp;
    20         HttpServletRequest request= (HttpServletRequest) req;
    21 
    22         HttpServletRequest reqproxy =(HttpServletRequest) Proxy.newProxyInstance(HttpServletRequest.class.getClassLoader(), (Class<?>[]) request.getClass().getGenericInterfaces(), new InvocationHandler() {
    23             @Override
    24             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    25                 if(method.getName().equalsIgnoreCase("getParameter")){
    26                     if(request.getMethod().equalsIgnoreCase("get")){
    27 //                        String[get] ar=(String[]) args;
    28 //                        String str=request.getParameter(ar[0]);
    29                         String str= (String) method.invoke(request,args);
    30                         return  new String(str.getBytes("iso8859-1"),"utf-8");
    31                     }else if(request.getMethod().equalsIgnoreCase("post")){
    32                         request.setCharacterEncoding("utf-8");
    33                         return  method.invoke(request,args);
    34                     }
    35                 }
    36 
    37                 return method.invoke(request,args);
    38             }
    39         });
    40         chain.doFilter(reqproxy, resp);
    41     }
    42 
    43     public void init(FilterConfig config) throws ServletException {
    44 
    45     }
    46 
    47 }

    其中获取类的接口集合使用Class类的方法:getClassLoader()

    public Type[] getGenericInterfaces()

    然后强转即可。

  • 相关阅读:
    Leetcode Excel Sheet Column Number
    AlgorithmsI PA2: Randomized Queues and Deques Subset
    AlgorithmsI PA2: Randomized Queues and Deques RandomizedQueue
    AlgorithmsI PA2: Randomized Queues and Deques Deque
    AlgorithmsI Programming Assignment 1: PercolationStats.java
    hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
    hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对
    hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到
    hdu多校第三场 1007 (hdu6609) Find the answer 线段树
    hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测
  • 原文地址:https://www.cnblogs.com/evilliu/p/8728639.html
Copyright © 2011-2022 走看看