Struts2中实现Web项目的初始化工作

Struts2中实现Web项目的初始化工作

注:通常web系统在启动时需要做一些初始化的工作,比如初始化系统全局变量,加载自定义配置文件,启动定时任务等。 

一、在Struts中实现系统的初始化工作

在Struts中,我们可以写一个Servlet让它继承于ActionServlet并覆 盖其init()方法,然后修改web.xml文件的Struts启动相关配置来达到目的。

 //Java代码
 2 package cn.jbit.servlet;
 3
 4 import javax.servlet.ServletException;
 5 import org.apache.struts.action.ActionServlet;
 6
 7 /**
 8  * 系统唯一的Servlet类BaseServlet
 9  * 完成系统初始化的工作
10  */
11 public class BaseServlet extends ActionServlet {
12
13     private static final long serialVersionUID = -4743066925691800288L;
14
15     @Override
16     /*
17      * 系 统初始化
18      */
19     public void init() throws ServletException {
20         super.init();
21
22         // 初始化系统全局变量
23         // ...
24
25         // 加载自定义配置文件
26         // ...
27
28         // 启动定时任务
29         // ...
30     }
31
32 }  

web.xml中的配置

//配置web.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <!-- struts servlet begin -->
  <servlet>
    <servlet-name>struts</servlet-name>
    <servlet-class>cn.jbit.servlet.BaseServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>struts</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- struts servlet end -->
</web-app>    

二、在Struts2中实现系统的初始化工作

在Struts2中,我们可以写一个filter让它继承于FilterDispatcher并覆盖其 init()方法,然后修改web.xml文件的Struts2启动相关配置来达到目的。

//Java代码
package cn.jbit.filter;    

import javax.servlet.FilterConfig;
import javax.servlet.ServletException;    

import org.apache.struts2.dispatcher.FilterDispatcher;    

public class BaseFilterDispatcher extends FilterDispatcher {    

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        super.init(arg0);    

        // 初始化系统全局变量
        // ...    

        // 加载自定义配置文件
        // ...    

        // 启动定时任务
        // ...
    }
}  

web.xml中的代码

web.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>cn.jbit.filter.BaseFilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>  

/**

*注意思考一个问题:

*不管是Struts、Struts2还是其他的web层框架,它们目前基于的技术都是 Servlet,只要根据web.xml找到那个启动类,我们就能通过覆盖该类的的init()方法来实现系*统的初始化工作。

**/

三、比较优雅的实现系统的初始化工作

以上的实现方式都侵入了框架的原生类,利用Servlet 容器的特性我们可以更优雅的实现系统的初始化工作。 我们可以写一个listener让它实现ServletContextListener接口,在contextInitialized()方法中做 想做的事情。将此listener配置到web.xml中,Servlet容器如tomcat会在启动该web应用程序时调用此方法。

//Java代码
package cn.jbit.listener;    

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;    

public class InitListener implements ServletContextListener {    

    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("web exit ... ");
    }    

    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("web init ... ");
        //系统的初始化工作
        // ...
    }
}   

web.xml配置

web.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <listener>
    <listener-class>cn.jbit.listener.InitListener</listener-class>
  </listener>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>   

以上根据平时的代码留下笔记。

时间: 2024-11-09 03:35:44

Struts2中实现Web项目的初始化工作的相关文章

struts2中取得web项目的根目录

struts2中取得web项目的根目录 /** * 获得web项目根目录 */ public String getWebRootPath() throws Exception { ActionContext actionContext = ActionContext.getContext(); ServletContext servletContext = (ServletContext)actionContext.get(ServletActionContext.SERVLET_CONTEXT

在eclipse中调试web项目的时候如何把web项目分配给配置好的服务器

举个例子,我今天在做spring和struts2整合的例子 新建项目blk 1.配置好web.xml,struts.xml,applicationContext.xml,写好jsp页面 2.把struts2.spring整合需要的jar包(struts核心jar包,spring核心jar包以及struts-spring-plugin.jar.commons-logging.jar)放到你项目的WEB-INF/lib目录下 3.写好java代码,并把java代码编译后的class文件拷贝到WEB-

Linux服务器上的tomcat中部署web项目

首先了解一下下面几个概念,讲得不太准确: 1.JVM JVM是class以及jar(实际上就是很多个class压缩在一起)的运行环境,特征就是java和javaw命令,通过这两个命令,你可以执行class和jar文件.你可以通过-classpath参数指定你需要加载的jar文件 2.JDK JDK就是JAVA的命令行开发环境,内置了JVM,特征就是javac命令,这个命令允许你将.java源文件批量或者单个编译成.class文件,从而可以通过JVM的java命令执行.在编译时你可以通过-clas

MyEclipse中添加web项目到tomcat

如果导入不是在MyEclipse下建立的web项目,想添加到tomcat中时,会显示"No projects are available for deployment to this server...............".其实可以简单地修改两个配置文件: .project文件:在natures节点中添加webnature <natures> <nature>com.genuitec.eclipse.j2eedt.core.webnature</na

在eclipse中创建web项目

如何创建dynamic web project项目 本文的演示是从本地文件创建dynamic web project,从svn检出的同时创建dynamic web project于此类似.我们推荐使用解压版的tomcat6.x版本,来作为服务器.可以到http://tomcat.apache.org 下载. 在创建动态web项目之前,我们先创建一个Server用于在eclipse里运行和调试web项目. 创建一个Server 创建Server是为了方便在eclipse里启动和调试dynamic

Struts2中访问web元素的四种方式

Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的request.session.application对象(IoC方式). 通过ServletActionContext来访问Servlet API类型的HttpServletRequest. HttpSession. Serv

将Eclipse中的Web项目部署到Tomcat与修改Tomcat服务器Server Locations

1.将Eclipse中的Web项目部署到Tomcat 记得开始学习JavaWeb的时候,首先用的是Eclipse开发,但是有一个问题始终没有弄明白,做好的Web项目是如何发布到Tomcat服务器上的呢?最后得到了一个结论,那就是Eclipse这个软件可能是将项目发布到了一个临时的目录,只有打开Eclipse的时候,启动服务器才能运行Web项目.也正是因为这个原因,一直用的都是MyEclipse开发Java Web项目(十分的方便和顺手).这几天用的比较多,因此又对这个问题产生了兴趣,能不能将做好

在Eclipse中修改web项目的名称

在Eclipse中修改web项目的名称 一.误区: 单击要修改名称的项目上右键Refactor->Rename,然后修改成另外一个名称 (光这样是不够的,哪怕你再修改web.xml中的display-name的值) 二.正确改法: 1.单击要修改名称的项目上右键Refactor->Rename,然后修改成另外一个名称 2.单击要修改名称的项目上右键Properties->Web Context Setting->设置新名称->Apply->OK 3.修改该项目源码中的.

Struts2中获取Web元素request、session、application对象的四种方式

我们在学习web编程的时候,一般都是通过requet.session.application(servletcontext)进行一系列相关的操作,request.session.和application他们都是web开发最常用和最实用的对象,有了它们可以大大方便开发人员进行开发和操作.但是在struts2中,基本都是action,这些个方法都是没有requet.session.application,所以如何获取这几个常用对象,也成了大家都比较关注的问题,下面我就来演示下,如何在struts2中