① servlet过滤器有什么作用,一般用在什么地方
1.什么叫过滤器呢?
过滤器就是可以对浏览器向jsp,servlet,html等这些web资源发出请求和
服务器回应给浏览器的内容,他可以进行过滤。这个过滤过程中可以拦截浏览
器发出的请求和服务器回应给浏览器的内容。拦截之后,就可以进行查看,并且
可以对拦截内容进行提取,或者进行修改。
Servlet过滤器拦截请求和响应,以便查看,提取或操作客户机和服务器之间
交换数据。
2.Servlet过滤器的用途:
用户认证与授权管理:我们开发一个web应用,肯定有不同权限的用户,有管理员,有普通用户。而管理员又可能分为一级管理员,二级管理员,三级管理员。每一级管理员可能又有不同的管理权限操作,访问不同的资源。过去我们可能都是在jsp页面,servlet中加以权限的控制。通过session,看他是否有这个权限,如果有,则让他操作某个资源。这些都是些共性。那么现在我们就可以把他提取出来。让他通过过滤器来实现;用户来访问一个资源,我们通过过滤器来过滤这个请求,在程序中判断是否有权限来访问这个资源;
有,则让他去访问,没有,就让他转到另外一个页面。这样通过过滤器就实现了授权管理;
统计web应用的访问量,和访问的命中率,报告;
实现web应用的日志处理功能;
实现数据压缩功能;
对传输的数据进行加密;
实现XML文件的XSLT转换;
② Servlet、过滤器、监听器实例化对象的优先级和销毁的优先级
创建: 监听器-->过滤器-->Servlet.
项目启动后,容器会首先创建声明的各种监听器,为后继的各个事件监听做准备,然后创建过滤器,最后是Servlet.
销毁的时候是反序进行的....
③ servlet 过滤器执行完chain.doFilter(req, rep);之后再去执行什么代码
在调用制servlet的service()方法之前,容器会先创建一个filterchain,并把servlet传入这个filterchain对象,作为其内部参数。创建这个filter chain的时候,会根据请求的uri,把符合条件的filter加入到这个chain里。紧接着就调用这个filter chain的doFilter方法。这个filter chain的doFilter方法就会按顺序(在web.xml定义的顺序)调用各个filter的doFilter方法。当所有的filter的doFilter方法都调用完以后,才会调用servlet的service方法。
④ 过滤器怎么过滤servlet跳转后的页面
这个问题我很有发言权,我搞了一晚上,刚刚发现这个怎么弄
新建一个filter
⑤ 在servlet过滤器的生命周期方法中,每当传递请求或响应时,web会调用什么方法
Servlet生命周期分为复三个阶段制:
1、初始化阶段 :调用init()方法
2、响应客户请求阶段:调用service()方法
3、终止阶段:调用destroy()方法
在 Servlet 的生命期中,仅执行一次 init() 方法。是在服务器装入 Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet,都不会重复执行 init() 。
(5)过滤器servlet销毁顺序扩展阅读:
最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 开始支持标准的 Servlet API。Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:
1、客户端发送请求至服务器端;
2、服务器将请求信息发送至 Servlet;
3、Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
4、服务器将响应返回给客户端。
⑥ 编写servlet过滤器时,哪个接口用于调用过滤器链中下一个过滤器
void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)这个方法有3个参数,调用过滤器链中内的下一个容过滤器用的是第三个参数
filterChain.doFilter(request, response);
⑦ Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序
通过实践发现如果想要控制filer的执行顺序可以 通过控制filter的文件名 来控内制
比如:容
UserLoginFilter.java 和 ApiLog.java 这两个文件里面分别是“用户登录检查过滤器”和“接口日志过滤器”,因为这两个文件的 首字母A排U之前 ,导致每次执行的时候都是先执行“接口日志过滤器”再执行“用户登录检查过滤器”,所以我们现在修改两个文件的名称分别为
Filter0_UserLogin.java
Filter1_ApiLog.java
这样就能先执行“用户登录检查过滤器”再执行“接口日志过滤器”
⑧ servlet和过滤器的区别是什么
一、概念:
1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。
2、filter:filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
二、生命周期:
1、servlet:servlet的生命周期始于它被装入web服务器的内存时,并在web服务器终止或重新装入servlet时结束。servlet一旦被装入web服务器,一般不会从web服务器内存中删除,直至web服务器关闭或重新结束。
(1)、装入:启动服务器时加载Servlet的实例;
(2)、初始化:web服务器启动时或web服务器接收到请求时,或者两者之间的某个时刻启动。初始化工作有init()方法负责执行完成;
(3)、调用:从第一次到以后的多次访问,都是只调用doGet()或doPost()方法;
(4)、销毁:停止服务器时调用destroy()方法,销毁实例。
2、filter:(一定要实现javax.servlet包的Filter接口的三个方法init()、doFilter()、destroy(),空实现也行)
(1)、启动服务器时加载过滤器的实例,并调用init()方法来初始化实例;
(2)、每一次请求时都只调用方法doFilter()进行处理;
(3)、停止服务器时调用destroy()方法,销毁实例。
三、职责
1、servlet:
创建并返回一个包含基于客户请求性质的动态内容的完整的html页面;
创建可嵌入到现有的html页面中的一部分html页面(html片段);
读取客户端发来的隐藏数据;
读取客户端发来的显示数据;
与其他服务器资源(包括数据库和java的应用程序)进行通信;
通过状态代码和响应头向客户端发送隐藏数据。
2、filter:
filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应:
在执行servlet之前,首先执行filter程序,并为之做一些预处理工作;
根据程序需要修改请求和响应;
在servlet被调用之后截获servlet的执行
四、区别:
1,servlet 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。它主要用来在 业务处理之前进行控制.
2,filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,而servlet 处理之后,不会继续向下传递。filter功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程。
filter可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等。
参考:https://..com/question/1577030487304140580.html
⑨ Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序
之前我们控制多个filter的执行顺序是通过web.xml中控制filter的位置来控制的,放在上面的会比放在下面的先执行,如下“用户登录检查过滤器”会比“接口日志过滤器”先执行
<!--用户登录检测过滤器-->
<filter>
<filter-name>UserLoginFilter</filter-name>
<filter-class>net.tfgzs.demo.filter.UserLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UserLoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--接口日志过滤器-->
<filter>
<filter-name>ApiLog</filter-name>
<filter-class>net.tfgzs.demo.filter.ApiLog</filter-class>
</filter>
<filter-mapping>
<filter-name>ApiLog</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是当我们使用@WebFilter注解的时候发现注解里面没有提供可以控制执行顺序的参数
通过实践发现如果想要控制filer的执行顺序可以通过控制filter的文件名来控制
比如:
UserLoginFilter.java 和 ApiLog.java 这两个文件里面分别是“用户登录检查过滤器”和“接口日志过滤器”,因为这两个文件的
首字母A排U之前
,导致每次执行的时候都是先执行“接口日志过滤器”再执行“用户登录检查过滤器”,所以我们现在修改两个文件的名称分别为
Filter0_UserLogin.java
Filter1_ApiLog.java
这样就能先执行“用户登录检查过滤器”再执行“接口日志过滤器”
⑩ Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序
通过实践发现复如果想要控制制filer的执行顺序可以
通过控制filter的文件名
来控制
比如:
UserLoginFilter.java 和 ApiLog.java 这两个文件里面分别是“用户登录检查过滤器”和“接口日志过滤器”,因为这两个文件的
首字母A排U之前
,导致每次执行的时候都是先执行“接口日志过滤器”再执行“用户登录检查过滤器”,所以我们现在修改两个文件的名称分别为
Filter0_UserLogin.java
Filter1_ApiLog.java
这样就能先执行“用户登录检查过滤器”再执行“接口日志过滤器”