`
j2ee_yohn
  • 浏览: 172330 次
  • 性别: Icon_minigender_1
  • 来自: 湖南/株洲
社区版块
存档分类
最新评论

一个不错处理encoding的过滤器

    博客分类:
  • web
阅读更多

package com.yida.filter;

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;

public class CharacterFilter implements Filter
{

    private String encoding;

    /**
     * 自定义一个类,完成get请求的中文乱码解决
     *
     * @author yohn
     */
    class MyRequest extends HttpServletRequestWrapper
    {

        public MyRequest(HttpServletRequest request)
        {
            super(request);
        }

        /**
         * 重写父类的方法
         *
         * @param name
         *            元素名
         */
        public String getParameter(String name)
        {
            String str = super.getParameter(name);

            try
            {
                str = new String(str.getBytes("iso8859-1"),encoding);
            }
            catch (Exception e)
            {
            }
            return str;
        }
    }

    public void destroy()
    {

    }

    @SuppressWarnings("unchecked")
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    {
        try
        {
            HttpServletRequest hsr = (HttpServletRequest) request;
            if ("get".equalsIgnoreCase(hsr.getMethod()))
            {
                MyRequest mr = new MyRequest(hsr);
                response.setCharacterEncoding(encoding);

                chain.doFilter(mr,response);

            }
            else
            {
                hsr.setCharacterEncoding(encoding);
                response.setCharacterEncoding(encoding);
                chain.doFilter(request,response);
            }
        }
        catch (Exception e)
        {
        }
    }

    public void init(FilterConfig cfg) throws ServletException
    {
        String ie = cfg.getInitParameter("encoding");
        if (null != ie && "" != ie)
        {
            this.encoding = ie;
        }
        else
        {
            this.encoding = "UTF-8";
        }
    }
    public String getEncoding()
    {
        return encoding;
    }

    public void setEncoding(String encoding)
    {
        this.encoding = encoding;
    }

}

 

****************web.xml****************

<filter>

 <filter-name>ChineseFilter</filter-name>

 <filter-class>com.yida.filter.CharacterFilter</filter-class>
  <init-param>
     <param-name>encoding</param-name>
     <param-value>UTF-8</param-value>
  </init-param>

</filter>

 

<filter-mapping>

  <filter-name>ChineseFilter</filter-name>

  <url-pattern>/*</url-pattern>

</filter-mapping>

 

</filter>

分享到:
评论
1 楼 sdh5724 2008-11-12  
一切不透明, 手动处理办法都是愚蠢的!

相关推荐

    如何配置Filter过滤器处理JSP中文乱码

    解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP中文乱码的详细步骤: 1. **配置web.xml文件** 在项目的`web.xml`文件中,你需要添加一个Filter来定义处理乱码的逻辑。首先,声明一...

    编码过滤器

    在Web开发中,编码过滤器(Encoding Filter)是一种常见的技术,用于处理HTTP请求中的编码问题,确保数据在传输过程中的正确性。标题“编码过滤器”直指这一关键概念,而描述“配置在web.xml中的过滤器,支持过滤GET...

    jsp 过滤器中文乱码的处理

    在这个过滤器中,我们首先将请求转换为`HttpServletRequest`对象,然后调用`setCharacterEncoding()`方法设定字符编码为目标编码(如GBK或UTF-8),最后将请求传递给下一个过滤器或目标Servlet。 为了使过滤器生效...

    JavaWeb中过滤器的三个小案例

    在JavaWeb开发中,过滤器(Filter)是一个非常重要的组件,它可以实现对HTTP请求和响应进行拦截处理。本文将详细讲解三个使用JavaWeb过滤器的实际案例,帮助开发者深入理解其功能和应用场景。 案例1:分IP统计网站...

    java过滤器

    在一个应用中可能会有多个过滤器同时工作,它们之间通过过滤器链的方式协同工作。过滤器的执行顺序是由`web.xml`文件中的`&lt;filter-mapping&gt;`元素的排列顺序决定的。当一个请求经过过滤器链时,按照顺序依次执行每个...

    jsp中的过滤器(含例子)

    总的来说,`JSP`中的过滤器是一个强大的工具,它能够帮助我们处理请求和响应,实现跨页面的通用功能,提升应用程序的安全性和用户体验。在实际开发中,熟练掌握过滤器的使用,将大大提升我们的开发效率和代码质量。

    过滤器笔记整理

    每个过滤器的处理结果通过`FilterChain`传递给下一个过滤器或目标资源。 #### 七、过滤器执行流程 1. **请求到达**:客户端发送请求至Web服务器。 2. **匹配过滤器**:根据`web.xml`中的配置,服务器确定哪些过滤...

    过滤器操作数据库验证合法用户

    在Java Web开发中,过滤器(Filter)是一个非常重要的组件,它主要用于在请求被实际处理之前或之后执行一些预处理或后处理任务。过滤器在Servlet规范中定义,是实现Servlet API的一部分,允许开发者对HTTP请求和响应...

    使用过滤器的方法!教你如何使用过滤器

    下面,我们将通过一个简单的过滤器示例来讲解如何创建和使用过滤器: 1. **创建过滤器类**: 首先,创建一个新的Java类并实现Filter接口。例如,我们可以创建一个名为`MyFilter`的类: ```java import javax....

    servlet四个有用的过滤器

    在Java Web开发中,`Servlet`过滤器是一种特殊的功能组件,可以在请求到达目标资源(如Servlet或JSP页面)之前进行预处理,也可以在响应发送到客户端之前进行后处理。它们可以用于实现跨切面的需求,比如统一设置...

    java过滤器的使用

    以下是一个简单的处理中文乱码的过滤器示例: ```java import javax.servlet.*; import java.io.IOException; public class CharacterEncodingFilter implements Filter { @Override public void init...

    JavaWeb开发几个常用的过滤器源码

    在JavaWeb开发中,过滤器(Filter)是一个非常重要的组件,它允许我们在HTTP请求和响应之间进行拦截,执行一些预处理或后处理操作。这里我们将深入探讨标题中提到的几个常用的过滤器及其源码实现。 首先,我们来看...

    过滤器详细讲解及代码

    如果这些条件都满足,那么请求将被重定向到`empservlet`进行进一步处理,否则请求将继续通过`filterChain.doFilter(request,response)`传递到下一个过滤器或最终的目标资源。 #### 初始化和编码设置 过滤器的初始...

    JavaWeb页面过滤器之编码过滤

    在实际项目中,编码过滤器通常是第一个被调用的过滤器,以确保在整个请求生命周期内都使用正确的字符编码。通过这种方式,我们可以有效地避免由于编码不一致引发的各种乱码问题,提高用户体验。 综上所述,JavaWeb...

    过滤器处理中文

    在给出的代码中,`xiaogu.EncodingFilter`是一个实现了`javax.servlet.Filter`接口的自定义过滤器,专门用于解决中文乱码问题。 过滤器的主要作用是在请求到达目标Servlet或JSP之前以及响应离开Servlet容器返回给...

    java中文过滤器

    在Java Web开发中,"java中文过滤器"是一种常见的技术,用于处理B/S(Browser/Server)架构下中文字符编码的问题。在B/S系统中,数据通常通过HTTP协议在网络间传输,而HTTP协议默认并不规定字符编码,这可能导致在...

    Aspdotnet2_0中自定义过滤器对Response内容进行处理

    在ASP.NET 2.0中,自定义过滤器(Filters)是一种强大的机制,允许开发者拦截并处理应用程序的请求和响应。这些过滤器可以用于执行多种任务,如认证、授权、异常处理以及对输出内容的修改。本文将深入探讨如何在ASP...

    jsp 过滤器——解决中文乱码问题

    1. **新建一个包**:首先,在Eclipse集成开发环境中新建一个包,用于存放过滤器类。 - 右键点击项目名或src目录,选择`New` -&gt; `Package`,输入包名。 2. **新建过滤器类**:在创建好的包中,右键点击选择`New` -&gt; ...

    javaweb中文过滤器

    在Servlet规范中,过滤器是实现动态网页请求处理链路中的一个组件。它可以对请求和响应进行预处理和后处理,比如认证、授权、数据转换等。`javax.servlet.Filter`接口定义了过滤器的基本操作,开发者需要实现这个...

    javaFilter自定义编码过滤器

    Filter 接口用于定义一个过滤器, FilterChain 接口用于将多个过滤器连接起来,以便实现链式调用。 * Filter 接口: Filter 接口是 Java 中的一种过滤器接口,用于对 HttpServletRequest 和 HttpServletResponse ...

Global site tag (gtag.js) - Google Analytics