servlet配置load-on-startup的作用

在servlet的配置当中,<load-on-startup>1</load-on-startup>的含义是:

标记容器是否在启动的时候就加载这个servlet。

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

正数的值越小,启动该servlet的优先级越高。

  如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定servlet的加载顺序,服务器会根据load-on-startup的大小依次对servlet进行初始化。不过即使我们将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序。


配置load-on-startup后,servlet在startup后立即加载,但只是调用servlet的init()方法,用以初始化该servlet相关的资源。初始化成功后,该servlet可响应web请求;如未配置load-on-startup,容器一般在第一次响应web请求时,会先检测该servlet是否初始化,如未初始化,则调用servlet的init()先初始化,初始化成功后,再响应请求。

PS:一般我们在开发web应用时,都会配置这个参数,有两个好处:1、如果初始化过程失败,则容器会提示启动失败,此时我们能够提前知道相关错误;2、配置该参数相当于将初始化servlet的工作转移到容器启动过程,使得容器只要启动成功后,就可立即响应web请求。

示例:判断是否连接网络

1、web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.     <servlet-name>OfflineTest</servlet-name>  
  9.     <servlet-class>com.offline.OfflineTest</servlet-class>  
  10.     <load-on-startup>1</load-on-startup>  
  11.   </servlet>  
  12.   
  13. <!--如果页面不请求, 可以注释这段  
  14.   <servlet-mapping>  
  15.     <servlet-name>OfflineTest</servlet-name>  
  16.     <url-pattern>/OfflineTest</url-pattern>  
  17.   </servlet-mapping>  
  18.   -->   
  19.   <welcome-file-list>  
  20.     <welcome-file>index.jsp</welcome-file>  
  21.   </welcome-file-list>  
  22. </web-app>  

2、Servlet

  1. package com.offline;  
  2.   
  3. import java.io.BufferedReader;  
  4.   
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.InputStreamReader;  
  8.   
  9. import javax.servlet.ServletContext;  
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.http.HttpServlet;  
  12.   
  13. /** 
  14.  * 判断是否连接网络 
  15.  * @author Coco 
  16.  * 
  17.  */  
  18. public class OfflineTest extends HttpServlet {  
  19.     private static final long serialVersionUID = 1194662230797153372L;  
  20.   
  21.     public void init() throws ServletException {  
  22.         boolean bool = pingLink();  
  23.         // 取得Application对象  
  24.         ServletContext application = this.getServletContext();  
  25.         // 设置Application属性  
  26.         application.setAttribute("bool", bool);  
  27.     }  
  28.       
  29.     public boolean pingLink(){  
  30.         boolean bool = true;  
  31.         Runtime runtime = Runtime.getRuntime(); // 获取当前程序的运行进对象  
  32.           Process process = null// 声明处理类对象  
  33.           String line = null// 返回行信息  
  34.           InputStream is = null// 输入流  
  35.           InputStreamReader isr = null// 字节流  
  36.           BufferedReader br = null;  
  37.           String ip = "www.baidu.com";  
  38.           boolean res = false;// 结果  
  39.           try {  
  40.            process = runtime.exec("ping " + ip); // PING  
  41.            is = process.getInputStream(); // 实例化输入流  
  42.            isr = new InputStreamReader(is);// 把输入流转换成字节流  
  43.            br = new BufferedReader(isr);// 从字节中读取文本  
  44.            while ((line = br.readLine()) != null) {  
  45.             if (line.contains("TTL")) {  
  46.              res = true;  
  47.              break;  
  48.             }  
  49.            }  
  50.            is.close();  
  51.            isr.close();  
  52.            br.close();  
  53.            if (res) {  
  54. //             Log.print("ping www.baidu.com通...已经连接外网");  
  55.            } else {  
  56.                bool = false;  
  57. //             Log.print("ping www.baidu.com不通...无法连接外网");  
  58.            }  
  59.           } catch (IOException e) {  
  60. //            Log.print(e.getMessage());  
  61.           }  
  62.           return bool;  
  63.     }  
  64.   
  65. }  

3、index.html

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.     <base href="<%=basePath%>">  
  10.     <title>判断是否连接网络</title>  
  11.     <meta http-equiv="pragma" content="no-cache">  
  12.     <meta http-equiv="cache-control" content="no-cache">  
  13.     <meta http-equiv="expires" content="0">      
  14.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  15.     <meta http-equiv="description" content="This is my page">  
  16.   </head>  
  17.   <body>  
  18.   <%=application.getAttribute("bool") %><br/>  
  19.   或者<%=getServletContext().getAttribute("bool") %><br/>  
  20.    
  21.  实际应用中:比如有网络就加载一个页面 ,引用jquery  
  22.  <div id="share_plus"></div>  
  23. <script type="text/javascript">  
  24. var network = '<%=application.getAttribute("bool") %>';  
  25. if(network == true){  
  26.     $.get("/common/common_share.html",function(data){  
  27.      $("#share_plus").html(data);  
  28.     });  
  29. }  
  30. </script>  
  31.   </body>  
  32. </html> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值