最近,peter xiao看了不少war包,但对于j2ee中重要知识点的系统性总结还从来没有进行过。为了应对之后企业面试的需要,关于基础性概念的整理与总结还是十分必要的。所以接下来笔者的几篇博客都将围绕Java web开发中的一些重点概念进行系统总结。
本篇博客主要对Java web的三大组件——servlet、过滤器和监听器进行一个较为详细的说明。
一、servlet
Servlet(Server Applet),全称Java Servlet,是用java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据,生成动态web内容。servlet作为一个中转处理的容器,他连接了客户端和服务器端的信息交互和处理,其大致过程是:客户端发送请求,传递到servlet容器,而servlet将数据转换成服务器端可以处理的数据,再发送给服务器端,经过数据处理之后,再传递到servlet容器,servlet再转译到客户端,最终完成一次客户端和服务器端的信息交互。
servlet的优势:
1.是MVC的基础,其他的框架比如struts1,struts2,webwork都是从servlet基础上进行发展
2.Servlet是一个Java的类,Java语言能够实现的功能,Servlet基本上都能实现,并且处理客户端传来的HTTP请求,并返回一个响应
3.具备可移植性、安全性、集成性、可扩展性和灵活性
servlet的开发流程:
1.编写一个java类,继承HttpServlet类
2.重写HttpServlet类的doGet方法和doPost方法
3.配置web.xml文件,或者使用注解对servlet进行配置
servlet的生命周期:参见第6个war包的讲解~
由于关于servlet的学习peter xiao也进展了很长一段时间,这里对于更细节的方面也就不多赘述了,下面将开始讲述过滤器与监听器的使用。
二、过滤器
在Java web中的过滤器,其作用是对于发送的请求进行过滤,其操作是对请求进行拦截,然后做相应的处理(选择拦截什么资源,放行什么资源)。过滤器可以有一个或者多个。多个过滤器是为了更好的分配每个过滤器的工作,程序会经过每一个过滤器,但不一定都会被拦截。
过滤器是一个filter接口,所以需要一个实现这个接口的类,可以在配置文件中完成配置,配置完成之后才会显示效果。
过滤器的四种拦截方式:
请求:REQUEST
转发(专门拦截转发):FORWARD
包含(专门拦截包含):INCLUDE
错误(专门拦截错误):ERROR
servletFilter中的dofilter方法:
doFilter()方法类似于Servlet接口的service()方法。当客户端请求目标资源的时候,容器就会调用与这个目标资源相关联的过滤器的 doFilter()方法。其中参数 request, response 为 web 容器或 Filter 链的上一个 Filter 传递过来的请求和相应对象;参数 chain 为代表当前 Filter 链的对象,在特定的操作完成后,可以调用 FilterChain 对象chain.doFilter(request,response)方法将请求交付给 Filter 链中的下一个 Filter 或者目标 Servlet 程序去处理,也可以直接向客户端返回响应信息,或者利用RequestDispatcher的forward()和include()方法,以及 HttpServletResponse的sendRedirect()方法将请求转向到其他资源。
多个Filter的执行顺序:
一般来说,Filter之间不会有关联,如果需要确定执行顺序,需要对配置文件进行修改,其顺序如下:
1.在web.xml中,filter执行顺序跟<filter-mapping>的顺序有关,先声明的先执行
2.使用注解配置的话,filter的执行顺序跟名称的字母顺序有关,例如AFilter会比BFilter先执行
3.如果既有在web.xml中声明的Filter,也有通过注解配置的Filter,那么会优先执行web.xml中配置的Filter
配置过滤器(Filter)拦截路径:本文在这里采用xml(修改配置文件)的方式来配置拦截路径,其具体操作和配置servlet类似,web.xml文件部分代码如下:
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.clucky.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器的生命周期:
初始化阶段:当服务器启动时,Tomcat就会读取配置文件,扫描注解,然后来创建我们的Filter。
拦截和过滤阶段:只要请求资源的路径和拦截的路径相同,那么过滤器就会对请求进行过滤,这个阶段在服务器运行过程中会一直循环。
销毁阶段:Tomcat关闭时,服务器创建的Filter也会随之销毁。
三、监听器
监听器的主要功能是监听web容器的有效事件,他由容器进行管理。其监听的事件有上下文事件、会话事件以及请求事件。
上下文事件:ServletContext对象的创建、删除和派加属性以及删除和修改操作
会话事件:监听http会话
请求事件:获取请求,统一处理请求
servlet3.0中的监听接口
作用域 | 实例对象 | 监听器 |
application | ServletContext | ServletContextListener |
session | HttpSession | HttpSessionListener |
request | HttpServletRequest | ServletRequestListener |
监听对象的监听器:
ServletContextListener:用于监听 ServletContext 对象的创建和销毁
HttpSessionListener:用于监听 HttpSession 对象的创建和销毁
ServletRequestListener:用于监听 ServletRequest 对象的创建和销毁
实现ServletContextListener监听器类,并进行配置
xml配置代码如下:
<listener>
<listener-class>pacakge.xx</listener-class>
</listener>
<context-param>
<param-name>ResourceLocation</param-name>
<param-value>\text.txt</param-value>
</context-param>
注解配置使用@WebListener进行配置即可。
总结:本篇博客是对于Java web三大组件的一次大致总结,对于其具体的运用,可能要在之后的war包学习和实战中才能更加深入地进行理解。
我们下一篇博客见,bye~