编码过滤器

在Web应用开发中,我们常常需要对http请求做相应的编码处理,这时,可通过过滤器的方式来实现:

Java代码
  1. package com.zhangsx.filter;   
  2.   
  3. import java.io.IOException;   
  4. import javax.servlet.Filter;   
  5. import javax.servlet.FilterChain;   
  6. import javax.servlet.FilterConfig;   
  7. import javax.servlet.ServletException;   
  8. import javax.servlet.ServletRequest;   
  9. import javax.servlet.ServletResponse;   
  10.   
  11. /**  
  12.  * 编码过滤器。  
  13.  * 如果在初始化参数中配置了encode,那么将所有的过滤的请求和响应均设置为指定的编码;  
  14.  * 否则,直接放行,不做任何处理。  
  15.  *   
  16.  * @author Zhangshixi  
  17.  */  
  18. public class EncodeFilter implements Filter {   
  19.   
  20.     private FilterConfig config;   
  21.     // 初始化配置参数   
  22.     private static final String INIT_PARAM_ENCODE = "encode";   
  23.   
  24.     /**  
  25.      * 初始化方法。  
  26.      * @param config  
  27.      * @throws javax.servlet.ServletException  
  28.      */  
  29.     @Override  
  30.     public void init(FilterConfig config) throws ServletException {   
  31.         this.config = config;   
  32.     }   
  33.   
  34.     /**  
  35.      * 如果设置了初始化参数encode,那么将所有过滤的请求和响应均设置为指定的编码;  
  36.      * 否则,直接放行,不做任何处理。  
  37.      * @param request 请求  
  38.      * @param response 响应  
  39.      * @param chain 过滤器链  
  40.      * @throws java.io.IOException IO异常  
  41.      * @throws javax.servlet.ServletException Servlet异常  
  42.      */  
  43.     @Override  
  44.     public void doFilter(ServletRequest request, ServletResponse response,   
  45.             FilterChain chain) throws IOException, ServletException {   
  46.         String encode = config.getInitParameter(INIT_PARAM_ENCODE);   
  47.   
  48.         if (encode != null && !encode.isEmpty()) {   
  49.             request.setCharacterEncoding(encode);   
  50.         }   
  51.   
  52.         chain.doFilter(request, response);   
  53.   
  54.         if (encode != null && !encode.isEmpty()) {   
  55.             response.setCharacterEncoding(encode);   
  56.         }   
  57.     }   
  58.   
  59.     @Override  
  60.     public void destroy() {   
  61.     }   
  62. }  
Java代码  
  1. package com.zhangsx.filter;   
  2.   
  3. import java.io.IOException;   
  4. import javax.servlet.Filter;   
  5. import javax.servlet.FilterChain;   
  6. import javax.servlet.FilterConfig;   
  7. import javax.servlet.ServletException;   
  8. import javax.servlet.ServletRequest;   
  9. import javax.servlet.ServletResponse;   
  10.   
  11. /**  
  12.  * 编码过滤器。  
  13.  * 如果在初始化参数中配置了encode,那么将所有的过滤的请求和响应均设置为指定的编码;  
  14.  * 否则,直接放行,不做任何处理。  
  15.  *   
  16.  * @author Zhangshixi  
  17.  */  
  18. public class EncodeFilter implements Filter {   
  19.   
  20.     private FilterConfig config;   
  21.     // 初始化配置参数   
  22.     private static final String INIT_PARAM_ENCODE = "encode";   
  23.   
  24.     /**  
  25.      * 初始化方法。  
  26.      * @param config  
  27.      * @throws javax.servlet.ServletException  
  28.      */  
  29.     @Override  
  30.     public void init(FilterConfig config) throws ServletException {   
  31.         this.config = config;   
  32.     }   
  33.   
  34.     /**  
  35.      * 如果设置了初始化参数encode,那么将所有过滤的请求和响应均设置为指定的编码;  
  36.      * 否则,直接放行,不做任何处理。  
  37.      * @param request 请求  
  38.      * @param response 响应  
  39.      * @param chain 过滤器链  
  40.      * @throws java.io.IOException IO异常  
  41.      * @throws javax.servlet.ServletException Servlet异常  
  42.      */  
  43.     @Override  
  44.     public void doFilter(ServletRequest request, ServletResponse response,   
  45.             FilterChain chain) throws IOException, ServletException {   
  46.         String encode = config.getInitParameter(INIT_PARAM_ENCODE);   
  47.   
  48.         if (encode != null && !encode.isEmpty()) {   
  49.             request.setCharacterEncoding(encode);   
  50.         }   
  51.   
  52.         chain.doFilter(request, response);   
  53.   
  54.         if (encode != null && !encode.isEmpty()) {   
  55.             response.setCharacterEncoding(encode);   
  56.         }   
  57.     }   
  58.   
  59.     @Override  
  60.     public void destroy() {   
  61.     }   
  62. }  
