SSH框架学习笔记(二)----Filter,Listener以及JSP的新特性
Fileter:对用户请求进行预处理,接着讲请求交给Servlet进行处理并生成响应,最后在对服务器响应进行后处理.
- 用处:
- 在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
- 根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据
- 在HttpServletResponse到达客户端之前,拦截HttpServletResponse
- 根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据
- 种类:
- 用户授权的Filter:负责检查用户请求,根据请求过滤用户非法请求
- 日志Filter:详细记录某些特殊的用户请求
- 负责解码的Filter:包括对非标准编码的请求解码
- 能改变XML内容的XSLT Filter
- Filter可负责拦截多个请求或响应,一个请求或响应也可以被多个Filter拦截
- 创建Filter的步骤:
- 创建Filter类:
- 实现javax.servlet.Filter接口
- 实现init(),destroy(),doFilter()方法
- 配置Filter:
- 注解方法:
@WebFilter(filterName="Filter的名字",urlPatterns={"/*"},initParams={@WebInitParam(name="key",value="value"),..})
- web.xml配置:
<filter> <filter-name>Filter的名字</filter-name> <filter-class>类名</filter-class>
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param> </filter> <filter-mapping> <filter-name>Filter的名字</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
- 注解方法:
- 创建Filter类:
Listener:监听web应用内部事件
-
创建Listener的步骤:
- 实现Listener类:
- 实现的监听器接口:
- ServletContextListener:用于监听应用的启动和关闭
- ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变
- ServletRequestListener:监听用户请求
- ServletRequestAttributeListener:监听request内属性的改变
- HttpSessionListener:监听session的开始和结束
- HttpSessionAttributeListener:用于监听session内属性的改变
- 以ServletContextListener为例实现方法:
- 实现contextInitialized()方法:应用启动时触发
- 实现contextDestroyed()方法:应用关闭时触发
- 实现的监听器接口:
- 配置Listener:
- 注解配置:使用@WebListener修饰Listener实现类
- web.xml配置:
<listener> <listener-class>类名</listener-class> </listener>
JSP2的新特性
- 使用jsp2语法web.xml需要使用servlet2.4以上版本的配置,注意<web-app>标签的版本号要对
- 可配置JSP属性:
<jsp-config> <jsp-property-group> <url-pattern>/noscript/*(作用范围)</url-pattern> <el-ignored>true(忽略表达式语言)</el-ignored> <page-encoding>页面编码字符集</page-encoding> <scripting-invalid>true(不允许使用脚本)</scriptin-invalid> <include-prelude>隐式导入页面头</include-prelude> <include-coda>隐式导入页面尾</include-coda> </jsp-property-group> </jsp-config>
- 表达式语言:
- 语法格式:${expression}
- 表达式语言的11个内置对象:
- pageContext:代表页面的pageContext对象
- pageScope:用于获取page范围的属性值
- requestScope:用于获取request的属性值
- sessionScope:用于获取sessionde属性值
- application:用户获取application的属性值
- param:用于获取请求的参数值
- paramValues:用于获取请求参数值,返回的是数组
- header:用于获取请求头的属性值
- headerValues:用于获取请求头的属性值,返回数组
- initParam:用于获取请求Web应用的初始化参数
- cookie:用于获取cookie值
- 表达式语言自定义函数步骤:
- 开发函数处理类:就是普通类,包含若干个静态方法,每个方法都可定义为一个函数
- 使用标签库定义函数:与定于标签类似:在<taglib/>元素下定于<function/>每个function指定以下三个要素就行了:
- name:指定自定义函数名
- 指定自定义函数处理类
- 指定自定义函数对应的方法
- 使用函数:${crazyit:reverse(param["name"])}