javaWEB总结(2): load-on-startup节点
来源:互联网 发布:安全的网络管理规范 编辑:程序博客网 时间:2024/06/03 16:57
在javaWEB总结(1)里面,我们创建了一个servlet以及它的映射,当我们访问那个映射地址的时候,就可以访问servlet,并且servlet容器调用了生命周期方法,销毁前调用destroy方法。而我们还可以有另外一种方法,让servlet在启动时便自动访问servlet,这就是web.xml中servlet标签中的load-on-startup,下面我们做个例子:
1.项目的目录结构如图所示
2.HelloServlet.java还是原来的那个类
package com.dao.chu;import java.io.IOException;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/** * * Title: HelloServlet * Description:实现Servlet接口的类 * </p> */public class HelloServlet implements Servlet {@Overridepublic void destroy() {System.out.println("destroy...");}@Overridepublic ServletConfig getServletConfig() {System.out.println("getServletConfig...");return null;}@Overridepublic String getServletInfo() {System.out.println("getServletInfo...");return null;}@Overridepublic void init(ServletConfig arg0) throws ServletException {System.out.println("init...");}@Overridepublic void service(ServletRequest arg0, ServletResponse arg1)throws ServletException, IOException {System.out.println("service...");}public HelloServlet() {System.out.println("HelloServlet's constructor..");}}
3.SecondHelloServlet,第二个实现Servlet接口的类
package com.dao.chu;import java.io.IOException;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/** * * Title: HelloServlet * Description:第二个实现Servlet接口的类 * </p> */public class SecondHelloServlet implements Servlet{@Overridepublic void destroy() {System.out.println("second destroy..");}@Overridepublic ServletConfig getServletConfig() {System.out.println("second getServletConfig..");return null;}@Overridepublic String getServletInfo() {System.out.println("second getServletInfo..");return null;}@Overridepublic void init(ServletConfig arg0) throws ServletException {System.out.println("second init..");}@Overridepublic void service(ServletRequest arg0, ServletResponse arg1)throws ServletException, IOException {System.out.println("second service..");}public SecondHelloServlet(){ System.out.println("SecondHelloServlet's constructor.."); }}
4.web.xml文件我们分几种情况去试验:
(1)第一次只是配置HelloServlet的load-on-startup节点,并把节点值设为0;
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 配置和映射servlet --> <servlet> <!-- servlet注册的名字 --> <servlet-name>helloServlet</servlet-name> <!-- servlet的全类名 --> <servlet-class>com.dao.chu.HelloServlet</servlet-class> <!-- load-on-startup节点 --> <load-on-startup>0</load-on-startup> </servlet></web-app>
最终显示结果:
由此可见,虽然我们没有配置HelloServlet的映射路径,但是tomcat启动后servlet自动就调用了HelloServlet的构造方法,和init方法。
(2)第二次我们添加配置ScondHelloServlet的load-on-startup节点,并把节点的值设为1.
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><!-- 配置和映射servlet --><!-- helloServlet --><servlet> <!-- servlet注册的名字 --> <servlet-name>helloServlet</servlet-name> <!-- servlet的全类名 --> <servlet-class>com.dao.chu.HelloServlet</servlet-class> <!-- load-on-startup节点 --> <load-on-startup>0</load-on-startup></servlet><!-- secondHelloServlet --><servlet> <!-- servlet注册的名字 --> <servlet-name>secondHelloServlet</servlet-name> <!-- servlet的全类名 --> <servlet-class>com.dao.chu.SecondHelloServlet</servlet-class> <!-- load-on-startup节点 --> <load-on-startup>1</load-on-startup></servlet></web-app>
最终显示结果:
说明先运行的是HelloServlet的构造器和init方法,然后再运行的是SecondHelloServlet的构造器和init方法。
(3)第三次我们把HelloServlet的load-on-startup节点设为-1,ScondHelloServlet的load-on-startup节点设为1不变.
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><!-- 配置和映射servlet --><!-- helloServlet --><servlet> <!-- servlet注册的名字 --> <servlet-name>helloServlet</servlet-name> <!-- servlet的全类名 --> <servlet-class>com.dao.chu.HelloServlet</servlet-class> <!-- load-on-startup节点 --> <load-on-startup>-1</load-on-startup></servlet><!-- secondHelloServlet --><servlet> <!-- servlet注册的名字 --> <servlet-name>secondHelloServlet</servlet-name> <!-- servlet的全类名 --> <servlet-class>com.dao.chu.SecondHelloServlet</servlet-class> <!-- load-on-startup节点 --> <load-on-startup>1</load-on-startup></servlet></web-app>
最终显示结果:
说明servlet只是自动调用了SecondHelloServlet的构造器和init方法。
(4)第四次我们把HelloServlet的load-on-startup节点设为-1,ScondHelloServlet的load-on-startup节点设为1不变,并且配置HelloServlet的映射路径。
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><!-- 配置和映射servlet --><!-- helloServlet --><servlet> <!-- servlet注册的名字 --> <servlet-name>helloServlet</servlet-name> <!-- servlet的全类名 --> <servlet-class>com.dao.chu.HelloServlet</servlet-class> <!-- load-on-startup节点 --> <load-on-startup>-1</load-on-startup></servlet><servlet-mapping> <!-- 需要和某一个servlet子节点的servlet-name 子节点的文本节点一致 --> <servlet-name>helloServlet</servlet-name> <!-- 映射的具体访问路径:/代表当前WEB应用的根目录 --> <url-pattern>/hello</url-pattern></servlet-mapping><!-- secondHelloServlet --><servlet> <!-- servlet注册的名字 --> <servlet-name>secondHelloServlet</servlet-name> <!-- servlet的全类名 --> <servlet-class>com.dao.chu.SecondHelloServlet</servlet-class> <!-- load-on-startup节点 --> <load-on-startup>1</load-on-startup></servlet></web-app>
最终结果:
运行完servlet后的结果和第三次相同只是输出了SecondHelloServlet的构造器方法和init方法,当我们访问配置的映射路径:http://localhost:7001/javaWeb_02/hello后,又打印除了HelloServlet的构造器方法,init方法和service方法。
总结:
1.load-on-startup可以指定Servlet被创建的时机;
2.若为负数:则在第一次访问时被创建(第三四次试验),若为0或者正数,则在当前WEB容器被加载时创建实例,且数值越小,越被优先创建(第一二次试验)。
为了尊重原作者,下面粘贴佟刚老师视频的地址:
点击打开链接
- javaWEB总结(2): load-on-startup节点
- javaWeb web.xml 中load-on-startup的含义
- load-on-startup作用
- load-on-startup标签
- load-on-startup作用
- load-on-startup
- load-on-startup含义
- load-on-startup 配置
- load-on-startup
- tomcat load-on-startup
- load-on-startup
- load-on-startup
- load-on-startup
- load-on-startup
- load-on-startup 解释
- <load-on-startup> 标签
- <load-on-startup>
- Servlet load-on-startup
- android笔记
- Redis之List 列表类型
- 一个形象展示浏览器事件冒泡与捕获过程的demo
- windows串口通信操作和代码实现
- (十八)java多线程之Callable Future
- javaWEB总结(2): load-on-startup节点
- 学习编程语言的个人体会
- 郝斌的C语言基础 039
- 69. 图像优化
- Android产品研发(十一)-->应用内跳转Scheme协议
- hihocoder 修补木桶
- 第6.5节 自引用结构,统计输入中所有单词的出现次数
- (十九)java多线程之ForkJoinPool
- Android Service完全解析,关于服务你所需知道的一切(上)