过滤器的作用

1.当用户请求web资源时,如果没有过滤器,用户可以直接获取到这个web资源,当有了过滤器之后,当用户请求web资源时,web容器中的过滤器先会拦截到这个请求,然后根据这个请求 做相应的处理,之后会访问这个请求所对应的资源,这个资源返回给过滤器,再由过滤器返回给用户;过滤器的作用大概就是这样。

接下来讲一下过滤器的生命周期;

首先要实例化这个过滤器,实例化的时间是在web.xml 被加载的时候,之后就是初始化这个过滤器,初始化会调用init()方法,目前这两步都只会执行一次,就是当web容器启动的时候,接下来就是过滤,过滤调用doFilter()方法;之后就是销毁阶段,destory()方法,这个方法也是只调用一次,就是在web容器关闭的时候,

init()这是过滤器的初始化方法,web容器创建过滤器实例后,将调用这个方法。这个方法中可以读取web.xml文件中过滤器的参数;

doFilter()这个方法完成实际的过滤操作,这个地方是过滤器的核心方法,当用户请求访问与过滤器相关联的url时,web容器将先调用过滤器的doFilter方法;

FileterChain参数可以调用chain.doFiter方法,将请求传给下一个过滤器(或者目标资源),或者利用转发,重定向将请求转发到其他资源,

destory:web容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源

要使用过滤器要在web.xml配置好这个过滤器

在web.xml中配置过滤器,除了用编写代码的形式,还可以用myeclipse中design中的快捷方法;选中filter;

FirstFilter.java

