`
javawebsoa
  • 浏览: 407362 次
社区版块
存档分类
最新评论

过滤器的简介和简单应用(禁止缓存,设置中文乱码等)

 
阅读更多

过滤器的简介和简单应用(禁止缓存,设置中文乱码等)

一 过滤器的简介

1.Filter简介

Seervelt API中提供了一个Filter接口,开发web应用时,如果编写的java类实现了这个接口,则把这个java类称之为过滤器

2.Filter如何拦截的---使用不同的过滤器,拦截不同的请求,形成过滤器链

Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,web服务器每次在调用web资源的servet时,首先都会先调用一下filter的doFilter方法,目的如下:

(1)调用目标资源之前,让一段代码执行

(2)是否调用目标资源

(3)调用目标资源之后,让一段代码执行

二 过滤器的作用

(1)控制请求是否最终能到达目标资源

(2)进行拦截

(3)在chain方法之前的操作,对应答的数据进行的操作

三 Filter的生命周期

public void init(FilterConfig arg0) throws ServletException {

}

public void destroy() {

}

初始化方法调用是在服务器加载的时候调用,销毁的方法是在服务器停掉的时候,而不是在访问时,并且方法都只调用一次。

四 过滤器开发入门

1.过滤器的执行过程:

请求到达服务器,先读取web.xml文件中的配置文件,通过反射的机制,创建一个Filter对象,看是否与自己的过滤条件相同,如果有过滤器,有chain参数,就查找是否还有下一个过滤器,直到查找不到过滤器,再执行目标文件。

2.过滤器的配置

<filter>

<filter-name>filter1</filter-name>

<filter-class>com.hbsi.web.filter.FilterDemo1</filter-class>

</filter>

<!—-拦截的请求--(所有的)-->

<filter-mapping>

<filter-name>filter1</filter-name>

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

</filter-mapping>

注:

决定过滤器顺序的是web.xml中的 <filter-mapping>标签

过滤器不能产生应答

3.Java类中继承Filter接口,并实现其中的doFilter方法

public void doFilter(ServletRequest request, ServletResponseresponse,

FilterChain chain) throws IOException, ServletException {

System.out.println("呵呵");

//让请求到达最终资源

chain.doFilter(request,response);

System.out.println("wwwwwwwwwwww");

}

说明:再建一个jsp页面,当执行index.jsp页面前,工程会调用web.xml配置文件,并把配置文件中的filter封装成对象,初始化参数的封装,执行完init方法之后,去调用doFilter方法,一开始输出“呵呵“,然后遇到了chain调用的方法,这个方法是让请求达到最终资源的,所以会执行目标文件(index.jsp),并输出index.jsp中的内容再用response对象返回并输出doFilter方法中的最后一条输出语句。

五 Fileter常见的应用

1. 统一全站字符编码的过滤器

(1)使用的原因:

如果没有过滤器,在每一个页面中都要写上编码方法,如果把编码方法写到过滤器中,只用写一遍,并且在xml文件中配置初始化参数可以不直接指定编码方法,提高灵活性

(2)代码分析

在java中的代码

public class CharSetEncodingFilter implements Filter {

//过滤器统一解决乱码问题

private FilterConfig filterConfig;

public void destroy() {

// TODO Auto-generatedmethod stub

}

private String defaultCharset = "utf-8";

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException{

//模板代码

HttpServletRequest req = (HttpServletRequest)request;

HttpServletResponse rep = (HttpServletResponse)response;

//得到初始化参数

String charset =filterConfig.getInitParameter("encode");

if(charset==null){

charset = defaultCharset;

}

//请求对象

request.setCharacterEncoding(charset);

//应答对象---一般情况下不设置,因为过滤器不产生应答

rep.setCharacterEncoding(charset);

rep.setContentType("text/html;charset="+charset);

chain.doFilter(req, rep);

}

public void init(FilterConfig config) throws ServletException {

this.filterConfig=config;

}

}

在xml文件中的配置

<filter>

<filter-name>CharsetEncodeFilter</filter-name>

<filter-class>com.hbsi.web.filter.CharSetEncodingFilter</filter-class>

<init-param>

<param-name>encode</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharsetEncodeFilter</filter-name>

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

</filter-mapping>

测试类的使用

先在jsp页面中建一个<from>表单,并用post方法提交到一个servelet类中并输出即可看到效果

2. 禁止浏览器缓冲页面中的静态资源

(1)java中的代码分析

public class NoCacheFilter implements Filter {

public void destroy() {

}

//浏览器不缓存页面

public void doFilter(ServletRequest request, ServletResponseresponse,

FilterChain chain) throws IOException, ServletException{

HttpServletRequest req = (HttpServletRequest)request;

HttpServletResponse res= (HttpServletResponse)response;

//设置禁止缓存的消息头

res.setDateHeader("expires", -1);

res.setHeader("Cache-Control", "no-cache");

res.setHeader("Pragma", "no-cache");

chain.doFilter(req, res);

}

public void init(FilterConfig arg0) throws ServletException {

}

}

(2)在web.xml文件中的配置

<filter-mapping>

<filter-name>NoCacheFilter</filter-name>

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

</filter-mapping>

<filter-mapping>

<filter-name>NoCacheFilter</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

3.设置失效日期

(1)在java中的代码

public class ExpiresFilters implements Filter {

public void destroy() {

}

// 设置失效日期

public void doFilter(ServletRequest request, ServletResponseresponse,

FilterChain chain) throws IOException, ServletException{

HttpServletRequest req = (HttpServletRequest) request;

HttpServletResponse res = (HttpServletResponse) response;

// (1)得到请求的资源 是js css jpg???

String uri = req.getRequestURI();

if (uri.endsWith(".css")) {

// 设置页面的失效日期 是从---1970.1.1.0.0.0开始到某个时间点所经历的毫秒数

long expiresTime = Integer.parseInt(filterConfig.getInitParameter("css")) * 1000;

res.setDateHeader("Expires", System.currentTimeMillis()+expiresTime);

} else if (uri.endsWith(".js")) {

long expiresTime = Integer.parseInt(filterConfig.getInitParameter("js")) * 1000;

res.setDateHeader("Expires", System.currentTimeMillis()+expiresTime);

} else if (uri.endsWith(".jsp")) {

long expiresTime = Integer.parseInt(filterConfig.getInitParameter("jsp")) * 1000;

res.setDateHeader("Expires", System.currentTimeMillis()+expiresTime);

}

chain.doFilter(req, res);

}

private FilterConfig filterConfig;

public void init(FilterConfig config) throws ServletException {

this.filterConfig = config;

}

}

(2)在web.xml中的配置

<filter>

<filter-name></filter-name>

<filter-class></filter-class>

<init-param>

<!-- css样式的过期时间 jsp jpg都可以-->

<param-name>css</param-name>

<param-value>120</param-value>

</init-param>

<init-param>

<param-name>jsp</param-name>

<param-value>120</param-value>

</init-param>

<init-param>

<param-name>jpg</param-name>

<param-value>120</param-value>

</init-param>

</filter>


过滤器的简介和简单应用(禁止缓存,设置中文乱码等)

一 过滤器的简介

1.Filter简介

Seervelt API中提供了一个Filter接口,开发web应用时,如果编写的java类实现了这个接口,则把这个java类称之为过滤器

2.Filter如何拦截的---使用不同的过滤器,拦截不同的请求,形成过滤器链

Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,web服务器每次在调用web资源的servet时,首先都会先调用一下filter的doFilter方法,目的如下:

(1)调用目标资源之前,让一段代码执行

(2)是否调用目标资源

(3)调用目标资源之后,让一段代码执行

二 过滤器的作用

(1)控制请求是否最终能到达目标资源

(2)进行拦截

(3)在chain方法之前的操作,对应答的数据进行的操作

三 Filter的生命周期

public void init(FilterConfig arg0) throws ServletException {

}

public void destroy() {

}

初始化方法调用是在服务器加载的时候调用,销毁的方法是在服务器停掉的时候,而不是在访问时,并且方法都只调用一次。

四 过滤器开发入门

1.过滤器的执行过程:

请求到达服务器,先读取web.xml文件中的配置文件,通过反射的机制,创建一个Filter对象,看是否与自己的过滤条件相同,如果有过滤器,有chain参数,就查找是否还有下一个过滤器,直到查找不到过滤器,再执行目标文件。

2.过滤器的配置

<filter>

<filter-name>filter1</filter-name>

<filter-class>com.hbsi.web.filter.FilterDemo1</filter-class>

</filter>

<!—-拦截的请求--(所有的)-->

<filter-mapping>

<filter-name>filter1</filter-name>

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

</filter-mapping>

注:

决定过滤器顺序的是web.xml中的 <filter-mapping>标签

过滤器不能产生应答

3.Java类中继承Filter接口,并实现其中的doFilter方法

public void doFilter(ServletRequest request, ServletResponseresponse,

FilterChain chain) throws IOException, ServletException {

System.out.println("呵呵");

//让请求到达最终资源

chain.doFilter(request,response);

System.out.println("wwwwwwwwwwww");

}

说明:再建一个jsp页面,当执行index.jsp页面前,工程会调用web.xml配置文件,并把配置文件中的filter封装成对象,初始化参数的封装,执行完init方法之后,去调用doFilter方法,一开始输出“呵呵“,然后遇到了chain调用的方法,这个方法是让请求达到最终资源的,所以会执行目标文件(index.jsp),并输出index.jsp中的内容再用response对象返回并输出doFilter方法中的最后一条输出语句。

五 Fileter常见的应用

1. 统一全站字符编码的过滤器

(1)使用的原因:

如果没有过滤器,在每一个页面中都要写上编码方法,如果把编码方法写到过滤器中,只用写一遍,并且在xml文件中配置初始化参数可以不直接指定编码方法,提高灵活性

(2)代码分析

在java中的代码

public class CharSetEncodingFilter implements Filter {

//过滤器统一解决乱码问题

private FilterConfig filterConfig;

public void destroy() {

// TODO Auto-generatedmethod stub

}

private String defaultCharset = "utf-8";

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException{

//模板代码

HttpServletRequest req = (HttpServletRequest)request;

HttpServletResponse rep = (HttpServletResponse)response;

//得到初始化参数

String charset =filterConfig.getInitParameter("encode");

if(charset==null){

charset = defaultCharset;

}

//请求对象

request.setCharacterEncoding(charset);

//应答对象---一般情况下不设置,因为过滤器不产生应答

rep.setCharacterEncoding(charset);

rep.setContentType("text/html;charset="+charset);

chain.doFilter(req, rep);

}

public void init(FilterConfig config) throws ServletException {

this.filterConfig=config;

}

}

在xml文件中的配置

<filter>

<filter-name>CharsetEncodeFilter</filter-name>

<filter-class>com.hbsi.web.filter.CharSetEncodingFilter</filter-class>

<init-param>

<param-name>encode</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharsetEncodeFilter</filter-name>

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

</filter-mapping>

测试类的使用

先在jsp页面中建一个<from>表单,并用post方法提交到一个servelet类中并输出即可看到效果

2. 禁止浏览器缓冲页面中的静态资源

(1)java中的代码分析

public class NoCacheFilter implements Filter {

public void destroy() {

}

//浏览器不缓存页面

public void doFilter(ServletRequest request, ServletResponseresponse,

FilterChain chain) throws IOException, ServletException{

HttpServletRequest req = (HttpServletRequest)request;

HttpServletResponse res= (HttpServletResponse)response;

//设置禁止缓存的消息头

res.setDateHeader("expires", -1);

res.setHeader("Cache-Control", "no-cache");

res.setHeader("Pragma", "no-cache");

chain.doFilter(req, res);

}

public void init(FilterConfig arg0) throws ServletException {

}

}

(2)在web.xml文件中的配置

<filter-mapping>

<filter-name>NoCacheFilter</filter-name>

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

</filter-mapping>

<filter-mapping>

<filter-name>NoCacheFilter</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

3.设置失效日期

(1)在java中的代码

public class ExpiresFilters implements Filter {

public void destroy() {

}

// 设置失效日期

public void doFilter(ServletRequest request, ServletResponseresponse,

FilterChain chain) throws IOException, ServletException{

HttpServletRequest req = (HttpServletRequest) request;

HttpServletResponse res = (HttpServletResponse) response;

// (1)得到请求的资源 是js css jpg???

String uri = req.getRequestURI();

if (uri.endsWith(".css")) {

// 设置页面的失效日期 是从---1970.1.1.0.0.0开始到某个时间点所经历的毫秒数

long expiresTime = Integer.parseInt(filterConfig.getInitParameter("css")) * 1000;

res.setDateHeader("Expires", System.currentTimeMillis()+expiresTime);

} else if (uri.endsWith(".js")) {

long expiresTime = Integer.parseInt(filterConfig.getInitParameter("js")) * 1000;

res.setDateHeader("Expires", System.currentTimeMillis()+expiresTime);

} else if (uri.endsWith(".jsp")) {

long expiresTime = Integer.parseInt(filterConfig.getInitParameter("jsp")) * 1000;

res.setDateHeader("Expires", System.currentTimeMillis()+expiresTime);

}

chain.doFilter(req, res);

}

private FilterConfig filterConfig;

public void init(FilterConfig config) throws ServletException {

this.filterConfig = config;

}

}

(2)在web.xml中的配置

<filter>

<filter-name></filter-name>

<filter-class></filter-class>

<init-param>

<!-- css样式的过期时间 jsp jpg都可以-->

<param-name>css</param-name>

<param-value>120</param-value>

</init-param>

<init-param>

<param-name>jsp</param-name>

<param-value>120</param-value>

</init-param>

<init-param>

<param-name>jpg</param-name>

<param-value>120</param-value>

</init-param>

</filter>

分享到:
评论

相关推荐

    day17过滤器 禁止缓存中文乱码自动登录MD5加密url级别权限控制

    NULL 博文链接:https://h496950806.iteye.com/blog/2043998

    dwz+spring mvc+mybatis框架集结使用

    该程序使用eclipse作为开发工具,mysql作为数据库。...dwz框架中的乱码问题不用太管,spring mvc自带的过滤器已经配置好了,网页发布到tomcat服务器后查看不会有乱码。 希望能帮到大家。也感谢给我帮助过的人。

    jsp课后习题第4章.docx

    4-2 当表单提交信息中包括汉字时,在获取时应该做怎样的处理? 使用request.setCharacterEncoding(“gb2312”) 4-3 如何实现禁用缓存功能? 通过设置HTTP头可实现禁用缓存功能,具体代码如下: ("Cache-Control",...

    300个注册表优化修改文件

    简单明了的任务管理器.reg 将mp3的音质调整到96kbps.reg 进入Windows后自动打开数字小键盘.reg 禁用长文件名中的~字符.reg 禁用关闭系统.reg 禁止访问任务栏的属性.reg 禁止改变工具栏的内容.reg 禁止删除...

    SOLR的应用教程

    3.6.4 Solr分词器、过滤器、分析器 42 3.6.5 Solr高亮使用 46 4 SolrJ的用法 46 4.1 搜索接口的调用实例 46 4.2 Solrj的使用说明 47 4.2.1 Adding Data to Solr 47 4.2.2 Directly adding POJOs to Solr 49 4.2.3 ...

    spring+shiro+ehcache例子

    项目简介:此项目只是简单的集成spring+springmvc+shiro+ehcahce 二: 步骤说明: 1:项目集成spring 在web.xml中配置spring容器的监听器。 2:项目集成springmvc 在web.xml中配置前端控制器 3:项目集成...

    HerosPHP(PHP MVC开发框架) v3.0.1.zip

    完善的AOP支持,可以在应用和模块分别设置监听器,轻松完成切面编程 提供的大量的字符串工具,网络工具,二维码工具,文件处理,图片上传,缓存工具,同步锁等,可以很方便的实现生成分布式唯一ID, RSA加密, ...

    JspRun!社区论坛系统 v6.0 bulid 090423 GBK 源码版.rar

    是飞速创想(北京)科技有限公司推出的一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。JspRun! 的基础...

    JspRun!社区论坛系统 v6.0 bulid 090424 GBK 安装版.rar

    是飞速创想(北京)科技有限公司推出的一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。JspRun! 的基础...

    PHPvod视频点播系统 2.5 for php5.3.x gbk.rar

    Phpvod从创立之初即以提高产品效率为突破口,随着编译模板,数据缓存等技术的应用,和坚固的数据结构及最少化数据库查询设计,使得PHPvod 可以在极为繁忙的服务器环境下快速稳定运行,切实节约网站成本。 支持用户...

    仿世纪佳缘婚介交友系统5.3 ASP+SQL

    系统设置项分成几大类:[基本设置]、[网站信息]、[安全设置]、[用户选项设置]、[邮件选项设置]、[注册选项设置]、[系统选项设置]、[上传选项设置]、[验证码设置]、[官方通讯设置]、[服务升级设置]、[支持接口设置] ...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 安装版.zip

    是飞速创想(北京)科技有限公司推出的一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。JspRun! 的基础...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 源码版.zip

    是飞速创想(北京)科技有限公司推出的一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。JspRun! 的基础...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 源码版.zip

    是飞速创想(北京)科技有限公司推出的一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。JspRun! 的基础...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 安装版.zip

    是飞速创想(北京)科技有限公司推出的一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。JspRun! 的基础...

    FruitSys_java编程_易买网_jsp_

    小练习小项目练手使用JSP实现页面显示使用Servlet进行流程控制使用JavaBean实现业务封装使用数据源+JDBC访问数据库使用jQuery进行页面交互使用过滤器完成中文乱码的问题使用Servlet 3.0的注解实现Servlet声明使用...

    文章管理系统

    11.解决后台编辑器之前空2格低于一个汉字的问题 12.完善几个细节问题 13.整合20121103~20121220补丁 2012年12月20日 ★更新方式:admin文件夹改成你后台目录名,然后补丁包里的所有文件覆盖进去。 1.富媒体...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向对象等内容。...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向对象等内容。...

Global site tag (gtag.js) - Google Analytics