Global.asa在ASP下是实现站点的全局配置,在站点运行开始的时候自动运行,调用他的Application_Onstart方法。在站点关闭时调用application_onend方法。
在JSP中也有类似的功能,有两种实现和Global.asa相同功能的方法两种方法
1)Servlet自动启动法
2)建立服务器Application对象监听器
Servlet自启动法
自动启动
一般情况下,JSP只有在客户端第一次调用后,方才进行编译并初始化,而Servlet则可以通过web.xml的<load-on-startup>配置,使其在Web容器启动时自动初始化。可使用Servlet这个特性完成Web应用程序的初始化工作:如下载字典表、控制表、初始化配置信息等,启动某个后台进程等。
Servlet和JSP的一个重大的区别即是Servlet可以通过web.xml文件的配置让Servlet在Web容器启动时就自动启动Servlet。可以利用Servlet的这个特性不变化的数据事先加载到Web应用服务器中以便缓存使用。
所以我们可以使用servlet的这一特性来替代asp中的global.asa来完成全局变量的存储.
具体实现如下,新建一个标准的servlet(当然也可以是监视或过滤的).
package com.config;
定义所在包
import javax.servlet.*;
import javax.servlet.http.*;
导入所用的包,上面这两个是必需的.
剩下的是定义你的servlet类及其要继承的类.
如果是只想初始化的话,你可以只定义init()方法
public class globalListen extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GBK";
//Initialize global variables
public void init() throws ServletException {
getServletContext().setAttribute("aa","nn");//用init方法初始化变量并把他们保存在application对象里
}
Public void destroy() throws ServletException {
getServletContext().removeAttribute("aa");//在destory方法里可以除去对象
}
}
servlet类是建立起来了,下面配置web.xml.
web.xml是定义在web-inf文件夹下的配置文件,功能强大啊.
<servlet>
<servlet-name></servlet-name> servlet实例名
<servlet-class>包.classname</servlet-class> servlet类
<load-on-startup>1</load-on-startup> servlet启动顺序1为第一个启动
</servlet>
Servlet是包含HTML代码的Java程序,而JSP是包含Java代码的HTML网页。
下面是在glabal.asa中的对象和替换servlet(替换文件名为glabalListen.java)中的对比:
表B.1 global.asa和servlet中各元素对比
Glabal.asa | glabalListen.java |
基本变量dim(vbs),var(js) | Java的基本变量 |
Application对象 | 用getServletContext()取得application对象 |
Application(“要储存的变量名”)=值 | getServletContext().setAttribute(“name”,object) |
Application_Onstart函数 | Init()方法 |
Application_Onend函数 | Destory()方法 |
这个方法只能初始化application对象中的包含元素,不过如果你只想初始化application那这个就够了。要同时实现session对象的初始化就要用第二种方法。当然,也可以用第二种方法再建立一个针对session对象事件的监听器。
这种方法在前五个站点中使用,第六个站点农资与供求使用下面的方法
建立监听器
Servlet监听器
J2EE定义了多个Web事件监听器接口,Servlet监听器是继承javax.servlet.Servlet并实现这些事件监听接口的类。如果Web应用服务器对某个Web容器的事件感兴趣,就可以构造一个实现该事件监听接口的Servlet,以便在该事件发生时做相应的处理。灵活使用Servlet监听器,可以使一些原来很难实现的操作变得易如反掌。
可以使用JBuilder的应用程序向导生成一个Servlet监听器,如何生成这里就不介绍了,监听器其实是一个Java文件,它是ServletContextListener类的实现,并且继承至HttpServlet,其结构如下:
package ……
import ……
public class Listener8086 extends HttpServlet implements ServletContextListener {
public String …...
private ServletContext sctx;
//服务器启动时调用如下方法
public void contextInitialized(ServletContextEvent sce) {
//初始化服务器变量
String strServer = "172.16.1.214";
application.setAttribute("sitename", "呼和浩特市科技局");
application.setAttribute("chengban", "农资与供求");
application.setAttribute("uploadpath", "/upload");
System.out.println("8086服务器初始化完毕");
}
//服务器关闭时调用如下方法
public void contextDestroyed(ServletContextEvent sce) {
}
//会话开始的时候调用如下方法
public void sessionCreated(HttpSessionEvent se) {
}
//会话结束的时候调用如下方法
public void sessionDestroyed(HttpSessionEvent se) {
}
在监听器建立以后JBuilder会修改Web.xml文件,将会在其中加入类似如下的语句:
<listener>
<listener-class>com.config.Listener8086</listener-class>
</listener>
很清楚,上面代码的意思指出了这里有一个监听器,指向的是com.config.Listener8086类。
表B.2 global.asa和servlet中各元素对比
Glabal.asa | Listener8086.java |
Application_Onstart函数 | contextInitialized ()方法 |
Application_Onend函数 | contextDestroyed ()方法 |
Session_Onstart函数 | sessionCreated()方法 |
Session_Onend函数 | sessionDestroyed ()方法 |