Servlet是一种独立于操作系统平台和网络传输协议的服务器端的Java应用程序。
相同点:
1. 不是独立的应用程序,没有main()方法。
2. 不是由用户调用,由另一个应用程序(容器)调用。
3. 都有一个生存周期, 包含init()和destory()方法。
不同点:
1. Applet运行于客户端,有丰富的图形化界面;Servlet运行于服务器端,没有图形界面。
2. Applet为了实现浏览器与客户的强大交互;Servlet用于扩展服务器端的功能,实现复杂的业务逻辑。
Servlet工作流程
-------------------------------------------------------------------------------------------
-----------------------------------------------------------
1. 客户端将请求发送到服务器
2. 服务器上的Web容器实例化(装入)Servlet,并为Servlet进程创建线程。
(Servlet在出现第一个请求时装入,在服务器关闭之前不会卸载;Servlet也可配置为在Web应用程序启动时自动装载)
3. Web容器将请求信息发送到Servlet
4. Servlet创建一个响应,并返回到Web容器。
(Servlet使用客户端中请求信息及服务器可访问资源等来动态构造响应)
5. Web容器返回响应到客户端
Servlet装入和初始化:
Servlet调用init()方法执行初始化,init()方法只在Servlet创建时被调用,init()有二个版本:一个没有参数,一个以ServletConfig对象为参数。
调用Servlet
每个Servlet都对应一个URL地址,可以作为显式URL引用调用,或嵌入在HTML中并从Web应用程序返回。
对于每个Web应用,都可以存在一个配置文件web.xml,存放关于Servlet的名称、对应的Java类文件、URL地址映射等信息。自JavaEE6后,JavaEE规范推荐使用注解来配置Web组件。
处理请求
Web容器收到请求后,Web容器会产生一个新的线程来调用Servlet的service(),service()方法检查HTTP请求类型(GET、POST、PUT、DELETE等),然后相应调用doGet()、doPost()、doPut()、doDelete()等方法。
GET请求类型与POST请求类型:GET请求方式传输所带参数附加在URL后直接传给服务器,并可从服务器端的QUERY STRING环境变量中读取;POST请求方式传输所带参数被打包在数据包中传送到服务器。
多个请求
一个Servlet同一时刻只有一个实例。
当多个请求发送到同一个Servlet,服务器会为每个请求创建一个新线程来处理。
注解
@WebServlet(name=“ServletName”, urlPatterns={“/ServletURL”})
会话跟踪
Cookie
URL重写
HttpSession对象
Servlet上下文-ServletContext
request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。
Servlet间协作-RequestDispatcher
HttpServletResponse.sendRedirect()与RequestDispatcher.forward()
操作本质上,RequestDispatcher.forward()是容器中控制权转向,在客户端浏览器的地址栏不会显示转向后地址;HttpServletResponse.sendRedirect()则是完全跳转,浏览器将得到跳转后地址,并重新发送请求连接。
性能上,RequestDispatcher.forward()是在同一次请求处理过程中,HttpServletResponse.sendRedirect()是结束第一次请求,由浏览器重新发起一次请求。
拦截器-Filter
Filter拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。Filer可以改变一个请求(Request)或修改响应(Response)。在Servlet处理请求之前,与此Servlet关联的Filter首先执行,然后才是Servlet执行;如果一个Servlet有多个Filter,则根据配置的先后次序依次执行。
主要用途
- 访问特定资源(Web页、JSP页、Servlet)时身份验证
- 访问资源记录跟踪
- 访问资源转换
1必须实现三个方法
- doFilter(ServletRequest,ServletResponse,FilterChain)
- init(FilterConfig)
- destroy()
两种映射模式
- URL模式映射
- 默认映射
注解
@WebFilter(filterName=”FilterName” ,urlPatterns={“/ServletURL”})
配置文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
2监听器-Listener
Listener用来主动监听Web容器事件。所谓Web容器事件指Web应用上下文创建销毁、会话对象创建销毁以及会话属性信息增删改等。
Servlet规范中支持的Listener接口和Event类
- ServletContextListener(ServletContextEvent)
- ServletContextAttributeListener(ServletContextAttributeEvent)
- HttpSessionListener(HttpSessionEvent)
- HttpSessionActivationListener(HttpSessionEvent)
- HttpSessionAttributeListener(HttpSessionBindingEvent)
- HttpSessionBindingListener(HttpSessionBindingEvent)
- ServletRequestListener(ServletRequestEvent)
- ServletRequestAttributeListener(ServletRequestAttributeEvent)
- javax.servlet.AsyncListener(asyncEvent)
除了HttpSessionBindingListener接口和AsyncListener接口外,其他所有关于Listener的配置信息都存储在Web应用的部置文件中。