Java Server 理解与实践 —— Servlet Context,Filter以及Listener
来源:互联网 发布:ed视频剪辑软件下载 编辑:程序博客网 时间:2024/09/21 09:01
- Servlet Context
- Servlet Context概念
- Servlet Context的简单用法
- 增加初始化参数以及获取初始化参数
- Servlet Filter
- 什么是Servlet Filter
- 增加Servlet Filter
- Servlet Listener
- Servlet Listener简介
- 增加Servlet Listener
- 小结
Servlet Context
Servlet Context概念
ServletContext是Java Web应用运行时所有Servlet共享的Context对象,ServletContext主要拥有如下功能:
- 获取Web.xml中配置的初始化参数
- 设置全局共享属性(
setAttribute
) - 获取过滤器(filter)、监听器(listener)的注册信息
- 获取应用资源路径,读取资源
接下来,我们会针对其中两个重要的功能——在web.xml中添加初始化参数以及过滤器——进行阐述以及示例应用。
Servlet Context的简单用法
增加初始化参数以及获取初始化参数
在web.xml
中,我们通过配置<context-param>
来配置ServletContext的初始化参数,如:
<context-param> <param-name>sampleContextPram</param-name> <param-value>Initial</param-value> </context-param>
而在引用的时候,我们只需要使用如下方法即可。(this指向servlet对象)
this.getServletContext().getInitParameter("sampleContextPram")
Servlet Filter
什么是Servlet Filter
在Servlet对请求进行处理之前,如果我们需要做一些额外且通用的操作,如判断当前访问是否合法,是否包含有处理请求所需要的所有请求头,我们就可以使用Servlet的Filter功能。
在javax.servlet
的包下,定义了一个为Filter
的接口,这就是我们实现Servlet Filter所需要实现的接口。接口中声明了几个方法。
public void init(FilterConfig filterConfig) throws ServletException;//可以配置filter的初始化参数,并且在init的时候进行获取和处理public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws IOException, ServletException;//声明且配置完成filter后,每一个请求都会首先通过filter进行处理后再传到Servlet中,而在这一层,我们也可以加入一些拦截方法,拦截一些非法请求。public void destroy();//用于释放filter持有的资源。
增加Servlet Filter
接下来就会展示如何通过在web.xml中配置增加一个filter。
首先,创建我们自身的filter类 SimpleFilter.java
public class SimpleFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { response.getOutputStream().write("filtered!".getBytes()); chain.doFilter(request, response);//必须,如果不继续进行链式调用的话,就会直接返回。 } @Override public void destroy() {}}
然后,在web.xml中完成定义
<filter> <filter-name>simpleFilter</filter-name> <filter-class>filters.SimpleFilter</filter-class> </filter> <filter-mapping> <filter-name>simpleFilter</filter-name> <url-pattern>/test</url-pattern> </filter-mapping>
Filter最终也会被注册到ServletContext中,我们可以通过ServletContext.getFilterRegistrations
来查看当前Context中注册的所有filter。(因为ServletContext是所有Servlet共享的,因此这些注册信息也会被所有的Servlet共享)
Servlet Listener
Servlet Listener简介
除了能够对请求进行通用的拦截,修改,我们还能够通过监听器来监听特定的事件。
Servlet事件可以分为两类,第一类是发生动态变化,如下表所示。
ServletContextAttributeListener
ServletContext的属性被修改 ServletRequestAttributeListener
Servlet请求属性被修改 HttpSessionAttributeListener
Servlet Session属性被修改第二类则是和生命周期相关,如下表所示。
ServletRequestListener
创建请求 ServletContextListener
ServletContext初始化完成。 HttpSessionListener
创建Session增加Servlet Listener
下面,将会简单展示如何添加一个监听ServletContext初始化完成的监听器。
首先,创建类SimpleListener.java
public class SimpleListener implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("context loaded!"); } @Override public void contextDestroyed(ServletContextEvent sce) {}}
然后,在web.xml
中增加对应的配置。
<listener> <listener-class>listeners.SimpleListener</listener-class> </listener>
小结
这篇文章介绍了Servlet运行时所配置的Context, Filter,以及Listener。首先要明确一点的是,在一个Java Server(一个JVM)中可以拥有多个Servlet,但却只会拥有一个ServletContext,以及一套配置好的Filter和Listener。Servlet在接收确定的请求后才会被创建,但是ServletContext,Filter,Listener却会在启动Java Server的时候就被创建。
ServletContext可以用于存储整个Java应用所需要的初始化参数,以及在Servlet之间共享的变量。
Filter可以用于修改请求头,响应,也可以直接让请求返回,甚至是拦截请求拒绝服务。
Listener则监听在所有Servlet之间发生的事件,比如对一些属性的修改,请求的发生和Session的发生等。
本篇文章涉及到的代码已经上传到了GitHub上,欢迎关注:)
- Java Server 理解与实践 —— Servlet Context,Filter以及Listener
- Java Server 理解与实践 —— 从Servlet开始
- context-param -> listener -> filter -> servlet
- java filter servlet listener
- Servlet、Filter、Listener深入理解
- Servlet、Filter、Listener深入理解
- Servlet、Filter、Listener深入理解
- Servlet、Filter、Listener深入理解
- filter,listener,context-param,servlet加载顺序
- context,listener,filter,servlet加载顺序
- context,listener,filter,servlet加载顺序
- context,listener,filter,servlet加载顺序
- context,listener,filter,servlet加载顺序
- Java中Filter、Servlet、Listener
- Java中Filter、Servlet、Listener
- Java的Listener、Filter、Servlet
- Listener、Filter、Servlet与Java Web项目初始化的工作
- java web servlet/filter/listener/interceptor区别与联系
- 一些经常会用到的原生JS方法
- 深入理解JVM笔记三
- Android 笔记之RecyclerView
- 深入理解JVM笔记四-虚拟机性能监控与故障处理工具
- json error: Use of overloaded operator [] is ambiguous
- Java Server 理解与实践 —— Servlet Context,Filter以及Listener
- 回溯法 批处理作业调度问题
- css清除浮动带来的负面影响
- COJ_2040_成群的触手(双向dp)
- 深入理解JVM笔记五-调优案例分析与实战
- 柚子解析
- SublimeText3+python完整开发环境搭建
- 深入理解JVM笔记五-调优案例分析与实战
- sublime text3安装CSS插件