概述
web服务器端有三大技术:Servlet Filter Listener
Servlet:本质上是一个类,这个类需要实现Servlet接口规范 作用:可以做浏览器和服务器之间的交互请求和响应 Filter:本质上是一个类,这个类需要实现Filter接口规范 作用:对浏览器访问服务器资源时的一种拦截,符合条件才放行 不符合条件不放行访问资源 资源:项目里面的资源 比如:Servlet html jsp js jpg...
作用
主要作用:拦截浏览器访问服务器的请求的
ps:也会拦响应,但是企业主要用于拦请求
filter的使用
1 xml配置文件方式(掌握)
创建一个java类,实现filter的接口 在web.xml中配置filter要拦截的资源
2 注解配置方式(了解)
在自定义的filter类上添加注解: @WebFilter(urlPatterns = "/sd1")
filter的细节
1.filter不是对所有资源都拦截,需要拦截哪些资源都需要配置filter
2.如果多个filter都对同一个资源拦截,那多个filter都会执行
配置文件中:多个filter的执行顺序是web.xml的上下配置顺序
注解中: 执行的顺序是按照filter文件名的自然排序顺序
3.如果filter放行,找的是看看有没有下一个过滤器执行,如果没有下一个过滤器才会执行服务器的资源
filter的生命周期(了解)
从filter的出生到filter的死亡 有3个方法伴随:init() destory() dofilter() 服务器启动创建filter对象执行init方法 浏览器访问到了匹配到的资源 执行dofilter方法 访问一次执行一次 当服务器关闭的时候 执行destory方法 销毁当前filter 关注点:doFilter核心过滤方法
filter生命周期方法中参数(了解)
方法:init(FilterConfig config) 参数:filterConfig 当前filter的配置对象 作用
1 可以获取到当前filter的名称 getFilterName()
2 可以获取到ServletContext对象 getServletContext()
方法:doFilter(ServletRequest req, ServletResponse resp, FilterChain filterchain) 参数:request response filterchain 作用 1.request response之前怎么用 在filter中还怎么用 2.FilterChain:过滤器链对象 作用:维护过滤器的执行顺序的 核心放行方法: chain.dofilter(req,res)
Filter的配置
1.filter的资源路径配置(面试题) 有3种方式来配置filter的拦截路径
1.完全路径匹配: 以/开始 例如:/sd1 /a/b/c/sd1 匹配单一资源的匹配 注意:<url-pattern>标签可以出现多个 2.目录匹配:以/开始 以*结尾 例如:/* /a/b/* 匹配目录下的所有资源 3.扩展名匹配:不以/开始 以.结尾 例如:*.jsp *.jpg *.html 匹配一类资源的
2.filter的拦截方式配置 默认:filter只拦截浏览器过来的请求 不拦截服务器内部的请求(请求转发) 配置filter拦截服务器内部的请求
xml方式配置 在<filter-mapping>的标签中添加标签<dispatcher>FORWARD</dispatcher> 但是这种配置将filter默认的拦截方式给覆盖了 只会拦截服务器内部的请求 不会再拦截默认的浏览器请求了 想让filter拦截服务器内部的请求又拦截浏览器过来的请求: <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping> 注解方式配置 @WebFilter(dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD}) 该注解配置filter既会拦截浏览器过来的请求 又会拦截服务器内部的请求
总结filter
filter概述:本质上是一个类,实现了filter接口规范 fitler作用:可以对浏览器访问服务器的请求进行拦截 filter的快速入门:xml方式 注解方式 xml方式:1 创建1个类型实现filter接口 2 在web.xml中进行拦截资源的配置 注解方式:直接在当前的filter类上添加注解 @webFilter(url-pattern="路径") filter细节 1 filter不是对所有资源都拦截,需要拦截哪个要创建且配置 2 多个filter拦截了同一个资源,多个filter都执行 3 filter放行之后,会找下一个filter执行,直到没有filter了才会去找资源 filter的生命周期 服务器一启动就会创建当前的filter对象执行init方法 当访问到要匹配的资源时,filter的dofilter核心拦截方法执行 访问一次执行那一次 当服务器关闭的时候,filter的destory销毁方法执行 filter拦截方式 filter默认只对浏览器的请求进行拦截 不对服务器的内部跳转请求进行拦截 如果想配置可以在web.xml中进行配置 <filter-mapping> <filter-name>MyFilter2</filter-name> <url-pattern>/*</url-pattern> <!--让当前filter拦截内部的请求转发--> <dispatcher>FORWARD</dispatcher> <!--让当前filter拦截浏览器过来的请求--> <dispatcher>REQUEST</dispatcher> </filter-mapping> filter路径配置方式:三种(面试题) 1 完全路径匹配 例如:/sd1 /sd2 针对单一资源的 但是<url-pattern>可以写多分 2 目录匹配 例如: /* /a/b/* 针对指定目录下的所有资源你的 3 扩展名匹配 例如: *.jsp *.html 针对一种类型的所有资源的
案例一:统一解决所有servlet的乱码问题
案例二:非法字符的过滤
listener--监听器
概述
listener:本质上是一个类,需要实现监听器的接口
作用
监听器可以去监听到域对象的状态变化(ServletContext request session)
状态变化:创建和销毁
提供的监听器:
ServletContextListener: 监听ServletContext创建和销毁(掌握)
ServletRequestListener: 监听request 创建和销毁
HttpSessionListener: 监听session创建和销毁
listener的使用
java提供了各种各样的监听器,每个监听器都有自己的作用
1.ServletContextListener监听器:监听ServletContext对象的创建和销毁的(掌握)
listener监听器的创建
xml方式:(掌握) 1 创建一个java类,实现java提供的指定监听器的接口 2 在web.xml中进行配置 注解方式: 在编写的listener类上加上注解 @WebListener

评论