全局的编码过滤器

全局的编码过滤器

分析:

我们之前做的操作,只能对post请求是ok

怎样可以做成一个通用的,可以处理post,get所有的请求的?

在java中怎样可以对一个方法进行功能增强?

  • 继承
  • 装饰设计模式

    • 创建一个类让它与被装饰类实现同一个接口或继承同一个父类
    • 在装饰类中持有一个被装饰类的引用
    • 重写要增强的方法

    问题:我们获取请求参数有以下方法

  • getParameter
  • getPrameterValues
  • getParameterMap

    这三个方法都可以获取请求参数。

    分析后,我们知道getParameter与getParameterValue方法可以依赖于getParamterMap方法来实现。

    // 这个就是我们对request进行装饰的类

    class MyRequest extends HttpServletRequestWrapper {

    private HttpServletRequest request;// 是用于接收外部传递的原始的request

    public MyRequest(HttpServletRequest request) {

    super(request); // 是因为父类没有无参数构造

    this.request = request;

    }

    // @Override

    // public String getParameter(String name) {

    // // 1.得到原来的getParameter方法的值

    // String value = request.getParameter(name); // 乱码

    //

    // try {

    // return new String(value.getBytes("iso8859-1"), "utf-8");

    // } catch (UnsupportedEncodingException e) {

    // e.printStackTrace();

    // }

    // return null;

    // }

    @Override

    public String getParameter(String name) {

    if (name != null) {

    String[] st = (String[]) getParameterMap().get(name);

    if (st != null && st.length > 0) {

    return st[0];

    }

    }

    return null;

    }

    @Override

    public String[] getParameterValues(String name) {

    if (name != null) {

    return (String[]) getParameterMap().get(name);

    }

    return null;

    }

    private boolean flag = true;

    @Override

    public Map getParameterMap() {

    // 1.得到原始的map集合

    Map<String, String[]> map = request.getParameterMap();// 乱码

    if (flag) {

    // 2.将map集合中的String[]得到,解决每一个元素的乱码问题.

    for (String key : map.keySet()) {

    String[] st = map.get(key); // 得到每一个数组

    for (int i = 0; i < st.length; i++) {

    try {

    st[i] = new String(st[i].getBytes("iso8859-1"), "utf-8");

    } catch (UnsupportedEncodingException e) {

    e.printStackTrace();

    }

    }

    }

    flag = false;

    }

    return map;

    }

    }

时间: 2024-10-12 14:08:20

全局的编码过滤器的相关文章

【JAVAWEB学习笔记】24_filter实现自动登录和解决全局的编码问题

过滤器Filter 学习目标 案例-自动登录 案例-解决全局的编码 一.过滤器Filter 1.filter的简介 filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理. 2.快速入门 步骤: 1)编写一个过滤器的类实现Filter接口 2)实现接口中尚未实现的方法(着重实现doFilter方法) 3)在web.xml中进行配置(主要是配置要对哪些资源进行过滤) 3.Filter的API详解 (1)filter生命周期及其与生命周期相关的方

springmvc字符编码过滤器对于中文get请求乱码问题的解决方法

<filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-

Servlet字符编码过滤器

在Java Web程序开发中,由于Web容器内部使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码的现象.由于Web容器使用了ISO-8859-1的编码格式,所以在Web应用的业务处理中也会使用ISO-8859-1编码格式.虽然浏览器提交的请求使用的是中文编码格式UTF-8,但经过业务处理中的ISO-8859-1编码,仍然会出现中文乱码现象.解决此问题的方法非常简单,在业务处理中重新指定中文字符集进行编码即可解决.在实际的开发过程中,如果通过每一个业务处理指定中文字符集

java编码过滤器

1.java编码过滤器的作用: java过滤器能够对目标资源的请求和响应进行截取,过滤信息执行的优先级高于servlet. 它新增加的功能包括:1. 应用程序生命周期事件控制;2. 新的国际化;3. 澄清了类的装载规则;4. 新的错误及安全属性;5. 不赞成使用HttpUtils 类;6. 各种有用的方法;7. 阐明并扩展了几个servlet DTD;8. filter功能. 2.java过滤器的使用: (1)编写一个普通的java类,实现Filter接口 import java.io.IOEx

jsp过滤器之encoding字符编码过滤器

一.创建两个jsp页面:a.jsp和b.jsp. 1.a.jsp 1 <!-- 登陆表单 --> 2 <form action="CheckLoginServlet.do" method="post"> 3 <input type="text" name="username"> 4 <input type="password" name="password

web.xml文件配置spring核心编码过滤器

<!-- 注册spring核心编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-nam

servlet中的字符编码过滤器的使用

一:简介 Servlet过滤器是客户端和目标资源的中间层组件,主要是用于拦截客户端的请求和响应信息.如当web容器收到一条客户端发来的请求 web容器判断该请求是否与过滤器相关联,如果相关联就交给过滤器进行处理,处理完可以交给下一个过滤器或者其他业务,当其他业务完成 需要对客户端进行相应的时候,容器又将相应交给过滤器进行处理,过滤器处理完响应就将响应发送给客户端. 注意:上面话中的几个问题 1:web容器是如何判断请求和过滤器相关联. 2:过滤器是如何将处理完的请求交给其他过滤器的 前提知识:过

深入Struts2的过滤器FilterDispatcher--中文乱码及字符编码过滤器

引用 前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器(CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Action,但是在Action中得到的中文全部是乱码,前台的页面编码都是GBK没有问题.这是为什么呢?下面我们就通过阅读FilterDispatcher和CharacterEncodingFilter这两个过滤器的源代码,了解其实现细节,最终得出为什么中文还是乱码! 测试环境及其前置知识 Struts

编码过滤器

在web.xml 配置  <!--编码过滤  utf-8  -->    <filter>        <filter-name>EncodingFilter</filter-name>        <filter-class>com.yongjie.Zlxypt.util.FilterEncoding</filter-class>        <init-param>           <param-nam