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

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

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

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

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

web.xml中的配置

  1. //配置web.xml代码
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <web-app>
  4. <!-- struts servlet begin -->
  5. <servlet>
  6. <servlet-name>struts</servlet-name>
  7. <servlet-class>cn.jbit.servlet.BaseServlet</servlet-class>
  8. <init-param>
  9. <param-name>config</param-name>
  10. <param-value>/WEB-INF/struts/struts-config.xml</param-value>
  11. </init-param>
  12. <load-on-startup>0</load-on-startup>
  13. </servlet>
  14. <servlet-mapping>
  15. <servlet-name>struts</servlet-name>
  16. <url-pattern>*.do</url-pattern>
  17. </servlet-mapping>
  18. <!-- struts servlet end -->
  19. </web-app>

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

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

  1. //Java代码
  2. package cn.jbit.filter;
  3.  
  4. import javax.servlet.FilterConfig;
  5. import javax.servlet.ServletException;
  6.  
  7. import org.apache.struts2.dispatcher.FilterDispatcher;
  8.  
  9. public class BaseFilterDispatcher extends FilterDispatcher {
  10.  
  11. @Override
  12. public void init(FilterConfig arg0) throws ServletException {
  13. super.init(arg0);
  14.  
  15. // 初始化系统全局变量
  16. // ...
  17.  
  18. // 加载自定义配置文件
  19. // ...
  20.  
  21. // 启动定时任务
  22. // ...
  23. }
  24. }

web.xml中的代码

  1. web.xml代码
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <web-app>
  4. <filter>
  5. <filter-name>struts2</filter-name>
  6. <filter-class>cn.jbit.filter.BaseFilterDispatcher</filter-class>
  7. </filter>
  8. <filter-mapping>
  9. <filter-name>struts2</filter-name>
  10. <url-pattern>/*</url-pattern>
  11. </filter-mapping>
  12. </web-app>

/**

*注意思考一个问题:

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

**/

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

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

  1. //Java代码
  2. package cn.jbit.listener;
  3.  
  4. import javax.servlet.ServletContextEvent;
  5. import javax.servlet.ServletContextListener;
  6.  
  7. public class InitListener implements ServletContextListener {
  8.  
  9. public void contextDestroyed(ServletContextEvent sce) {
  10. System.out.println("web exit ... ");
  11. }
  12.  
  13. public void contextInitialized(ServletContextEvent sce) {
  14. System.out.println("web init ... ");
  15. //系统的初始化工作
  16. // ...
  17. }
  18. }

web.xml配置

  1. web.xml代码
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <web-app>
  4. <listener>
  5. <listener-class>cn.jbit.listener.InitListener</listener-class>
  6. </listener>
  7. <filter>
  8. <filter-name>struts2</filter-name>
  9. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  10. </filter>
  11. <filter-mapping>
  12. <filter-name>struts2</filter-name>
  13. <url-pattern>/*</url-pattern>
  14. </filter-mapping>
  15. </web-app>

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

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

  1. 部署Eclipse中的Web项目到Tomcat服务器运行

    用Eclipse开发Web项目时,可以通过Tomcat服务器运行Web项目,此时Web项目被部署在[WorkSpace]\.metadata\.plugins\org.eclipse.wst.serv ...

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

    Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.Sess ...

  3. 在Tomcat中部署Web项目的操作方法,maven项目在Tomcat里登录首页报404

     maven项目在Tomcat里登录首页报404, 解决:编辑conf/server.xml进行配置<Host>里的<Context>标签里的path. <Context ...

  4. 在Eclipse中运行Web项目Jsp网页时提示端口被占用的解决办法:Several ports (8005, 8888, 8009) required by Tomcat v9.0 Server at localhost are already in use.

    问题: 在Eclipse中运行Web项目Jsp网页启动Tomcat时提示端口被占用: Several ports (8005, 8080, 8009) required by Tomcat v9.0 ...

  5. 在Tomcat中部署web项目的三种方式

    搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...

  6. 在Eclipse中修改web项目的名称

    在Eclipse中修改web项目的名称 一.误区: 单击要修改名称的项目上右键Refactor->Rename,然后修改成另外一个名称 (光这样是不够的,哪怕你再修改web.xml中的displ ...

  7. 5- 如何把MyEclipse中的web项目导入到Eclipse中运行

    from: 如何把MyEclipse中的web项目导入到Eclipse中运行 2016年09月12日 20:57:51 dancheren 阅读数:35329 标签: eclipse 更多 个人分类: ...

  8. 在Eclipse中调试web项目

    由于现在的公司用的是Eclipse开发web项目而且不安装MyEclipse插件,没有myclipse插件就不能在Eclipse中配置web服务器,所以也就不好对web项目进行调试.下面的方法就可以让 ...

  9. Eclipse中的Web项目自动部署到Tomcat的webapp目录下

    Eclipse中的Web项目自动部署到Tomcat   原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写 ...

随机推荐

  1. SC.UI

    IController using Microsoft.Practices.Prism.Events; using Microsoft.Practices.Prism.Regions; using M ...

  2. python除法

    1. >>> from __future__ import division >>> 2/3 0.6666666666666666 操作数为何种数值类型将影响结果 ...

  3. Gcc的编译流程分为了四个步骤:

    http://blog.csdn.net/xiaohouye/article/details/52084770(转) Gcc的编译流程分为了四个步骤: 1.预处理,生成预编译文件(.文件): Gcc ...

  4. 遗传算法在JobShop中的应用研究(part3:交叉)

    2.交叉 交叉是遗传算法中的一个重要操作,它的目的是从两条染色体中各自取出一部分来组合成一条新的染色体这里,在车间调度中一种常见的交叉方法叫Generalized Order Crossover方法( ...

  5. CentOS 7 最小化安装的网络配置

    默认的最小化安装CentOS 7系统以后,是没有ipconfig这个命令的,依赖于net-tools工具包. 一.nmtui 这是一个类似于图形化的命令(和setup类似) 通过这个组件窗口可以设置各 ...

  6. android 待机流程

    以下分析基于android2.2的google源码.  开机启动时,首先执行PhoneWindowManager.systemReady()(这之前的流程不分析).调用KeyguardViewMed ...

  7. 使用window.print实现网页打印

    Window.print()方法用于在浏览器中打印当前窗口的内容,如果想要打印当前窗口中指定部分的内容的话需要其他的一些特殊的处理; Demo: <html> <head> & ...

  8. [转载]【基础篇】不为人知的Maya移动坐标轴

    maya 设置轴向1.将整体模型方向调整到与世界坐标系一致.设置具体模型的轴朝向. 操作:选中模型,按住W键,鼠标左键,在弹出的菜单中选择Axis,比较常用的有Set To Ponit.Set To ...

  9. RLP编码

    RLP(Recursive Length Prefix, 递归长度前缀编码),是Ethereum中对象序列化的一个主要的编码方式,其目的是对任意嵌套的二进制数据的序列进行编码. RLP的目的仅仅是编码 ...

  10. git: No refs in common and none specified; doing no

    用gitolite新建项目,clone后首次push,可能会出现:     $ git push No refs in common and none specified; doing nothing ...