1.Servlet的简介
(1).Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用"请求/响应"的模式
(2).Servlet容器响应客户请求的过程
image image.gif
2.Servlet的生命周期方法
(1).构造器:只被调用一次,只有第一次请求Servlet时,创建Servlet的实例,调用构造器,这说明Servlet是单实例的。
(2).init方法:只被调用一次,在创建好实例后立即被调用。用于初始化当前Servlet。
(3).service:被多次调用,每次请求都会调用service方法。实际用于响应请求的。
(4).destroy:只被调用一次,在当前Servlet所在的WEB应用被卸载前调用。用于释放当前Servlet所占用的资源。
3.Servlet容器响应客户服务器的过程
(1).Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第四步,否则,执行第二步。
(2).装载并创建该Servlet的一个实例对象:调用该Servlet的构造器。
(3).调用Servlet实例对象的init()方法。
(4).创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递过去。
(5).WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法
4.运行第一个Servlet程序
(1).新建一个Java类HelloServlet,用于实现Servlet,如下:
public class HelloServlet implements Servlet{
@Override
public void destroy() {
System.out.println("destroy....");
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
System.out.println("getServletConfig");
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
System.out.println("getServletInfo");
return null;
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
}
public HelloServlet() {
// TODO Auto-generated constructor stub
System.out.println("HelloServlet constructor");
}
}
(2).Servlet的注册和映射(配置在web.xml文件)
(a).Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问
(b).一个<servlet>元素用于注册一个Servlet,它包含有两个主要的子元素<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名
(c).一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径
<servlet>
<!-- Servlet注册的名字 -->
<servlet-name>helloServlet</servlet-name>
<!-- Servlet的全类名,指向某一个java类 -->
<servlet-class>com.one.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 需要和某一个Servlet节点的Servlet-name子节点的文本节点一致-->
<servlet-name>helloServlet</servlet-name>
<!-- 映射具体的访问路径:/代表当前WEB应用的根目录 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
image.gif
通过这样的配置后即可通过http://localhost:8080/Day_1/hello****来访问
5.关于web.xml配置中的load-on-startup参数
可以指定Servlet被创建的时机。
若为负数,则在第一次请求时被创建。
若为0或正数,则在当前WEB应用被Servlet容器加载时创建实例,如果有多个Servlet,则该数值越小,越早被创建。
<servlet>
<!-- Servlet注册的名字 -->
<servlet-name>helloServlet</servlet-name>
<!-- Servlet的全类名,指向某一个java类 -->
<servlet-class>com.one.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>secondServlet</servlet-name>
<servlet-class>com.one.SecondServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- 结果为com.one.HelloServlet先被加载 -->
image.gif
网友评论