1、什么是servlet
servlet是java servlet的简称,运行在服务器上的程序,它是客户端(browser,app)的请求和服务器上数据库之间的中间层。可以收集用户的输入或呈现用户需要的数据记录,还可以动态创建网页内容。
2、servlet架构
图1-1展示servlet在web应用中的位置
servlet的主要作用是交互式的展示或修改数据,生成动态web内容。根据图1-1可了解这个过程为:
a.客户端发送请求到服务器。
b.服务器将请求转发给servlet。
c.servlet生成相应内容(取决于客户端的请求)并将其传给服务器。
d.服务器将响应返回给客户端。
3、servlet生命周期
servlet的生命周期可分为三个阶段:
a.初始化阶段:请求到达web容器后,首先检查内存是否存在被请求对象。有,则直接使用。无,则调用init()方法初始化「仅调用一次」。
b.运行阶段:web容器生成代表http的servletRequest和servletResponse对象。将生成的对象作为参数传递给servlet的service()方法,然后由service方法取出请求调用{doGet、doPost、doHead、doPut、doTrace、doDelete、doOptions}等方法处理请求返回给客户端。
c.销毁阶段:servlet实例一般是在web容器停止或应用被移出时,才会调用destroy()方法进行销毁。
4、配置servlet
servlet要运行必须进行配置,通常有两种方式:
a.通过web容器的配置文件,例如tomcat的web.xml中的servlet和servlet-mapping标签具体配置相关参数。
b.通过在继承了httpServlet的类上添加@webServlet注解来实现。这种方式其实只是代替了xml的方式,在功能上并无亮点。
5、重要提示
*servlet对象是在用户第一次请求是被创建的。可以通过loadOnStartup配置创建时机。
*对于多次请求,服务器只会创建一个servlet实例对象。创建后常驻内存持续提供服务,直到destroy销毁。
*多线程情况下,不在servlet中使用成员变量、servletContext、httpSession存储数据。要使用局部变量和线程安全的类(Vector
、Hashtable
)等代替实例变量。访问外部数据要使用安全的同步方法。
*默认情况下,servlet容器都是单实例多线程方式处理客户端请求。具体有servlet容器的线程调度器分配worker thread 执行servlet的service()方法来处理客户端请求。