全局编码过滤器

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;
import javax.servlet.http.HttpServletResponse;

public class EncodingFilter implements Filter {

    private static String encoding;
    private static final String DEFAULT_CHARSET="UTF-8";
    @Override
    public void destroy() {
        System.out.println("--------destroy---------");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        System.out.println("--------doFilter---------");
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse=(HttpServletResponse)response;
        if("GET".equals(httpRequest.getMethod())){
            EncodingHttpServletRequest wrapper = new EncodingHttpServletRequest(httpRequest, encoding);
            chain.doFilter(wrapper, response);
        }else{
            httpRequest.setCharacterEncoding(encoding);
            httpResponse.setContentType("text/html;charset="+encoding);
            chain.doFilter(request, response);
        }
    }
    private static class  EncodingHttpServletRequest extends HttpServletRequestWrapper{
         private HttpServletRequest request;
         public EncodingHttpServletRequest(HttpServletRequest request,String encoding) {
           super(request);
           this.request = request;
         }
         @Override
        public String getParameter(String name) {
               String value = request.getParameter(name);
               try {
                value = new String(value.getBytes("iso8859-1"), encoding);
               } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
               }
               return super.getParameter(name);
        }
    }
    @Override
    public void init(FilterConfig config) throws ServletException {
         System.out.println("--------init---------");
         encoding = config.getInitParameter("encoding");
         if(encoding==null||"".equals(encoding))
             encoding=DEFAULT_CHARSET;
    }

}
<!-- 设置全局的编码格式,针对get,post请求,默认编码为UTF-8 -->
  <filter>
      <filter-name>characterFilter</filter-name>
      <filter-class>com.mscncn.jsd1404.EncodingFilter</filter-class>
      <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>characterFilter</filter-name>
      <!-- 拦截所有的请求,为所有的请求设置编码 -->
      <url-pattern>/*</url-pattern>
  </filter-mapping>
时间: 2024-11-07 12:13:30

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

全局的编码过滤器

全局的编码过滤器 分析: 我们之前做的操作,只能对post请求是ok 怎样可以做成一个通用的,可以处理post,get所有的请求的? 在java中怎样可以对一个方法进行功能增强? 继承 装饰设计模式 创建一个类让它与被装饰类实现同一个接口或继承同一个父类 在装饰类中持有一个被装饰类的引用 重写要增强的方法 问题:我们获取请求参数有以下方法 getParameter getPrameterValues getParameterMap 这三个方法都可以获取请求参数. 分析后,我们知道getParam

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

MVC 全局异常过滤器HandleErrorAttribute

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc; namespace 过滤器.Filtes{ /// <summary> /// 全局异常过滤器/// </summary> public class MyHandleErrorAttribute:HandleErrorAttribute { public override voi

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

asp.net mvc 全局权限过滤器及继成权限方法

全局权限过滤器 //----------------------------------------------------------------------- // <copyright file="PermissionFilter.cs" company="STO EXPRESS, Ltd."> // Copyright (c) 2015 , All rights reserved. // </copyright> //--------

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

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