1、请写出Servlet的生命周期?
参考资料:http://book.51cto.com/art/200808/84955.htm
参考资料:http://wenku.baidu.com/view/a974b648852458fb770b56a3.html
学习笔记,转自:http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html
Servlet生命周期与工作原理
Servlet生命周期分为三个阶段:
1,初始化阶段 调用init()方法
2,响应客户请求阶段 调用service()方法
3,终止阶段 调用destroy()方法
Servlet初始化阶段:
在下列时刻Servlet容器装载Servlet:
1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:
<loadon-startup> 1 </loadon-startup>
|
2,在Servlet容器启动后,客户首次向Servlet发送请求
3,Servlet类文件被更新后,重新装载Servlet
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
Servlet工作原理:
首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。
每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。
Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。
public void service(ServletRequest req,ServletResponse res)
throws ServletException,IOException
{ HttpRequest request;
HttpResponse response;
try
{
req = (HttpRequest)request;
res = (HttpResponse)response;
} catch (ClassCastException e)
{
throw new ServletException( "non-HTTP request response" );
}
service(request,response);
} |
代码的最后调用了HTTPServlet自己的service(request,response)方法,然后根据请求去调用对应的doXXX方法,因为HttpServlet中的doXXX方法都是返回错误信息,
protected void doGet(HttpServletRequest res,HttpServletResponse resp)
throws ServletException,IOException
{ String protocol = req.getProtocol();
String msg = IStrings.getString( "http.method_get_not_supported" );
if (protocol.equals( "1.1" ))
{
resp.sendError(HttpServletResponse.SC.METHOD.NOT.ALLOWED,msg);
}
esle
{
resp.sendError(HttpServletResponse.SC_BAD_REQUEST,msg);
}
} |
所以需要我们在自定义的Servlet中override这些方法!
源码面前,了无秘密!
---------------------------------------------------------------------------------------------------------------------------------
Servlet响应请求阶段:
对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。
对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中,该Hashtable的定义是:
private Hashtable<String String[]> paramHashStringArray = new Hashtable<String String[]>();
|
这是一个String-->String[]的键值映射。
HashMap线程不安全的,Hashtable线程安全。
-----------------------------------------------------------------------------------------------------------------------------------
Servlet终止阶段:
当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。
-----------------------------------------------------------------------------------------------------------------------------------
Servlet何时被创建:
1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例。
2,当web.xml文件中如果<servlet>元素中指定了<load-on-startup>子元素时,Servlet容器在启动web服务器时,将按照顺序创建并初始化Servlet对象。
注意:在web.xml文件中,某些Servlet只有<serlvet>元素,没有<servlet-mapping>元素,这样我们无法通过url的方式访问这些Servlet,这种Servlet通常会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候自动加载这些Servlet并调用init()方法,完成一些全局性的初始化工作。
Web应用何时被启动:
1,当Servlet容器启动的时候,所有的Web应用都会被启动
2,控制器启动web应用
-----------------------------------------------------------------------------------------------------------------------------------------------
Servlet与JSP的比较:
有许多相似之处,都可以生成动态网页。
JSP的优点是擅长于网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。
Servlet是纯Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。
相关推荐
韩顺平老师的讲解通常会涵盖Servlet的生命周期、服务方法(service())、初始化(init())、销毁(destroy())等关键概念。他还会解释如何在web.xml中配置Servlet,以及doGet()和doPost()方法的区别。 4. **...
在Servlet生命周期的初始化阶段,会调用`init()`方法进行初始化操作,例如设置初始化参数。服务阶段,`doGet()`或`doPost()`方法会被调用来处理HTTP请求。这两个方法分别对应HTTP的GET和POST请求类型,通常在这里...
首先,我们需要理解Servlet的基本工作原理和生命周期,然后探讨如何创建和配置Servlet来提供JSON数据。 1. **Servlet基础**: - **Servlet定义**:Servlet是Java编程语言中的一个接口,由Java Servlet API提供,...
在手写Spring MVC时,我们需要实现一个容器来管理bean的生命周期,通过注解如`@Autowired`和`@Component`等来实现依赖注入。 在手写Spring MVC的过程中,我们需要实现以下几个关键步骤: 1. **初始化容器**:创建...
首先,我们需要了解Servlet的生命周期。Servlet在服务器启动时并不立即加载,而是在接收到第一个请求时进行初始化,创建Servlet实例。然后,每次有新的请求到达,服务器都会调用Servlet的`service()`方法来处理请求...
在本篇文章中,我们将深入探讨如何使用JavaWeb技术来编写Servlet,以及相关的知识点。...在实际开发过程中,不断学习和理解Servlet生命周期、线程安全、性能优化等方面的知识,将有助于提升你的编程技能和项目质量。
下面,我们将深入探讨Servlet的基本概念、生命周期、执行流程以及如何通过反编译源码来增强我们的理解。 首先,Servlet是一个Java类,它实现了Servlet接口或者ServletConfig接口。最基础的是javax.servlet.Servlet...
在Servlet生命周期中,它会经历初始化、服务和销毁三个阶段。初始化阶段,Servlet容器(如Tomcat)加载Servlet类,并调用`init()`方法进行配置;服务阶段,每当接收到一个HTTP请求,Servlet容器都会调用`service()`...
每个Servlet类都会覆盖`service()`方法,这是Servlet生命周期的核心,用于处理HTTP请求。 数据库部分,项目使用了Oracle,这是一个关系型数据库管理系统,广泛应用于大型企业级应用。在Servlet中与Oracle数据库交互...
2. **生命周期**:Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。初始化阶段通常会执行`init()`方法,服务阶段通过`service()`或`doGet()`/`doPost()`方法处理请求,最后在销毁时调用`destroy()`方法。 ...
Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。请求到达后,调用相应的方法处理请求。 1.7 常见错误及解决方式 常见错误包括配置错误、类路径问题、权限问题等。解决方式通常是检查web.xml配置,确保...
2. Servlet基础:了解Servlet生命周期,学习如何重写doGet和doPost方法来处理HTTP请求,以及如何在Servlet中转发请求到JSP页面。 3. 请求和响应处理:理解HttpServletRequest和HttpServletResponse接口,以及如何...
容器管理Servlet的生命周期,处理线程安全问题,提供配置和部署选项。在模拟中,我们需要自己实现类似的功能,比如Servlet实例的创建、初始化、服务以及销毁。 8. **多线程**:为了处理并发的客户端请求,服务器...
Servlet是Java类,继承自`javax.servlet.Servlet`或`javax.servlet.http.HttpServlet`,并重写其生命周期方法,如`init()`, `service()`, 和 `destroy()`。在HTTP请求到达时,Servlet容器(如Tomcat)会调用`service...
1. Servlet基础知识:了解Servlet的生命周期和HTTP请求处理。 2. HttpServlet的doGet和doPost方法:理解何时以及如何使用这两个方法。 3. 随机数生成:使用Java的Random类生成随机字符串。 4. 图像处理:利用Java的...
Servlet 的生命周期包括五个阶段: 1. 加载:在服务器端,ClassLoader 将 Java 程序加载成 class。 2. 实例化:创建一个实例对象。 3. 初始化:init 方法执行初始化。 4. 处理请求:各种方法,如 doGet 和 doPost。...
一个Javaservlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。Servlet的生命周期被javax.servlet.Servlet这个接口所定义。 所有的...
常见的Java Servlet容器如Tomcat或Jetty,它们支持Java Servlet规范,能托管Servlet类并管理它们的生命周期。部署Servlet时,需要将编译后的`.class`文件放入服务器的相应目录,并在`web.xml`配置文件中声明Servlet...
1. 生命周期:Servlet有三个主要阶段:加载、初始化和销毁。 2. doGet()与doPost():分别对应HTTP的GET和POST请求,用于处理客户端请求。 3. HttpServlet:Servlet的基类,提供了基本的HTTP请求处理方法。 三、Ajax...
2. JSP生命周期与Servlet生命周期: - JSP被首次请求时,会被转换为Servlet类(编译阶段),然后进行加载、实例化、初始化。后续请求会直接调用这个Servlet实例。 - Servlet的生命周期包括初始化、服务、销毁三个...