前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存

JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存

作者头像
谙忆
发布2021-01-21 10:32:46
发布2021-01-21 10:32:46
45800
代码可运行
举报
文章被收录于专栏:程序编程之旅程序编程之旅
运行总次数:0
代码可运行

以前我们设置servlet的request和response的编码需要在每个servlet都设置,如果Servlet很多,显得很麻烦,现在我们可以用过滤器很简单的实现这个功能。 还有页面缓存,如果我们的网页是静态的,图片和内容基本上很少变化或者不变化的,我们就可以告诉客户端这个页面你缓存多久~以达到节省流量的目的。

设置全站编码:

先写好Filter:CharacterFilter.java:

代码语言:javascript
代码运行次数:0
运行
复制
package cn.hncu.pubs;

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;


public class CharacterFilter implements Filter{
    private String charset;//获取web.xml配置的编码参数值

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        charset = filterConfig.getInitParameter("charset");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding(charset);
        response.setCharacterEncoding(charset);
        chain.doFilter(request, response);//放行
    }

    @Override
    public void destroy() {
    }

}

配置好web.xml文件:

如果你不知道filter应该写到哪个位置,在myEclipse可以通过鼠标点击web-app标签,然后按住F2,会显示出标签的书写位置的。

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name> 
  <filter>
    <filter-name>character</filter-name>
    <filter-class>cn.hncu.pubs.CharacterFilter</filter-class>
    <init-param>
        <!-- 配置编码参数与值 -->
        <param-name>charset</param-name>
        <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>character</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

设置页面缓存

也很简单,我们在过滤器中写几个响应头,再配置好需要缓存的web.xml中的url-pattern路径就好。

代码语言:javascript
代码运行次数:0
运行
复制
package cn.hncu.pubs;

import java.io.IOException;
import java.util.Date;

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.HttpServletResponse;


public class JspCacheFilter implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        HttpServletResponse resp = (HttpServletResponse) response;
        //设置缓存时间
        Date date = new Date();
        long time = date.getTime()+1000*60*60*24*5;//缓存5天
        resp.setHeader("expires", ""+time);
        resp.setHeader("pragma", ""+time);
        resp.setHeader("cache-control", ""+time);
        //设置3个,以兼容不同的浏览器

        //用修改过的resp往后台传
        chain.doFilter(request, resp);
    }

    @Override
    public void destroy() {
    }

}

设置不缓存:(这个可能会不起作用,因为大部分的浏览器都自带缓存的) 设置这3个的原因是,不同的浏览器,它的参数名不同!为了兼容大部分的浏览器,我们设置了这3个。

代码语言:javascript
代码运行次数:0
运行
复制
resp.setHeader("expires","-1");
resp.setHeader("pragma", "no-cache");
resp.setHeader("cache-control", "no-cache");

至于web.xml的配置文件,我就不写了,大家按照上面的写就可以了。

转载请附上原文博客链接:

http://blog.csdn.net/qq_26525215

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/08/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设置全站编码:
  • 设置页面缓存
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档