JSP
在javaweb编程中,可以在四个不同大小的可访问范围(时间、空间)中设置属性对象。即将一个对象绑定到一个字符串上。
JavaWeb中四大域对象的作用范围
-
ServletRequest :
-
作用范围是整个一次请求链(包括将此请求转发到的其它页面),也即从客户端发来一次请求开始,到本次服务端响应结束。
-
对应内置对象是request,EL中可用requestScope取得此对象。
- 设置该范围属性的写法是:request.setAttribute(string, Object)。
-
我们一会将会和session一起举例对比
- Session :
- 作用范围是一次会话。
- 对应内置对象是session,EL中可用sessionScope取得此对象。
- 设置该范围属性的写法是:session.setAttribute(string, Object)
注意:浏览器发送一次请求到服务器,服务器首先判断,该请求是否携带一个SessionID值
如果这次请求没有携带一个SessionID值,服务器就知道了,这是第一次来访问该服务器
浏览器与该服务器开始建立会话
服务器会在相应请求的同时,将产生一个SessionID,作为该次会话的标识
再把这个SessionID发给浏览器,浏览器就拥有一个SessionID了
当再次访问该服务器时,浏览器会携带那个SessionID,被传到服务器
服务器首先判断该请求是否携带一个SessionID值,此时有了,代表这不是一个新的会话的请求
如果浏览器两个请求之间的时间太长,超出服务器等待的时间,服务器会删除这个session对象
删除后,再次发送到该服务器,因为服务器里没有这个session对象了,就不能判断请求是否携带SessionID值
也就是说判断不出来,就认为这是一个新的会话开始,又会产生一个SessionID,作为这次新会话的标识
又把这个SessionID发给浏览器,浏览器就拥有一个新的SessionID了
在会话开始时,服务器会自动分配一个空间(session对象),SessionID就在session对象里
Session的关闭
- 如果要立即销毁整个session可以调用invalidate(),其中各对象也全部清除。
- session到最大等待时间后,session无效。
- 关闭浏览器后,session无效。
- 关闭服务器的后,session无效。
A . 只要浏览器和服务器没有配对的sessionId就表示session无效。
B . 有的服务器可以做到启动后恢复之前的session。即服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session中的一些对象还是存在的,否则认为已经被释放了。
- ServletContext
- 作用范围是整个Web应用。
- 当Web应用被加载进容器时就会创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。
- 设置该范围属性的写法是:application.setAttribute(string, Object)。
- 对应内置对象是application,EL中可用applicationScope取得此对象。
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
运行结果:console 都 打印出了 value”com.MySQL.jdbc.Driver”
所以说:ServletContext作用范围是整个Web应用
- PageContext
- 作用范围是该JSP页面本身,是最小的一个作用范围。
- 对应内置对象是pageContext,EL中可用pageScope取得此对象。
- 设置该范围属性的写法是:pageContext.setAttribute(string, Object)。
总结:作用范围从小到大依次为:PageContext,ServletRequest,Session,ServletContext。
Filter
filter翻译为过滤器。在web项目中,经常需要在正式处理请求前,做一些特殊的处理或常用的例程,于是就发明了这个filter。
作用:
- 过滤非法文字和信息。
- 设置统一字符编码。
- 对用户进行登录验证 。
- 改变图片文件格式。
- 对相应内容做压缩处理。
- 对XML的输出使用XSLT来进行转换。
步骤:
- 第一步:通过在web.xml中的元素和元素来配置filter,以决定用户请求的URL应被哪些filter类来处理一次。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 步骤二:编写filter的Servlet类。
- 我们的filter类需要实现父接口javax.servlet.Filter。
- 实现父接口的各个方法。包括init(),doFilter(),destroy(),这3个方法。
- init()方法和destroy()方法分别用来初始化和销毁时调用。
- init()方法在 Filter 生命周期中仅执行一次。服务器启动时就会执行。
- destory()方法在Filter的生命周期中仅执行一次,即Web容器卸载Filter对象之前调用它。主要做释放资源的操作。
- 对doFilter(req,resp,chain)方法操作。
- chain.doFilter(request,response)。
注意:chain参数则通过调用自己的doFilter方法来将请求向下传递,如果没有调用doFilter()方法,则相当于阻止了本次请求。
创建如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
这个样子我们就可以过滤web项目的所有url了!!!