- 浏览: 225479 次
- 性别:
- 来自: 深圳
最新评论
-
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 1373http://docs.oracle.com/javase/7 ... -
DirectInfo.GetFiles 排序
2011-10-19 15:50 2027The order in which this funct ... -
linux 实时观察文件行数变化
2011-09-16 17:48 2054#watch --interval=1 wc -l 20110 ... -
org.apache.poi 读取 excel xls xlsx
2011-08-30 09:56 8617http://poi.apache.org/download. ... -
mysql 列转行 GROUP_CONCAT
2011-08-09 18:36 3041GROUP_CONCAT(expr) 该函数返回 ... -
MMS 多媒体短信服务 彩信
2011-06-02 14:54 1355MMS为Multimedia Messaging Servic ... -
SMS的体系结构
2011-06-02 14:29 1610GSM标准中定义的点-点短消息服务使得短消息能在移动台和短消息 ... -
C# 事件 EventHanlder
2011-05-25 11:26 1036using System; public class ... -
linux shell 根据目录拼出 java classpath
2011-03-28 11:21 1193#ls /demo/lib a.jar b.jar ... -
apache resin 端口关联
2011-03-13 15:24 949/etc/apache2/httpd.conf ResinC ... -
ubuntu 用户相关
2011-03-12 10:06 0修改用户默认组 usermod -g sms fangwei ... -
传递带空格的参数给linux shell中的java命令
2011-01-14 17:23 3826比如说 $ test.sh "2011-01-01 ... -
ubuntu server版配置关闭系统自动更新
2011-01-11 16:37 4313修改/etc/apt/apt.conf.d/50unat ... -
tomcat配置https ssl
2010-12-14 22:09 1097生成证书文件.keystore E:\>$JAVA_H ... -
junit4定义测试集TestSuite Declaration
2009-09-11 12:26 4963转载自 Joe Ocampo http://ww ... -
jquery选中单选框、复选框、下拉框
2009-09-10 14:39 6308转载自 jquery1.3中文参考 http:// ... -
使用<!-- //-->这样的html注释把js代码注起来的作用
2009-09-02 22:18 4849一直不明白用eclipse代码提示功能生成<script ... -
log4j布局PatternLayout详细手册
2009-08-22 10:02 1827转载自 log4j官网 http://logging. ... -
Runtime.getRuntime().exec(cmd)的超时处理
2009-08-17 18:22 4209在使用Runtime.getRuntime().exec(cm ... -
从结构化编程到面向对象编程
2009-08-11 18:08 1225本文所讨论的话题 通常在一个业务系统中会有各种不同的角色,而 ...
相关推荐
### Struts 2中实现CRUD操作详解 #### 一、引言 CRUD操作是软件开发中最常见的数据处理方式之一,它代表了对数据进行的四种...希望本文能帮助读者更好地理解Struts 2中的CRUD操作实现方法,并能在实际项目中灵活运用。
6. **Action类**:在Struts2中,Action类是控制器的实现,它处理用户请求,调用业务逻辑,然后返回一个结果到视图。每个Action类通常对应一个特定的业务操作。 7. **配置文件**:包括struts.xml和web.xml。struts....
在开发过程中,Struts2还提供了强大的动作类和结果类型,支持国际化、主题样式等功能,使得开发过程更加灵活和高效。此外,结合其他技术,如Spring进行依赖注入,Hibernate进行对象关系映射,可以构建出更完整的Java...
2. **SessionFactory**:创建会话的工厂,通常在应用启动时初始化。 3. **Session**:与数据库交互的实例,负责CRUD(创建、读取、更新、删除)操作。 4. **Criteria API**:用于构建动态查询,提供了一种更面向对象...
综上所述,Struts2问卷调查系统是一个集成了用户交互、数据库管理、权限控制的完整应用实例,展示了Struts2框架在实际项目中的应用和优势。开发者可以借此学习如何构建类似的应用,提升自己的Java EE开发技能。
在描述中提到的“含数据库导入语句”,意味着此项目包含了数据库相关的脚本或文件,可能是一个SQL文件,用于创建和初始化电子拍卖系统的数据表结构。这通常包括用户表、拍卖品表、出价记录表等,以便存储用户信息、...
在Struts2中,Action类是业务逻辑的载体,配置在struts.xml文件中,通过拦截器链来处理请求和响应。Struts2还提供了丰富的结果类型,如dispatcher(转发)和stream(流式下载),以及强大的OGNL表达式语言,用于在...
这通常意味着在系统初始化时,开发人员会运行SQL脚本来创建表结构、插入初始数据,如`bookmanage.sql`文件可能就包含了这些内容。在图书管理系统中,可能有书籍、作者、出版社等相关的表,以及用于存储进销存信息的...
【标题】"基于Struts2+Hibernate4实现报道管理系统"是一个使用Java技术栈构建的Web应用,它结合了Struts2框架、Hibernate4 ORM工具以及SQL Server数据库来管理和处理新闻报道相关的数据。这个系统旨在提供一个高效、...
【标题】:“全套源码-论坛系统(Struts 2+Hibernate+Spring实现)”揭示了一个基于Java技术栈开发的论坛系统,它整合了三个重要的框架:Struts 2、Hibernate和Spring。这个项目旨在提供一个完整的解决方案,帮助...
Struts2框架作为Java Web开发领域中的一款经典MVC(Model-View-Controller)框架,其工作原理涉及到了一系列复杂的组件交互与流程控制。本文将深入解析Struts2的工作流程,帮助开发者理解其核心机制。 ### 一、...
在SSH系统中,Spring主要负责管理整个应用的组件,包括Struts2的Action、Hibernate的数据访问对象(DAO)等。通过Spring的IoC容器,我们可以实现松耦合和更好的测试性。同时,Spring还提供了与Hibernate的集成,简化...
- **Hibernate配置**:配置Hibernate以适应Spring环境,包括在Spring配置文件中定义SessionFactorybean,使其能够读取Hibernate配置文件(如hibernate.cfg.xml),从而初始化Hibernate SessionFactory。 #### 四、...
- **MVC设计模式**:在Struts2中,模型(Model)负责管理应用程序的数据逻辑;视图(View)负责展示数据;控制器(Controller)则处理用户的请求并将控制权交给合适的模型或视图。 - **拦截器机制**:Struts2中的...
在`Dispatcher`的初始化过程中,它会读取`web.xml`或其他配置文件,解析Struts2的配置信息,如Action、结果类型、拦截器等。这些配置信息被加载到内存中的容器中,供后续请求处理时使用。`Dispatcher`还负责初始化...
在提供的压缩包文件中,"leave.sql"很可能是数据库脚本文件,包含了创建该请假系统所需的所有数据库表结构、初始化数据以及可能的触发器、存储过程等。开发者可以通过导入这个SQL脚本来快速设置好项目的数据库环境。...
在Struts2框架中,`Model`负责业务逻辑和数据管理,通常由JavaBeans或Entity Beans实现。`View`是用户看到的页面,通常使用JSP或FreeMarker模板技术来生成。`Controller`作为两者之间的桥梁,接收用户的请求,处理并...
2. **配置SWFUpload**:在HTML页面中,通过JavaScript调用SWFUpload初始化方法,配置文件选择、文件类型限制、上传URL等参数。 3. **创建Struts2 Action**:在Struts2框架中,创建一个处理文件上传的Action类,该类...
在“struts实现的简单自动售货系统”项目中,我们可以看到Struts框架被用来构建一个后台管理系统,这个系统可以处理自动售货机的相关操作,如商品管理、订单处理、库存控制等基本功能。下面将详细探讨Struts框架在...
在这个会员管理系统中,Struts2负责接收用户请求,调度控制层的Action,进而与模型层交互,最后将结果传递给视图层进行展示。 SQL Server数据库在这里起到了数据持久化的作用,它是Microsoft公司推出的关系型数据库...