package comimport 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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class FirstFilter implements Filter {@Overridepublic void destroy() {System.out.println("destroy---FirstFilter");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("start----doFilter--FirstFilter");
//        chain.doFilter(request, response);HttpServletRequest req =(HttpServletRequest) request;HttpServletResponse response2 =(HttpServletResponse) response;//重定向response2.sendRedirect(req.getContextPath()+"/main.jsp");//转发
//        req.getRequestDispatcher("main.jsp").forward(request, response);
//        req.getRequestDispatcher("main.jsp").include(request, response);System.out.println("end------doFilter--FirstFilter");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("init----FirstFilter");}}

View Code

问题描述:

1.过滤器能否改变用户请求的web资源呢?也就是说能否改变用户请求的路径呢?(可以)

2.过滤器能否直接返回数据呢,能不能直接处理用户请求呢?(不行),过滤器不能直接返回的意思是不能直接处理用户请求,也不能直接对客户端生成响应。response对象是HttpServletResponse,已经是访问的Web资源返回的响应数据。过滤器不是一个标准的Servlet,主要用于对HttpServletRequest进行预处理,也可以对HttpServletResponse进行后处理。

问题:web项目中多个过滤器是如何实现的?多个过滤器对应同一个用户路径执行顺序又是怎么样的?

在web项目中是允许定义多个过滤器的,如果这些过滤器互不相干,就会形成一条过滤器链,那么这个代码是dofiter里的代码是如何执行的呢?

服务器会按照web.xml 中过滤器定义的先后顺序组装成一条链,

SecondFilter.java

package comimport 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 SecondFilter implements Filter {@Overridepublic void destroy() {System.out.println("destroy-----SecondFilter");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("start---doFilter--SecondFilter");chain.doFilter(request, response);System.out.println("end---doFilter--SecondFilter");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("init-----SecondFilter");}}

View Code

它会依次先执行过滤器链的各个过滤器的放行前的代码,然后在执行web资源代码,然后再依次倒着执行过滤器链的各个过滤器的放行后的代码。

2.过滤器的分类;

struts的拦截器:

过滤器分成四类:request。(通过访问请求)。forward。include。error。

先在自己项目中。搭建struts2的运行环境,引入jar包。,写web.xml配置。定义struts2过滤器;这样以后struts的结果就有了。然后写一个类,继承ActionSupport类,这个类有个方法一个要写execute方法;这个方法返回的String,将在struts.xml 中返回相应的路径;返回成功的字符串;

实现步骤:(一)再次创建一个类;继承ActionSupport类或者实现Interceptor接口;只需要实现intercept方法即可;

方式一:实现Interceptor接口;

void init():初始化拦截器所需资源;

void destory(); 释放在init()中分配的资源;

String intercept(ActionInvocation ai) thows Exception

实现拦截器功能;

利用ActionInvocation 参数获取Action 状态;

返回result字符串作为逻辑视图:

在struts2中提供了一个父类,AbstractInterceptor类;

提供了init()和destory()方法实现空实现;

只需要实现intercept方法即可;

在调用action之前,会一次调用所配置的拦截器;当把这些拦截器执行完之后才会调用action。然后执行完action之后,又会反向的依次执行拦截器;才会通过最重的请求的响应;

写完类之后就要去struts.xml 配置了

<!-- 注册拦截器-->
<interceptors><interceptor name="mytimer" class="" ></interceptor>
</interceptors>
<action name="timer class=""><result>/success.jsp</result><!-- 引用拦截器--><interceptor-ref name="mytimer"></interceptor-ref>
</action>

配置过程也分为两步;首先要先注册这个拦截器,然后在相应的action中,调用这个拦截器;

struts内建拦截器;

params 拦截器;

负责将请求参数设置为Action属性;

staticParams 拦截器;

将配置文件中action元素的子元素param参数设置为Action属性;

fileUpload拦截器

对文件上传提供支持,将文件和元数据设置到对应的Action属性;

转载于:https://www.cnblogs.com/zht0915/p/4729385.html

java web 开发应用 ----过滤器相关推荐

  1. java web压缩过滤器_Java Web过滤器Filter(五)

    Filter概述 Filter意为滤镜或者过滤器,用于在Servlet之外对request或者response进行修改.Filter提出滤镜链的概念,一个FilterChain包括多外Filter.客 ...

  2. 初学Java Web(8)——过滤器和监听器

    什么是过滤器 过滤器就是 Servlet 的高级特性之一,就是一个具有拦截/过滤功能的一个东西,在生活中过滤器可以是香烟滤嘴,滤纸,净水器,空气净化器等,在 Web 中仅仅是一个实现了 Filter ...

  3. Java web—Servlet过滤器(Filter)

    前言:         过滤器是Servlet中一个非常重要的组成部分,进行WEB开发时无不用到过滤器:因此这篇blog来单独总结下关于过滤器的知识点. 一.首先来了解一下什么是过滤器: 下面这句话引 ...

  4. Java Web开发应用中要掌握的一些感念 疯狂JAVA

    概念一直是学习计算机软件开发中经常遇到的问题,也是软件行业最喜欢创造的东西.很多时候,学习计算机软件开发遇到困难都是因为对某些概念的不理解,而不是因为技术本身有多么复杂.Java Web作为Java ...

  5. Java Web之过滤器的简单创建

    Java Web开发中 的过滤器 ( filter ) 是 从Servlet 2.3规范开始增加 的 功能 , 并在Servlet 2.4规范中得到增强. 对Web应用来说 ,过滤器是 一个驻留在服务 ...

  6. Java Web之过滤器(Filter)

    过滤器(Filter) 过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理 通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理 ...

  7. Java WEB之过滤器

    过滤器是什么玩意? 所谓过滤器,其实就是一个服务端组件,用来截取用户端的请求与响应信息. 过滤器的应用场景: 1.对用户请求进行统一认证,保证不会出现用户账户安全性问题 2.编码转换,可在服务端的过滤 ...

  8. Java Web之过滤器Filter(@WebFilter)

    过滤器(Filter) 过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理 通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理 ...

  9. 零基础学java web开发 pdf_从零开始学Java Web开发 PDF 扫描版[69M]

    java web是目前最流行的动态网页开发技术之一.本书由浅入深.循序渐进,使零基础的读者能够熟练掌握如何使用java web开发应用程序系统. 本书分为4部分,第一部分是java语言基础篇,包括ja ...

最新文章

  1. Linux中的基础和小工具
  2. (4)关于Alpha通道问题
  3. php分享二十八:mysql运行中的问题排查
  4. 【iCore4 双核心板_FPGA】例程七:状态机实验——状态机使用
  5. zabbix-2:自定义监控项目
  6. python def函数报错详解_Python函数详解
  7. linux-basic(12)正则表达式与文件格式化处理
  8. 云服务器怎么装mysql_云服务器(windows环境)安装mysql图文教程
  9. Windows phone 7应用之代码性能分析工具——Profile.
  10. php 5.5.1,PHP5.3.1 不再支持ISAPI
  11. 延展公司受邀参加圣象集团信息化建设年度总结会议
  12. Mac Safari浏览器的阅读列表与iPhone、iPad (iOS)不同步的问题
  13. 《CUDA C编程权威指南》——2.4节设备管理
  14. 微博市值破百亿,真的只是恰巧赶上奥运了吗?
  15. 数据库数据迁移的3种方案学习
  16. 输入时(hour)、分(minute)、秒(second)的一个具体时间,要求打印出它的下一秒出来(一天24小时)。 例如输入的是23时59分59秒,则输出00:00:00
  17. 阐明iOS证书和provision文件
  18. TOSCA自动化测试工具
  19. c语言人民币小写转换成大写,C语言实现人民币小写转大写
  20. 微信小程序------1️⃣

热门文章

  1. 使用Remix编译和部署以太坊智能合约
  2. unity开发入门_Unity游戏开发终极入门指南
  3. gitter 卸载_最佳Gitter频道:VR和AR
  4. 如何禁止NumPy自动跳过数组的中心部分并仅打印角点
  5. 参加软件测试培训需要注意哪些
  6. 在web.xml文件中配置Servlet时,主要配置哪些信息?
  7. 用Git上传删除本地项目到gitlab---图文解析
  8. intellij打开工程在每个java文件上有个红色的无效符的解决办法
  9. 阿里云安全肖力:安全基础建设是企业数字化转型的基石
  10. centos7安装配置pgAgent