package com.zhangsx.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 编码过滤器。
 * 如果在初始化参数中配置了encode,那么将所有的过滤的请求和响应均设置为指定的编码;
 * 否则,直接放行,不做任何处理。
 * 
 * @author Zhangshixi
 */
public class EncodeFilter implements Filter {

    private FilterConfig config;
    // 初始化配置参数
    private static final String INIT_PARAM_ENCODE = "encode";

    /**
     * 初始化方法。
     * @param config
     * @throws javax.servlet.ServletException
     */
    @Override
    public void init(FilterConfig config) throws ServletException {
        this.config = config;
    }

    /**
     * 如果设置了初始化参数encode,那么将所有过滤的请求和响应均设置为指定的编码;
     * 否则,直接放行,不做任何处理。
     * @param request 请求
     * @param response 响应
     * @param chain 过滤器链
     * @throws java.io.IOException IO异常
     * @throws javax.servlet.ServletException Servlet异常
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        String encode = config.getInitParameter(INIT_PARAM_ENCODE);

        if (encode != null && !encode.isEmpty()) {
            request.setCharacterEncoding(encode);
        }

        chain.doFilter(request, response);

        if (encode != null && !encode.isEmpty()) {
            response.setCharacterEncoding(encode);
        }
    }

    @Override
    public void destroy() {
    }
}

 

同时,在web.xml中配置所要过滤的请求即可。如:

Java代码
  1. <filter>   
  2.     <description>编码过滤器</description>   
  3.     <filter-name>EncodeFilter</filter-name>   
  4.     <filter-class>com.zhangsx.filter.EncodeFilter</filter-class>   
  5.     <init-param>   
  6.         <description>编码方式</description>   
  7.         <param-name>encode</param-name>   
  8.         <param-value>utf-8</param-value>   
  9.     </init-param>   
  10. </filter>   
  11. <filter-mapping>   
  12.     <filter-name>EncodeFilter</filter-name>   
  13.     <url-pattern>/*</url-pattern>   
  14. </filter-mapping> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring中,编写编码过滤器需要实现javax.servlet.Filter接口。下面是一个示例: ```java import javax.servlet.*; import java.io.IOException; public class EncodingFilter implements Filter { private String encoding; public void init(FilterConfig filterConfig) throws ServletException { encoding = filterConfig.getInitParameter("encoding"); if (encoding == null) { encoding = "UTF-8"; } } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); chain.doFilter(request, response); } public void destroy() { encoding = null; } } ``` 在上面的示例中,`init()` 方法用于初始化过滤器,`doFilter()` 方法用于处理请求和响应,`destroy()` 方法用于销毁过滤器。在 `doFilter()` 方法中,我们设置了请求和响应的字符编码,并调用 `chain.doFilter()` 方法将请求和响应传递给下一个过滤器Servlet。 要在Spring中使用过滤器,需要在web.xml文件中注册它们,并在Spring上下文中配置它们。例如: ```xml <filter> <filter-name>encodingFilter</filter-name> <filter-class>com.example.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 在上面的示例中,我们注册了一个名为 `encodingFilter` 的过滤器,并将其映射到所有的URL模式。然后,在Spring配置文件中,我们可以使用 `<mvc:interceptors>` 元素来配置过滤器: ```xml <mvc:interceptors> <bean class="com.example.EncodingFilter" /> </mvc:interceptors> ``` 这样,我们就可以在Spring中使用编码过滤器了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值