过滤器篇(2)-----过滤器设置编码格式与清除浏览器缓存(EncodingFilter , NoCacheFilter)

来源:互联网 发布:lol域名注册 编辑:程序博客网 时间:2024/05/29 08:30

1. 编码过滤器(EncodingFilter)

1.编码设置过滤器Code . 其中主要目的是 : 使用过滤器 解决中文编码 问题

package com.Filter;import javax.servlet.*;import java.io.IOException;/** * Created by dhc on 17-5-15. * Description: 设置项目编码 * user: 网络黑寡妇 */public class EncodingFilter implements Filter{    private String encoding;    @Override    public void init(FilterConfig filterConfig) throws ServletException {    //获取web.XML文件中配置的编码格式        encoding = filterConfig.getServletContext().getInitParameter("encoding");    }    @Override    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {                 //设置请求编码格式        servletRequest.setCharacterEncoding(encoding);         //设置响应编码格式        servletResponse.setCharacterEncoding(encoding);        filterChain.doFilter(servletRequest, servletResponse);    }    @Override    public void destroy() {    }}

2.在web.XML 文件中做出相关配置

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1">    <!--设置编码过滤器配置文件-->    <context-param>        <param-name>encoding</param-name>        <param-value>UTF-8</param-value>    </context-param>    <filter>        <filter-name>EncodingFilter</filter-name>        <filter-class>com.Filter.EncodingFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>EncodingFilter</filter-name>        <url-pattern>/*</url-pattern><!--过滤器对所有文件编码进行过滤,防止出现乱码-->    </filter-mapping><!--设置编码过滤器配置文件结束--></web-app>

2. 清除浏览器缓存过滤器(NoCacheFilter)

1.使浏览器不缓存页面的过滤器: 有3个HTTP响应头字段都可以禁止浏览器缓存当前页面,它们在 Servlet 中的示例代码如下:
* -response.setDateHeader(“Expires”,-1);
* -response.setHeader(“Cache-Control”,”no-cache”);
* -response.setHeader(“Pragma”,”no-cache”);
并不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面的三个响应头

package com.Filter;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * Created by dhc on 17-5-18. * user: 网络黑寡妇 */public class NoCacheFilter implements Filter{    @Override    public void init(FilterConfig filterConfig) throws ServletException {  }    @Override    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;        //指定网页在缓存中的过期时间        httpResponse.setDateHeader("Expires", -1);         //HTTP消息头,控制网页的缓存        httpResponse.setHeader("Cache-Control", "no-cache");        //禁止浏览器从缓存中调阅页面内容        httpResponse.setHeader("Pragma", "no-cache");        filterChain.doFilter(httpRequest, httpResponse);    }    @Override    public void destroy() {    }}

2.在web.XML 文件中做出相关配置

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1"> <!--设置不使用缓存的过滤器配置  开始 -->    <filter>        <filter-name>NoCacheFilter</filter-name>        <filter-class>com.Filter.NoCacheFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>NoCacheFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping> <!--设置不使用缓存的过滤器配置  结束 --></web-app>