- 浏览: 220741 次
- 性别:
- 来自: 深圳
最新评论
-
xqying90:
啥子哟~
div屏幕居中的方法 -
ydc919:
JavaBeansDataExchange could not instantiate result class -
yongtree:
也太不全了啊,js呢
jquery选中单选框、复选框、下拉框 -
awindbird:
希望好用。
android ERROR: unknown virtual device name -
fangwei:
xgj1988 写道 有何高见
div屏幕居中的方法
本文所讨论的话题
通常web系统在启动时需要做一些初始化的工作,比如初始化系统全局变量,加载自定义配置文件,启动定时任务等。
在Struts中实现系统的初始化工作
在Struts中,我们可以写一个Servlet让它继承于ActionServlet并覆盖其init()方法,然后修改web.xml文件的Struts启动相关配置来达到目的。
package fangwei.servlet; import javax.servlet.ServletException; import org.apache.struts.action.ActionServlet; /** * 系统唯一的Servlet类BaseServlet<br> * 完成系统初始化的工作 */ public class BaseServlet extends ActionServlet { private static final long serialVersionUID = -4743066925691800288L; @Override /* * 系统初始化 */ public void init() throws ServletException { super.init(); // 初始化系统全局变量 // ... // 加载自定义配置文件 // ... // 启动定时任务 // ... } }
<?xml version="1.0" encoding="UTF-8"?> <web-app> <!-- struts servlet begin --> <servlet> <servlet-name>struts</servlet-name> <servlet-class>fangwei.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中实现系统的初始化工作
在Struts2中,我们可以写一个filter让它继承于FilterDispatcher并覆盖其init()方法,然后修改web.xml文件的Struts2启动相关配置来达到目的。
package fangwei.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); // 初始化系统全局变量 // ... // 加载自定义配置文件 // ... // 启动定时任务 // ... } }
<?xml version="1.0" encoding="UTF-8"?> <web-app> <filter> <filter-name>struts2</filter-name> <filter-class>fangwei.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应用程序时调用此方法。
package fangwei.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 ... "); //系统的初始化工作 // ... } }
<?xml version="1.0" encoding="UTF-8"?> <web-app> <listener> <listener-class>fangwei.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>
再思考
固步自封果然不是什么好事。非常感谢downpour 同学的指点。
评论
11 楼
benbear2008
2009-07-31
fangwei 写道
changtuipangxie 写道
changtuipangxie 写道
想请问一下,如果在web.xml中定义了那个InitListener,然后我还想在其中利用Spring注入的方式在这里使用注入的东西,可发现这些都是为空的,说明没注入进来!
我的意思就是,做没做过在定制任务的时候,用到了Spring的IoC注入方式?
目前我只知道可以使用硬编码取得spring容器中的bean
public class SysListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent se){ WebApplicationContext wa = WebApplicationContextUtils.getWebApplicationContextse.getServletContext()); IXXXService xxxService = (IXXXService )wa.getBean("xxxService "); //Do something here... } }
支持,我一直在想不用ClassPathXmlApplicationContext的方法
10 楼
找不到服务器
2009-03-05
factory = (BeanFactory) sce.getServletContext().getAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)
sce:ServletContextEvent
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)
sce:ServletContextEvent
9 楼
找不到服务器
2009-03-05
changtuipangxie 写道
想请问一下,如果在web.xml中定义了那个InitListener,然后我还想在其中利用Spring注入的方式在这里使用注入的东西,可发现这些都是为空的,说明没注入进来!
嘿嘿,要先获得WEBAPPLICATIONCONTEXT
8 楼
fangwei
2009-03-05
changtuipangxie 写道
changtuipangxie 写道
想请问一下,如果在web.xml中定义了那个InitListener,然后我还想在其中利用Spring注入的方式在这里使用注入的东西,可发现这些都是为空的,说明没注入进来!
我的意思就是,做没做过在定制任务的时候,用到了Spring的IoC注入方式?
目前我只知道可以使用硬编码取得spring容器中的bean
public class SysListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent se){ WebApplicationContext wa = WebApplicationContextUtils.getWebApplicationContextse.getServletContext()); IXXXService xxxService = (IXXXService )wa.getBean("xxxService "); //Do something here... } }
7 楼
bask
2009-02-23
如果使用spring
<bean id="initService" class="com.service.InitService" init-method="init"/>
这个不就可以了吗?直接初始化...
<bean id="initService" class="com.service.InitService" init-method="init"/>
这个不就可以了吗?直接初始化...
6 楼
Rooock
2009-02-23
changtuipangxie 写道
changtuipangxie 写道
想请问一下,如果在web.xml中定义了那个InitListener,然后我还想在其中利用Spring注入的方式在这里使用注入的东西,可发现这些都是为空的,说明没注入进来!
我的意思就是,做没做过在定制任务的时候,用到了Spring的IoC注入方式?
在你的web.xml中,spring启动的那个listener是在你这个listener之前还是之后.注意加载的顺序.
5 楼
changtuipangxie
2009-02-22
changtuipangxie 写道
想请问一下,如果在web.xml中定义了那个InitListener,然后我还想在其中利用Spring注入的方式在这里使用注入的东西,可发现这些都是为空的,说明没注入进来!
我的意思就是,做没做过在定制任务的时候,用到了Spring的IoC注入方式?
4 楼
changtuipangxie
2009-02-22
想请问一下,如果在web.xml中定义了那个InitListener,然后我还想在其中利用Spring注入的方式在这里使用注入的东西,可发现这些都是为空的,说明没注入进来!
3 楼
fangwei
2008-12-29
<div class='quote_title'>downpour 写道</div>
<div class='quote_div'>有这个必要嘛?搞个类实现ServletContextListener接口不就完了,还去hack框架的原生类做啥呢?</div>
<p><br/>以前一直是这么做的,也没有去寻找更好的实现方式,献丑了,呵呵。。。</p>
<p> </p>
<div class='quote_div'>有这个必要嘛?搞个类实现ServletContextListener接口不就完了,还去hack框架的原生类做啥呢?</div>
<p><br/>以前一直是这么做的,也没有去寻找更好的实现方式,献丑了,呵呵。。。</p>
<p> </p>
2 楼
jiangpingzhan
2008-12-29
downpour 写道
有这个必要嘛?搞个类实现ServletContextListener接口不就完了,还去hack框架的原生类做啥呢?
支持
1 楼
downpour
2008-12-28
有这个必要嘛?搞个类实现ServletContextListener接口不就完了,还去hack框架的原生类做啥呢?
发表评论
-
Java security KeyStore Cipher
2011-12-23 07:42 1294http://docs.oracle.com/javase/7 ... -
DirectInfo.GetFiles 排序
2011-10-19 15:50 1981The order in which this funct ... -
linux 实时观察文件行数变化
2011-09-16 17:48 2009#watch --interval=1 wc -l 20110 ... -
org.apache.poi 读取 excel xls xlsx
2011-08-30 09:56 8564http://poi.apache.org/download. ... -
mysql 列转行 GROUP_CONCAT
2011-08-09 18:36 2978GROUP_CONCAT(expr) 该函数返回 ... -
MMS 多媒体短信服务 彩信
2011-06-02 14:54 1290MMS为Multimedia Messaging Servic ... -
SMS的体系结构
2011-06-02 14:29 1530GSM标准中定义的点-点短消息服务使得短消息能在移动台和短消息 ... -
C# 事件 EventHanlder
2011-05-25 11:26 998using System; public class ... -
linux shell 根据目录拼出 java classpath
2011-03-28 11:21 1148#ls /demo/lib a.jar b.jar ... -
apache resin 端口关联
2011-03-13 15:24 920/etc/apache2/httpd.conf ResinC ... -
ubuntu 用户相关
2011-03-12 10:06 0修改用户默认组 usermod -g sms fangwei ... -
传递带空格的参数给linux shell中的java命令
2011-01-14 17:23 3727比如说 $ test.sh "2011-01-01 ... -
ubuntu server版配置关闭系统自动更新
2011-01-11 16:37 4240修改/etc/apt/apt.conf.d/50unat ... -
tomcat配置https ssl
2010-12-14 22:09 1066生成证书文件.keystore E:\>$JAVA_H ... -
junit4定义测试集TestSuite Declaration
2009-09-11 12:26 4913转载自 Joe Ocampo http://ww ... -
jquery选中单选框、复选框、下拉框
2009-09-10 14:39 6271转载自 jquery1.3中文参考 http:// ... -
使用<!-- //-->这样的html注释把js代码注起来的作用
2009-09-02 22:18 4810一直不明白用eclipse代码提示功能生成<script ... -
log4j布局PatternLayout详细手册
2009-08-22 10:02 1770转载自 log4j官网 http://logging. ... -
Runtime.getRuntime().exec(cmd)的超时处理
2009-08-17 18:22 4107在使用Runtime.getRuntime().exec(cm ... -
从结构化编程到面向对象编程
2009-08-11 18:08 1179本文所讨论的话题 通常在一个业务系统中会有各种不同的角色,而 ...
相关推荐
4、网站初始化工作类的实现 dbtest.servlet.LauncherServlet 5、tomcate数据源配置 见 tomcat配置.txt 6、创建了专门的数据库操作工具类 DBUtil、专门的DAO管理工具DAOManager 7、实现了CRUD的基本操作 8、struts2...
4、网站初始化工作类的实现 dbtest.servlet.LauncherServlet 5、tomcate数据源配置 见 tomcat配置.txt //这个项目用不着了 6、创建了专门的数据库操作工具类 DBUtil、专门的DAO管理工具DAOManager 7、实现了CRUD的...
4、网站初始化工作类的实现 dbtest.servlet.LauncherServlet 5、tomcate数据源配置 见 tomcat配置.txt //这个项目用不着了 6、创建了专门的数据库操作工具类 DBUtil、专门的DAO管理工具DAOManager 7、实现了CRUD的...
办公自动化系统应实现的功能如下。 企业的日常管理,应包括企业的会议管理和公告管理。用户可以通过这一模块查看企业发布的会议、公告,并设置了添加新公告和会议的功能。 考勤管理,应包括外出登记、请假登记...
11.3 利用Struts实现用户登录的示例 11.6.1 编写实现登录的页面login.jsp 11.6.2 编写存储登录用户信息的类User.java 11.6.3 编写控制器LoginAction.java 11.6.4 配置Struts文档struts-config.xml 11.6.5 配置web....
办公自动化系统应实现的功能如下。 企业的日常管理,应包括企业的会议管理和公告管理。用户可以通过这一模块查看企业发布的会议、公告,并设置了添加新公告和会议的功能。 考勤管理,应包括外出登记、请假登记...
第二种方法,在struts中不易实现,因为Strust的Action被Struts容器接管理,Action初始化,实例化都是由系统自动进行的.如果真的是由AOP实现,也许是一大推代码,很麻烦. 下面就讲讲第三种方法: [ 注意: 以下代码随手写的,...
11.3 利用Struts实现用户登录的示例 11.6.1 编写实现登录的页面login.jsp 11.6.2 编写存储登录用户信息的类User.java 11.6.3 编写控制器LoginAction.java 11.6.4 配置Struts文档struts-config.xml 11.6.5 配置web....
书管理系统的项目介绍 一,介绍 图书管理系统为学校图书馆的自主借书还书等功能提供支持,用户有自己的账号,在线完成线下借书还书等操作。 管理系统包括图书的名称,作者,图书分类,图书编号,剩余数量,借出数量...
11.3 利用Struts实现用户登录的示例 11.6.1 编写实现登录的页面login.jsp 11.6.2 编写存储登录用户信息的类User.java 11.6.3 编写控制器LoginAction.java 11.6.4 配置Struts文档struts-config.xml 11.6.5 配置web....
书管理系统的项目介绍 一,介绍 图书管理系统为学校图书馆的自主借书还书等功能提供支持,用户有自己的账号,在线完成线下借书还书等操作。 管理系统包括图书的名称,作者,图书分类,图书编号,剩余数量,借出数量...
对于基于Struts框架的Web应用程序,当客户端浏览器发出请求时,请求会被控制器 截获,并调用在Web应用启动时就加载并初始化核心控制器组件ActionServlet,然后通 过ActionServlet从Struts- config.xml文件中读取...
在运行本程序时,需要将Struts 1.1、Hibernate 3.0和SQL Server 2005数据库驱动包拷贝到Tomcat安装路径下的webapps文件夹中的06\WEB-INF\lib文件夹中。 使用说明 系统介绍 结合当今市场的需求,为了满足用户的需要。...
2、系统中菜单配置可以使用右键菜单管理,这个实现当时花了我一点时间,我感觉右键更符合传统的操作习惯。 3、系统利用struts2 拦截器 判断用户是否登录哦 4、使用p6spy 打印出hibernate 中已经替换了占位符参数...
2.7 自定义Bean初始化和析构 72 2.7.1 问题 72 2.7.2 解决方案 72 2.7.3 工作原理 72 2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 ...
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...
让我们从一个数据库报表的例子来看看任务调度能如何帮助改善系统设计。报表可能是错综复杂的,这取决于用户所需数据的种类,...这个示例还使用了Struts Action framework插件,以便在web应用启动时初始化任务调度机制。
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...
3.7.3 Web应用初始化参数的配置 3.7.4 application对象应用示例 3.8 其他内置对象的应用 3.8.1 应答与请求的page对象 3.8.2 页面上下文的page Context对象 3.8.3 获取web.xml配置信息的config对象 3.8.4 获取异常...