Struts2+Spring2+Hibernate3 web应用示例(六)

本文详细介绍了Struts2的配置方法,包括Struts2的配置文件结构、拦截器的作用及配置方式,并展示了如何利用Struts2进行Action定义与结果处理。此外,还深入探讨了Spring框架的配置细节,例如数据源、会话工厂、事务管理器的配置方法,以及Struts2与Spring的集成方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2007年10月08日 23:25:00

八、 配置Struts2

Struts的配置文件都会在web.xml中注册的。

a) Struts的配置文件如下:

>?xml version="1.0" encoding="UTF-8" ?<
>!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
<

>struts<

>constant name="struts.enable.DynamicMethodInvocation" value="false" /<
>constant name="struts.devMode" value="true" /<
>constant name="struts.i18n.encoding" value="GBK" /<

>!-- Add packages here --<

>/struts<

Src/struts.xml

b) struts_book.xml配置文件如下:

>?xml version="1.0" encoding="UTF-8" ?<
>!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
<

>struts<

>package name="products" extends="struts-default"<
>!--default-interceptor-ref name="validation"/--<
>!-- Add actions here --<
>action name="list" class="bookAction" method="list"<
>result</list.jsp>/result<
>/action<

>action name="delete" class="bookAction" method="delete"<
>result type="redirect"<list.action?queryMap=${queryMap}>/result<
>/action<

>action name="*" class="com.sterning.commons.AbstractAction"<
>result</{1}.jsp>/result<
>/action<

>action name="edit" class="bookAction" method="load"<
>result</editBook.jsp>/result<
>/action<

>action name="save" class="bookAction" method="save"<
>interceptor-ref name="params"/<
>interceptor-ref name="validation"/<
>result name="input"</editBook.jsp>/result<
>result type="redirect"<list.action?queryMap=${queryMap}>/result<

>/action<
>/package<
>/struts<

文件中的>interceptor-ref name="params"/<,使用了struts2自己的拦截器,拦截器在AOPAspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

Struts 2已经提供了丰富多样的,功能齐全的拦截器实现。大家可以到struts2-all-2.0.6.jarstruts2-core-2.0.6.jar包的struts-default.xml查看关于默认的拦截器与拦截器链的配置。

struts-default.xml中已经配置了大量的拦截器。如果您想要使用这些已有的拦截器,只需要在应用程序struts.xml文件中通过">include file="struts-default.xml" /<"struts-default.xml文件包含进来,并继承其中的struts-default包(package),最后在定义Action时,使用">interceptor-ref name="xx" /<"引用拦截器或拦截器栈(interceptor stack)。一旦您继承了struts-default包(package),所有Action都会调用拦截器栈 --defaultStack。当然,在Action配置中加入">interceptor-ref name="xx" /<"可以覆盖defaultStack

作为"框架(framework",可扩展性是不可或缺的,因为世上没有放之四海而皆准的东西。虽然,Struts 2为我们提供如此丰富的拦截器实现,但是这并不意味我们失去创建自定义拦截器的能力,恰恰相反,在Struts 2自定义拦截器是相当容易的一件事。所有的Struts 2的拦截器都直接或间接实现接口com.opensymphony.xwork2.interceptor.Interceptor。除此之外,大家可能更喜欢继承类com.opensymphony.xwork2.interceptor.AbstractInterceptor


九、 配置Spring

1Spring的配置文件如下:

>?xml version="1.0" encoding="UTF-8"?<
>!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"<

>beans<
>!-- dataSource config --<
>bean id ="dataSource" class ="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"<
>property name="driverClassName" value="com.mysql.jdbc.Driver" /<
>property name="url" value="jdbc:mysql://localhost:3306/game" /<
>property name="username" value="root" /<
>property name="password" value="root"/<
>/bean<

>!-- SessionFactory --<
>bean id="sessionFactory"
class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean"<

>property name="dataSource"<
>ref bean="dataSource"/<
>/property<
>property name="configLocation"<
>value<classpath:com/sterning/bean/hibernate/hibernate.cfg.xml>/value<
>/property<
>/bean<

