servlet

来源:互联网 发布:淘宝商标侵权申诉 编辑:程序博客网 时间:2024/05/13 21:55

Servlet是线程不安全的,一个特殊的Java类,它必须直接或间接实现Servlet接口,当多个浏览器终端请求web服务器的时候,Servlet容器通过调度线程(Dispatchaer Thread) 调度它管理下线程池中等待执行的线程(Worker Thread)给请求者

一、Servlet生命周期
Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。

init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。当用户第一次向服务器发送请求时,服务器根据请求内容寻找对应的Servlet对象,因为是第一次请求,因此不存在Servlet对象,需要实例化一个Servlet对象,实例化之后,调用init()初始化servlet对象。Servlet规范保证调用init方法前不会处理任何请求 。

service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。它会根据用户请求的方式调用具体的方法。如果请求方式是Get则调用doGet方法,如果请求方式是POST则调用doPost方法。doGet/doPost 是在HttpServlet 中实现的
destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
可以总结为:
web容器加载servlet,生命周期开始,调用init()方法初始化,然后service实现,根据请求不同调用doGet或doPost方法。结束服务,web容器调用destroy()方法


二 doGet 和doPost方法
当客户端发送HTTP请求使用get方法时就调用doGet()方法
当客户端发送HTTP请求使用post方法时就调用doPost()方法
Get请求用在表单和地址的输入,而post只用在表单的输入。
post 是吧数据写给服务端
get是通过传递参数 传递到服务端http:............../userServlet?method=login&name=zhangsan&password=123
doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的


三、GenericServlet和HttpServlet
GenericServlet是个抽象类,必须给出子类才能实例化。它给出了设计servlet的一些骨架,定义了servlet生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的,也就是说你有可能用非http协议实现它(其实目前Java Servlet还是只有Http一种)。
HttpServlet是子类,当然就具有GenericServlet的一切特性,还添加了doGet, doPost, doDelete, doPut, doTrace等方法对应处理http协议里的命令的请求响应过程。


0 0
原创粉丝点击