Servlet是Java Web应用开发的核心技术,JSP及其他许多优秀的Web框架都是基于Servlet实现的。因此,在学习JSP技术之前,我们一起来揭开Servlet的神秘面纱,迈出学习JSP技术的第一步。
·Servlet(Java服务器端小程序)是用Java编写的与平台无关的服务器端组件。
·Servlet在Servlet容器(如Tomcat)中运行,其生命周期由容器管理。
·由于Servlet运行在服务器上,因此可以调用服务器端的很多资源。
·Servlet与客户采用“请求/响应”的模式进行通信。
·Servlet以多线程的方式处理客户的请求。
·在Web应用开发中,主要用到Servlet 的HttpServlet抽象类。
·HttpServlet通过两个对象(HttpServletRequest对象和HttpServletResponse对象)与客户进行交互。
·HttpServletRequest对象中封装了客户的请求信息,HttpServletResponse对象中封装了对客户的响应信息。
·Servlet通常用做控制器,根据不同的请求,经过加工处理后,将处理结果转发给其他组件。
·Servlet容器在启动加载Web应用时,为每个应用创建唯一的ServletContext。ServletContext是应用级的共享内存区,利用ServletContext可以在整个应用范围内共享某些数据。
·最后记得将自己编写的Servlet注册到web.xml配置文件中。
当Servlet被装载到容器中后,首先调用init()方法进行初始化,初始化后,调用service()方法处理客户请求,并将处理结果封装到HttpServletResponse中返回给客户。当Servlet实例从容器中移除时调用destroy()方法。
Servlet生命周期示意图及请求响应时序如图3-1 和图3-2所示。
图3-1 Servlet生命周期示意图
图3-2 Servlet请求响应时序图
HttpServlet是Servlet的抽象类,HttpServlet通过HttpServletRequest对象和HttpServlet Response对象与客户进行交互。其中HttpServletRequest对象负责封装存放HTTP请求信息,HttpServletResponse对象负责封装存放处理得到的响应结果。
另外,Servlet容器启动加载Web应用时,会为每个Web应用创建一个ServletContext对象用于存放整个Web应用的共享数据,因此,我们可以把ServletContext对象看成Web应用的共享内存区。
下面将HttpServletRequest、HttpServletResponse及ServletContext类的常用方法列表以供参考。
·HttpServletRequest的常用方法见表3-1。
表3-1 HttpServletRequest的常用方法
·HttpServletResponse的常用方法见表3-2。
表3-2 HttpServletResponse的常用方法
·ServletContext的常用方法见表3-3。
表3-3 ServletContext的常用方法
在Java Web应用开发中,创建HttpServlet一般遵循如下步骤。
(1)创建自己的类并继承HttpServlet。
(2)重载HttpServlet的doGet( )或doPost( )等方法。
(3)获取HTTP请求信息(如表单数据),进行业务逻辑处理。
(4)生成HTTP响应结果,以流形式输出到客户端浏览器或输出到磁盘文件。
(5)在web.xml配置文件中注册HttpServlet。
(6)启动Servlet容器进行测试。
下面以访问计数器为例(见图3-3)讲解HttpServlet的具体开发过程。本实例旨在演示HttpServlet如何将HttpServletRequest对象、HttpServletResponse对象及ServletContext对象有机结合,完成一次HTTP请求的响应处理。
图3-3 访问计数器实例逻辑模型图
从图3-3 可看出,用户通过填写index.html(见例程3-1)中的表单,提交后,Servlet容器将整个HTTP请求信息封装到一个HttpServletRequest对象中,传入MyServlet.java(见例程3-2),由MyServlet维护ServletContext对象中一个计数器count属性,最后将处理的响应结果封装到一个HttpServletResponse对象中,通过HttpServletResponse对象的PrintWriter输出流对象将响应结果输出到用户的浏览器上。
例程3-1 index.html
例程3-2 MyServlet.java
HttpServlet开发完以后,必须在web.xml中配置以后才能被用户通过浏览器访问,MyServlet在web.xml中的配置情况见例程3-3。
例程3-3 web.xml
本实例的运行效果如图3-4所示。
图3-4 访问计数器运行效果