The Filter

Filter不会产生Request或者是Response, 但是会在两者访问资源时, 对其作出改变.其可以作用于静态资源和动态资源.

LifeCycle

Filter会和Servlet, 资源文件等一起打包在Web App中, 在第一个request到来前, 容器应保证每一个filter都正确配置且初始化完成的或者是抛出配置不正确的异常.

当有request传入时, 会触发Filter Chain的第一个, 并执行其中的doFilter(), 并把参数ServletRequest, ServletResponse, FilterChain传递进去.

而后会以下面的方式执行:

  1. 首先检查Request的Headers
  2. 将Request对象包裹在一个实现了ServletRequest or HttpServletReques的对象中, 以便更改. 对Response对象做同样操作.
  3. 调用Filter Chain上面下一个实体的doFilter(), 直至到达资源, Filter也可以选择拦截Request对象, 仅仅传递Response对象.
  4. 检查Response的Headers, 并返回.
  5. Filter中有可能出现异常. 当Filter被从Service中移除的时候, 容器会保证先调用Filter的destory()方法.

Sessions

Sessions是在HTTP无状态的条件下发展出的能够区分同一client而不同访问的方法.
实现一般有三种: Cookies, SSL, Url Rewritting.
其中Cookies受浏览器本身的设置影响, SSL一般在HTTPS上用, Url Rewritting则是把sessionid等直接放在了url后面每次传递都带上.

Create sessions

client和session的关系: 一般称client join session. 只有当client返回了session的标识到server端才表明此时client join session, 但是这并不能推断出下次请求client一定在session中.

The session is considered to be “new” if either of the following is true:

  • The client does not yet know about the session
  • The client chooses not to join a session.

而应用开发者必须考虑到client 没有加入会话, 不能加入会话, 不想加入会话等情况.

Sessions的范围应该是application或者是servlet context级别的, 不能在不同的context下可见或者共享.

Import Session Semantics

多线程问题:
会出现多个线程访问同一个Session的情况, 所以容器应当保证在session中内部存储的属性集合使用线程安全的结构以保证访问安全, 而应用开发者则应该保证对session内属性访问的线程安全.

Servlet The Filter的更多相关文章

  1. Servlet、Filter、Listener、Interceptor

    首先,JSP/Servlet规范中定义了Servlet.Filter.Listener这三种角色,并没有定义Interceptor这个角 色,Interceptor是某些MVC框架中的角色,比如Str ...

  2. JSP中的Servlet及Filter

    asp.net中,如果开发人员想自己处理http请求响应,可以利用HttpHandler来满足这一要求:类似的,如果要拦截所有http请求,可以使用HttpMoudle.java的web开发中,也有类 ...

  3. servlet、filter、listener、interceptor之间的区别和联系

    一.概念 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层. 2.filter: ...

  4. j2ee Servlet、Filter、Listener

    首先,JSP/Servlet规范中定义了Servlet.Filter.Listener这三种角色,并没有定义Interceptor这个角色,Interceptor是某些MVC框架中的角色,比如Stru ...

  5. Servlet、Filter 生命周期

    Servlet作为JavaEE必须掌握的内容,Struts2通过使用Filter的功能实现了一个MVC的框架.因此掌握这Servlet以及Filter的生命周期显得非常重要. 1. Servlet的生 ...

  6. 【Servlet】Filter过滤器的编写和配置

    Servlet的Filter介绍 在Servlet作为过滤器使用时,它可以对客户的请求进行过滤处理,当它处理完成后,它会交给下一个过滤器处理,就这样,客户的请求在过滤链里一个个处理,直到请求发送到目标 ...

  7. servlet的filter的使用

    一.概述 过滤器是servlet的一个重要特性,它提供一种机制,允许在过滤器中,即可以修改浏览器的请求信息,也可以对服务器处理后的响应信息进行修改. 一个过滤器是一个实现了Filter接口的java类 ...

  8. java web.xml listener servlet 和filter加载顺序

    在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...

  9. Servlet、Filter、Listener、Interceptor基础

    第一:Servlet Servlet是个接口,全限定名是javax.servlet.Servlet,在javax.servlet包中,在servlet-api.jar(在tomcat自带的lib文件夹 ...

  10. 在Servlet(或者Filter,或者Listener)中使用spring的IOC容器

    web.xml中的加载顺序为:listener > filter > servlet > spring. 其中filter的执行顺序是filter-mapping在web.xml中出 ...

随机推荐

  1. 20个Flutter实例视频教程-第13节: 展开闭合案例

    20个Flutter实例视频教程-第13节: 展开闭合案例 视频地址: https://www.bilibili.com/video/av39709290/?p=13 博客地址: https://js ...

  2. Flutter实战视频-移动电商-38.路由_Fluro中Handler编写方法

    38.路由_Fluro中Handler编写方法 在main.dart中初始化Fluro 编写handler 在lib下新建routers文件夹,表示里面要很多路由相关的文件 我们声明一个Handler ...

  3. CCF 201604-1 折点计数 (水题,暴力)

    问题描述 给定n个整数表示一个商店连续n天的销售量.如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点.其他的天都不是折点.如 ...

  4. flex(1)

    flex使用的actionscript语言遵守ECMA-262标准,这与javascript语言是一致的,由此可见二者语法的相似.

  5. 洛谷 - P2551 - 华夏60战斗机 - 简单dp

    https://www.luogu.org/problemnew/show/P2551 首先这道题没有给Hm的最大值,很坑,只能随便开一个100没想到还过了. 观察题目,发现虽然高度可以变化,但是速度 ...

  6. 719. Find K-th Smallest Pair Distance

    Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai ...

  7. CodeForces599D【数学】

    题意: 给出一个x,求有多少个矩阵中满足存在x个不同的正方形. 思路: (数学渣+推理渣) #include<bits/stdc++.h> using namespace std; typ ...

  8. HDU1083 【匹配问题】

    题意: 有P门课,N个学生,给出每门课上的人. 然后问你能不能使得每门课有一个课代表 思路: 课和学生是两类,且同类之间没有关系,构成二分图:直接就是一个最大匹配问题: 注意点: 1.是给课进行匹配不 ...

  9. Lightoj1084【DP啊DP】

    题意: 给你n个人的位置,每个人最多移动k个单位,然后在某点>=3人可以抱团,问你这n个人最少抱团数,只要有一个n不能抱团输出-1: 思路: 感觉又是超级超级狗血.... 剪不断,理还乱... ...

  10. stringstream转换

    在这之前,在杭电刷题的时候,并没有注意到这个好东西. 使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高 ...