动态代理实现设置tomcat请求编码

时间:2022-08-30 16:41:48

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

 package jd.com.coding;

 import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet(name = "Servletlogin" ,urlPatterns ="/login")
public class Servletlogin extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username=request.getParameter("username");
System.out.println(username); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
}

3)filter代码:

 package jd.com.coding;

 import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; @WebFilter(filterName = "FilterCoding",urlPatterns = "/login")
public class FilterCoding implements Filter {
public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//增强
HttpServletResponse response= (HttpServletResponse) resp;
HttpServletRequest request= (HttpServletRequest) req; HttpServletRequest reqproxy =(HttpServletRequest) Proxy.newProxyInstance(HttpServletRequest.class.getClassLoader(), (Class<?>[]) request.getClass().getGenericInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if(method.getName().equalsIgnoreCase("getParameter")){
if(request.getMethod().equalsIgnoreCase("get")){
// String[get] ar=(String[]) args;
// String str=request.getParameter(ar[0]);
String str= (String) method.invoke(request,args);
return new String(str.getBytes("iso8859-1"),"utf-8");
}else if(request.getMethod().equalsIgnoreCase("post")){
request.setCharacterEncoding("utf-8");
return method.invoke(request,args);
}
} return method.invoke(request,args);
}
});
chain.doFilter(reqproxy, resp);
} public void init(FilterConfig config) throws ServletException { } }

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

public Type[] getGenericInterfaces()

然后强转即可。

动态代理实现设置tomcat请求编码的更多相关文章

  1. AndroidInject项目使用动态代理增加对网络请求的支持

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3540427.html AndroidInject项目是我写的一 ...

  2. 设置tomcat字符编码

    Tomcat的默认编码是ISO-8859-1,如果有是get请求时,会出现乱码,这种情况可以修改Tomcat的编码解决,当然也可以写个过滤器来解决. 在tomcat的conf目录下,编辑server. ...

  3. 二十二 动态代理&amp&semi;解决网站的字符集编码问题

    设计模式: 软件开发过程中,遇到相似问题,将问题的解决方式抽取模型(套路) 单例,工厂,装饰者,适配器,动态代理 谷歌汽车场景: 谷歌汽车场景Car Interface Icar{  start  r ...

  4. 如何设置tomcat服务器编码为utf-8编码

    原文:http://blog.csdn.net/u014079773/article/details/52637057 在实际开发中我们经常遇到request请求的中文乱码,那么如何解决中文乱码问题? ...

  5. 设置tomcat的编码为utf-8

    <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080&quot ...

  6. JDK动态代理和CGLIB动态代理编码

    JDK动态代理[接口]: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import jav ...

  7. 动态代理在WEB与JDBC开发中的应用

    WEB案例 目前有一个2005年开始,基于Struts1的Web项目A,其验证部分依赖于主站的SSO(单点登录).在请求站点A的时候,用户会被强制带去做SSO验证,通过身份验证后后,主站会自动地把请求 ...

  8. Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

    反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...

  9. JDK 原生动态代理是怎么实现的 &plus; 面试题

    JDK 原生动态代理是怎么实现的 + 面试题 反射 反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect)的能力.简单来说就是通过反射,可以在运行期间获取.检测和调 ...

随机推荐

  1. 基于 Jenkins 快速搭建持续集成环境--转

    源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...

  2. JavaScript正则实战

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  3. EXTJS 4&period;2 资料 控件之Window窗体自动填充页面

    1.html页面代码: <div id="component" style="width:100%;height:100%"> <body&g ...

  4. sirius的学习笔记(3)

    毕业论文什么的终于搞完了,重拾我的python Creating the python skeleton project directory $ mkdir project $ cd project ...

  5. UITextView ios7

    UITextView *textView2 = [[UITextView alloc]initWithFrame:CGRectMake(, textView1.frame.size.height + ...

  6. rapid framework开发系列(一)

    定义:web项目脚手架 rapid-framework是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hiberna ...

  7. 去freessl&period;org申请免费ssl服务器证书

    去freessl.org申请免费ssl服务器证书 来源: 本文链接 来自osnosn的博客 写于: 2019-03-30. 想搞个自签名证书,可以参考这篇: 用openssl为WEB服务器生成证书(自 ...

  8. stat命令的实现-mysate 20155239吕宇轩

    stat命令的实现-mysate 20155239吕宇轩 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep -r的使用 伪代码 产品代码 mystate. ...

  9. Topcoder SRM570 D1L3 CurvyonRails

    几个样例: 5 5wCCwwwCC....w......www..wReturns: 0 3 3C.w....C.Returns: 1 21 20CC..CCCw.CwC..CC.w.CC.CCCwC ...

  10. Ubuntu 16&period;04安装RedisDesktopManager

    说明:0.9版本的安装补上,只能安装0.8版本的. 官网: https://github.com/uglide/RedisDesktopManager 下载: https://github.com/u ...