Servlet基础
Servlet简介
Sun公司在其API(应用程序接口)中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下两个步骤:
1.编写好一个Java类,实现servlet接口。
2,把开发好的Java类部署到web服务器中。
Servlet的API
Servlet的框架是由两个Java包组成的:javax.servlet和javax.servlet.http。在javax.servlet包中定义了所有的Servlet类的都必须实现和扩展的通用接口和类。在javax.servlet.http包中定义了采用HTTP协议通信的HttpServlet类。
Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。在Servlet接口中定义了5个方法,其中3个方法代表了Servlet的生命周期:
1)init方法,负责初始化Servlet对象
2)service方法,负责响应客户的请求
3)destroy方法,但Servlet对象退出生命周期,负责释放占用的资源
Servlet的运行过程(生命周期)
1.浏览器根据用户的请求生成http请求消息,并将其发送给web容器。
2.web容器检查内存中是否存在负责处理当前请求的Servlet程序的实例对象,若不存在,则加载和创建该Servlet对象。
3.Web容器创建针对该次访问的请求对象(request)和响应对象(response)。请求对象中包含了HTTP的请求信息,从它里面可以获得HTTP请求信息的内容。响应对象用于封装将要回送给浏览器的HTTP响应消息,响应对象中的初始内容为空,但是以后可以调用它的各种方法来生产HTTP响应消息的各个部分。
4.Web容器调用Servlet的service(ServletRequest,request,ServletResponse,response)方法,并将请求对象和响应对象传递给该方法。
5.Servlet对象的service方法从请求对象中读取请求消息,并向响应对象中写入响应头和响应体信息。
6.Service方法执行完毕后返回 。
7.web容器从响应对象中读取响应信息。
8.web容器将响应信息发送给浏览器处理显示,一次请求响应过程完全结束,request和response变成垃圾,等待垃圾收集器将其彻底从内存中清除。
Servlet引擎调用Servlet程序
1.接收到访问某个Servlet的HTTP请求后,Servlet引擎首先检查是否已经装载并创建了该Servlet的实例对象。如果已经装载并创建了给Servlet的实例对象,Servlet引擎则直接执行第4步,否则执行第2步。
2,装载并创建Servlet的一个实例对象。
3.调用Servlet实例对象的init()方法,以便执行Servlet的一些初始化工作。
4.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法,并将请求和响应对象作为参数传递出去。
5.在一个web应用程序被停止或重新启动之前,Servlet引擎将卸载其中运行的Servlet。在卸载Servlet之前,Servlet引擎将调用Servlet的destrory()方法,以便在这个方法中执行Servlet的一些清尾工作,例如释放一些被该Servlet占用的资源。
Servlet的特别说明
1.在servlet的整个生命周期内,Servlet只被初始化一次,而对一个Servlet的每次访问请求都将导致servlet引擎调用一次servlet的service()方法,而init()方法只被调用一次,service()方法可能被调用多次。
2.Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行。
3.Servlet引擎是一种容器程序,它负责管理和维护所有Servlet对象的生命周期,因此也被称为Servlet容器或web容器
4.Servlet的运行完全由Servlet引擎来控制和调度。
HttpServlet类中的doXXX方法
1.doGet:用于处理GET请求
2.doPost:用于处理POST请求
3.doHead:用于处理Head请求
4.doPut:用于处理PUT请求
5.doDelete:用于处理DELETE请求
6.doOptions:用于处理OPTIONS请求
7.doTrace:用于处理TRACE请求
注意:HttpServlet中的doXXX方法分别用于对客户端的相应请求方式进行处理,对某种多几种请求方式处理,只须覆盖相应的doXXX方法,而不需要覆盖service方法,在一般情况下Servlet只须处理GET和POST请求方式
eclipse中配置虚拟目录映射
<!-- 配置servlet -->
<servlet>
<servlet-name>RequestDemo4</servlet-name>
<servlet-class>wyr.Demo4</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RequestDemo4</servlet-name>
<url-pattern>/requestDemo4</url-pattern>
</servlet-mapping>