>!-- TransactionManager 不过这里暂时没注入--<
>bean id="transactionManager"
class
="org.springframework.orm.hibernate3.HibernateTransactionManager"<
>property name="sessionFactory"<
>ref local="sessionFactory"/<
>/property<
>/bean<

>!-- DAO --<
>bean id="booksDao" class="com.sterning.books.dao.hibernate.BooksMapDao"<
>property name="sessionFactory"<
>ref bean="sessionFactory"/<
>/property<
>/bean<

>!-- Services --<
>bean id="booksService" class="com.sterning.books.services.BooksService"<
>property name="booksDao"<
>ref bean="booksDao"/<
>/property<
>/bean<

>bean id="pagerService" class="com.sterning.commons.PagerService"/<

>!-- view --<
>bean id="bookAction" class="com.sterning.books.web.actions.BooksAction" singleton="false"<
>property name="booksService"<
>ref bean="booksService"/<
>/property<
>property name="pagerService"<
>ref bean="pagerService"/<
>/property<
>/bean<

>/beans<

WebRoot/WEB-INF/srping-content/applicationContent.xml

2Struts.properties.xml

本来此文件应该写在struts 配置一节,但主要是考虑这体现了集成spring的配置,所以放在spring的配置这里来讲。

struts.objectFactory = spring
struts.locale=zh_CN
struts.i18n.encoding = GBK

struts.objectFactoryObjectFactory 实现了 com.opensymphony.xwork2.ObjectFactory接口(spring)。struts.objectFactory=spring,主要是告知Struts 2运行时使用Spring来创建对象(如Action等)。当然,SpringContextLoaderListener监听器,会在web.xml文件中编写,负责SpringWeb容器交互。

struts.localeThe default locale for the Struts application 默认的国际化地区信息。

struts.i18n.encoding:国际化信息内码。

十、 Web.xml配置


>?xml version="1.0" encoding="GB2312"?<
>!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"
<

>web-app<
>display-name<图书管理系统>/display-name<
>context-param<
>param-name<log4jConfigLocation>/param-name<
>param-value</WEB-INF/classes/log4j.properties>/param-value<
>/context-param<
>!-- ContextConfigLocation --<
>context-param<
>param-name<contextConfigLocation>/param-name<
>param-value</WEB-INF/spring-context/applicationContext.xml>/param-value<
>/context-param<

>filter<
>filter-name<encodingFilter>/filter-name<
>filter-class<com.sterning.commons.SetCharacterEncodingFilter>/filter-class<
>init-param<
>param-name<encoding>/param-name<
>param-value<UTF-8>/param-value<
>/init-param<
>init-param<
>param-name<forceEncoding>/param-name<
>param-value<true>/param-value<
>/init-param<
>/filter<
>filter<
>filter-name<struts2>/filter-name<
>filter-class<org.apache.struts2.dispatcher.FilterDispatcher>/filter-class<
>init-param<
>param-name<config>/param-name<
>param-value<struts-default.xml,struts-plugin.xml,struts.xml,struts_books.xml>/param-value<
>/init-param<
>/filter<

>filter-mapping<
>filter-name<encodingFilter>/filter-name<
>url-pattern</*>/url-pattern<
>/filter-mapping<
>filter-mapping<
>filter-name<struts2>/filter-name<
>url-pattern</*>/url-pattern<
>/filter-mapping<

>!-- Listener contextConfigLocation --<
>listener<
>listener-class<org.springframework.web.context.ContextLoaderListener>/listener-class<
>/listener<
>!-- Listener log4jConfigLocation --<
>listener<
>listener-class<org.springframework.web.util.Log4jConfigListener>/listener-class<
>/listener<

>!-- The Welcome File List --<
>welcome-file-list<
>welcome-file<index.jsp>/welcome-file<
>/welcome-file-list<
>/web-app<

Struts 2中,配置有少许改变,最明显的是分发器(dispatcher)已由Servlet转为Servlet Filter, 其配置和Servlet一样简单。和Servlet配置一样,Filter配置中定义了Filter的名称(作为引用)和类名。Filter Mapping通过URI和名称匹配来调用相应的Filter。默认情况下,扩展名为".action",这是在default.properties文件(在Struts 2 JAR文件里)的"struts.action.extension"属性定义的。

待续.....

Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1816079


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值