javaweb三大组件Servlet Filter Listenser
一直使用框架进行开发web开发,每次配置都是固定,一直没有时间钻研其中的深层含义。今天有时间就好好总结一下关于Javaweb三大组件(servlet, filter, listenser).
1 Servlet
使用:一般我们自定义的servlet类继承于 HTTPServlet 并且重写其中的doGet 以及 doPost方法。
层级关系:DemoServlet extends (Abstract)HttpServlet extends (Abstract)GenericServlet implements (interface)Servlet
作用:servlet是用于客户端请求获取服务端的动态资源。通俗点说,就是,我们在浏览器上键入url回车后,这个请求就会被我们的servlet拦截,进行处理。
主要用于:
* 接受请求数据:我们的请求最终都被包装成HttpServletRequest对象,其中,包含了请求体,一些参数等等...
* 处理客户端请求:通常是用doGet、doPost中处理,调用service(业务层)中的方法来处理请求。
* 完成响应:处理完请求之后,我们将用forward(转发)(HttpServletRequst中的方法) 或者redirect(重定向)(HttpServletResponse)
servlet生命周期:
默认第一次请求来的时候,服务器创建servlet的对象,且调用init方法实现初始化操作,且调用一次service方法,每当请求来的时候,服务器获取一个线程,调用service方法,完成具体的业务逻辑(编写的代码)当servlet被移除的时候或者服务器正常关闭的时候,服务器调用destroy方法实现销毁操作。
servlet接口方法(即常接触的方法):
//初始化方法
void init(ServletConfig config){}
//服务方法
void service(ServletRequest request,ServletResponse response){}
//销毁方法
void destroy(){}
//获取当前servlet的配置对象(即WEB-INF目录下的web.xml中的servlet标签里面的信息)
ServletConfig getServletConfig(){}
//获取当前servlet的信息
String getServletInfo(){}
通常servlet配置:
//映射servlet
<servlet>
<servlet-name>LoginServlet</servlet-name>
//创建项目的全限定名(即包名+类名)
<servlet-class>com.demo.web.servlet.LoginServlet</servlet-class>
</servlet>
//绑定映射
<servlet-mapping>
//上下 servlet-name 需保持一致
<servlet-name>LoginServlet</servlet-name>
//拦截的请求名称
<url-pattern>/login</url-pattern>
</servlet-mapping>
url-pattern的配置:
* 完全匹配 以"/"开始 例如 : /aa/bb /hello /aa 目前使用这种方式
* 目录匹配 以"/"开始 例如 : 以"/"开始 以"*"结束 例如: /aa/* /*
* 后缀名匹配 以"/"开始 例如 : 以" * "开始 例如: *.jsp *.action *.do
* 优先级 : 完全匹配 > 目录匹配 > 后缀名匹配
2 Filter
filter与servlet很类似,有相同的生命周期方法,配置也非常类似。只不过servlet是负责处理客户端过来的请求,filter则是对这些请求进行拦截以及放行。(通俗的例子:地铁站进站口,出站口就是相当于filter的角色)。
filter的配置:
<filter>
<display-name>DemoFilter</display-name>
<filter-name>DemoFilter</filter-name>
<filter-class>com.demo.filter.DemoFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DemoFilter</filter-name>
<url-pattern>/demo</url-pattern>
</filter-mapping>
主要看一下filter-mapping中的字标签:
* servlet-name:指定具体过滤哪个servlet
* dispatcher:指定过滤哪种方式过来的请求
** REQUEST:默认值,只过滤 从浏览器发送过来的请求
** FORWARD:只过滤转发过来的请求
** INCLUDE:只过滤包含过来的请求
** ERROR:只过滤错误过来的请求
用途:
1) 统一编码
2) 过滤一些特殊符号或者敏感词
3) 用来配置全局的统一错误页面
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
3 Listenser
概念:监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。
作用:监听javaweb的三个对象,ServletContext,ServletRequest,HttpSession
ServletContextListener (监听Application)
* 创建 服务器启动的时候 会为每一个项目创建一个
* 销毁 项目移除的的时候,或者服务器关闭的时候
void contextInitialized(ServletContextEvent sce):创建Servletcontext时
void contextDestroyed(ServletContextEvent sce):销毁Servletcontext时
ServletRequestListener(监听Request)
* 创建 请求来的时候
* 销毁 生成响应的时候
voidrequestInitialized(ServletRequestEvent sre):创建request时
void requestDestroyed(ServletRequestEvent sre):销毁request时
HttpSessionListener (监听Session)
创建:
1. java中,认为第一次调用request.getSession() 2. jsp中,认为第一次访问jsp页面的时候
销毁:
1.服务器非正常关闭 2.超时 3.手动销毁
voidsessionCreated(HttpSessionEvent se):创建session时
void sessionDestroyed(HttpSessionEvent se):销毁session时
ServletContextAttributeListener
void attributeAdded(ServletContextAttributeEvent event):添加属性时;
void attributeReplaced(ServletContextAttributeEvent event):替换属性时;
void attributeRemoved(ServletContextAttributeEvent event):移除属性时;
ServletRequestAttributeListener
voidattributeAdded(ServletRequestAttributeEvent srae):添加属性时
void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时
HttpSessionAttributeListener
void attributeAdded(HttpSessionBindingEvent event):添加属性时;
void attributeReplaced(HttpSessionBindingEvent event):替换属性时
void attributeRemoved(HttpSessionBindingEvent event):移除属性时
配置:
<listener>
<listener-class>com.demo.servletcontext.ServletContextListener</listener-class>
</listener>
推荐阅读
-
JavaWeb三大核心组件 - Servlet、Filter、Listener
-
JavaWeb三大组件——Filter & Listener
-
javaweb三大组件Servlet Filter Listenser
-
JavaWeb三大组件之Filter
-
JavaWeb三大组件(Servlet、Filter、Listener)
-
Syong : JavaWeb三大组件Servlet,Filter,Listener
-
Servlet笔记 —— JavaWeb三大组件 Servlet,Filter,Listener
-
JavaWeb三大组件(Servlet、Filter、Listener)
-
JavaWeb--Servlet过滤器Filter和SpringMVC的HandlerInterceptor(Session和Cookie登录认证)
-
JavaWeb Servlet中Filter过滤器的详解