一 时刻1
Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的<Servlet></Servlet>之间添加如下代码
<loadon-startup>1</loadon-startup>
数字越小表示优先级别越高。
1 关键代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
<display-name></display-name>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>TestServlet1</servlet-name>
<servlet-class>servlet.TestServlet1</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>TestServlet2</servlet-name>
<servlet-class>servlet.TestServlet2</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet1</servlet-name>
<url-pattern>/servlet/TestServlet1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TestServlet2</servlet-name>
<url-pattern>/servlet/TestServlet2</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2 测试
TestServlet2构造方法被执行....
TestServlet2的初始化方法被执行....
TestServlet1构造方法被执行....
TestServlet1的初始化方法被执行....
二 时刻2
在Servlet容器启动后,客户首次向Servlet发送请求。
1 关键代码
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet1 extends HttpServlet {
/**
* Constructor of the object.
*/
public TestServlet1() {
System.out.println("TestServlet1构造方法被执行....");
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
System.out.println("TestServlet1销毁方法被执行....");
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("TestServlet1的doGet()方法被执行...");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("<h1>大家好,我是TestServlet1!</h1>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("TestServlet1的doPost()方法被执行...");
doGet(request,response); //让doPost()执行与doGet()相同的操作。
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
System.out.println("TestServlet1的初始化方法被执行....");
}
}
2 测试
TestServlet1构造方法被执行....
TestServlet1的初始化方法被执行....
TestServlet1的doGet()方法被执行...
九月 24, 2017 2:51:01 下午 org.apache.catalina.core.StandardServer await
信息: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
九月 24, 2017 2:51:01 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-apr-8888"]
九月 24, 2017 2:51:01 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-apr-8009"]
九月 24, 2017 2:51:01 下午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service Catalina
九月 24, 2017 2:51:02 下午 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextDestroyed()
九月 24, 2017 2:51:02 下午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextDestroyed()
TestServlet1销毁方法被执行....
三 时刻3
Servlet类文件被更新后,重新装载Servlet。
修改文件后,生成类文件时间发生变化
四 说明
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期,init()方法只被调用一次。
相关推荐
6. 装载Servlet:根据`web.xml`中的配置,Tomcat实例化Servlet类,并调用其`init()`方法进行初始化。 7. 服务器开始监听并处理请求:一旦启动完成,Tomcat就开始接受HTTP请求,将请求分发给相应的Servlet进行处理。 ...
当Web容器启动时,它会根据`web.xml`配置文件中的信息来装载Servlet。这个过程中,如果在`web.xml`中配置了`<load-on-startup>`元素,那么该Servlet将在服务器启动时自动装载。例如: ```xml <servlet> <servlet-...
Apache是一个卡车,可以装载静态网页等,而Tomcat是一个桶,可以装载JSP、Servlet等动态网页。如果我们想装载水(JSP、Servlet等),我们需要一个卡车(Apache)和一个桶(Tomcat)。 Apache和Tomcat的区别还可以...
4. **生命周期管理**:Tomcat通过`Lifecycle`接口和`LifeCycleListener`机制来管理Servlet的生命周期,包括装载、初始化、启动、停止和卸载等阶段。 5. **JSP编译**:Jasper会监控JSP文件的改动,自动重新编译。JSP...
1. 装载Servlet:容器根据需要动态加载Servlet,可能在服务器启动时完成。 2. 创建Servlet实例:每个Servlet只有一个实例,由容器负责创建。 3. 初始化:容器调用Servlet的init方法进行初始化。 4. 服务:当收到请求...
2. **容器(Containers)**:容器是Tomcat的核心,用于装载和管理Web应用程序。容器可以分为四个层次:Engine、Host、Context和Wrapper,分别对应整个服务器、虚拟主机、Web应用程序和具体的Servlet或JSP页面。 - ...
第二种方法是使用 ServletContext 类中的 getResourceAsStream() 方法,该方法允许在不重新加载 Web 程序的情况下升级文件。 2. 如何配置请求日志? 配置请求日志是 Tomcat 中的一项重要功能,可以通过在 context ...
#### 三、Tomcat源码价值 对于希望深入了解Tomcat内部机制或者定制化开发的开发者而言,研究其源码具有重要的意义: 1. **学习价值**:通过阅读Tomcat源码,可以系统地学习到Java语言在实际项目中的应用技巧,特别...
另外,当Servlet类文件被更新时,容器也会重新装载Servlet。在这一阶段,Servlet容器会创建Servlet的一个实例,并调用`init()`方法进行初始化。`init()`方法在整个Servlet生命周期中只被调用一次,通常用来进行一些...
- **NIO与APR**:Tomcat支持两种主要的连接器类型——NIO Connector和APR Connector。NIO Connector基于Java NIO库实现,而APR Connector则依赖于Apache Portable Runtime库,能够更好地利用操作系统特性,提高性能...
描述中提到的"可以装载dubbo-admin项目"表明Tomcat 7.0.75能够支持Dubbo管理控制台的部署和运行。Dubbo是一个高性能、轻量级的服务治理框架,广泛应用于分布式系统。Dubbo-admin是一个用于监控和管理Dubbo服务的Web...
`Context`负责装载Servlet和处理请求。 2. **Jasper**:JSP的处理涉及`org.apache.jasper.JspC`和`org.apache.jasper.compiler.Generator`类,它们负责将JSP转换为Servlet源代码,并通过`java.sun.net....
当Web容器启动时,根据配置文件(如web.xml),它会装载Servlet类并创建一个Servlet实例。初始化阶段,Servlet会执行`init()`方法,通常用于设置初始参数。在服务过程中,每当有新的请求到来,Web容器并不会每次都...
- 第一种形式定义于 `Servlet` 接口中并在 `GenericServlet` 类中实现,第二种形式则直接定义在 `GenericServlet` 类中。 - **初始化参数**:初始化参数用于向 Servlet 提供配置信息。可以通过 `ServletConfig` ...
Servlet与Servlet容器之间的关系可以类比为枪和子弹,Servlet是实现业务逻辑的“子弹”,而Servlet容器则是装载和发射这些“子弹”的“枪”。 Servlet容器的工作原理主要涉及以下几个关键点: 1. **Servlet容器...
2. **装载与初始化**:如果请求对应的Servlet尚未加载到内存中,Servlet容器会根据web.xml配置文件装载Servlet类并调用其`init()`方法进行初始化。 3. **请求处理**:Servlet容器将请求对象(`HttpServletRequest`)...
- **Servlet生命周期**:Servlet的生命周期由容器(如Tomcat)管理,包括装载Servlet类、实例化Servlet、初始化(调用`init()`)、处理请求(调用`service()`)、清理资源(调用`destroy()`)等阶段。 3. **...
- **Container**:是Tomcat的容器层次结构的一部分,用于装载和管理Web应用程序。它包括Engine、Host、Context和Wrapper等层次,分别对应服务器、虚拟主机、应用程序和Servlet实例。 - **Realm**:用于身份验证和...
Servlet是一种基于Java的服务器端应用程序,其设计目的是为了扩展Web服务器的功能,使得开发人员能够创建动态的、交互式的Web内容。Servlet是独立于平台和协议的,能够生成HTTP响应来回应客户端的请求。由于它们运行...