Struts2+Spring2+Hibernate3 web应用示例(六)
2008-05-18 10:27
357 查看
配置Struts2
Struts的配置文件都会在web.xml中注册的。
a)
Struts的配置文件如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="UTF-8" ?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!DOCTYPE struts PUBLIC
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"http://struts.apache.org/dtds/struts-2.0.dtd">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<struts>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<constant name="struts.devMode" value="true" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<constant name="struts.i18n.encoding" value="GBK" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Add packages here -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</struts>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Src/struts.xml
b)
struts_book.xml配置文件如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="UTF-8" ?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!DOCTYPE struts PUBLIC
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"http://struts.apache.org/dtds/struts-2.0.dtd">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<struts>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<package name="products" extends="struts-default">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!--default-interceptor-ref name="validation"/-->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Add actions here -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="list" class="bookAction" method="list">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result>/list.jsp</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="delete" class="bookAction" method="delete">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result type="redirect">list.action?queryMap=${queryMap}</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="*" class="com.sterning.commons.AbstractAction">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result>/{1}.jsp</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="edit" class="bookAction" method="load">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result>/editBook.jsp</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="save" class="bookAction" method="save">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<interceptor-ref name="params"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<interceptor-ref name="validation"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result name="input">/editBook.jsp</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result type="redirect">list.action?queryMap=${queryMap}</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</package>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</struts>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
文件中的<interceptor-ref name="params"/>,使用了struts2自己的拦截器,拦截器在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
Struts 2已经提供了丰富多样的,功能齐全的拦截器实现。大家可以到struts2-all-2.0.6.jar或struts2-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
1、Spring的配置文件如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="UTF-8"?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<beans>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- dataSource config -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id ="dataSource" class ="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="url" value="jdbc:mysql://localhost:3306/game" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="username" value="root" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="password" value="root"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- SessionFactory -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="sessionFactory"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="dataSource">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="dataSource"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="configLocation">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<value>classpath:com/sterning/bean/hibernate/hibernate.cfg.xml</value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- TransactionManager 不过这里暂时没注入-->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="transactionManager"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="sessionFactory">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref local="sessionFactory"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- DAO -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="booksDao" class="com.sterning.books.dao.hibernate.BooksMapDao">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="sessionFactory">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="sessionFactory"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Services -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="booksService" class="com.sterning.books.services.BooksService">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="booksDao">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="booksDao"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="pagerService" class="com.sterning.commons.PagerService"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- view -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="bookAction" class="com.sterning.books.web.actions.BooksAction" singleton="false">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="booksService">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="booksService"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="pagerService">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="pagerService"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</beans>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
WebRoot/WEB-INF/srping-content/applicationContent.xml
2、Struts.properties.xml
本来此文件应该写在struts
配置一节,但主要是考虑这体现了集成spring的配置,所以放在spring的配置这里来讲。
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
struts.objectFactory = spring
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
struts.locale=zh_CN
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
struts.i18n.encoding = GBK
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
struts.objectFactory:ObjectFactory
实现了 com.opensymphony.xwork2.ObjectFactory接口(spring)。struts.objectFactory=spring,主要是告知Struts 2运行时使用Spring来创建对象(如Action等)。当然,Spring的ContextLoaderListener监听器,会在web.xml文件中编写,负责Spring与Web容器交互。
struts.locale:The default locale for the Struts application。 默认的国际化地区信息。
struts.i18n.encoding:国际化信息内码。
十、
Web.xml配置
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="GB2312"?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!DOCTYPE web-app
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"http://java.sun.com/dtd/web-app_2_3.dtd">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<web-app>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<display-name>图书管理系统</display-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<context-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>log4jConfigLocation</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>/WEB-INF/classes/log4j.properties</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</context-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- ContextConfigLocation -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<context-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>contextConfigLocation</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>/WEB-INF/spring-context/applicationContext.xml</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</context-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-name>encodingFilter</filter-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-class>com.sterning.commons.SetCharacterEncodingFilter</filter-class>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>encoding</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>UTF-8</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>forceEncoding</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>true</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</filter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-name>struts2</filter-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>config</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>struts-default.xml,struts-plugin.xml,struts.xml,struts_books.xml</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</filter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-mapping>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-name>encodingFilter</filter-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<url-pattern>/*</url-pattern>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</filter-mapping>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-mapping>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-name>struts2</filter-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<url-pattern>/*</url-pattern>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</filter-mapping>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Listener contextConfigLocation -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<listener>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</listener>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Listener log4jConfigLocation -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<listener>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</listener>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- The Welcome File List -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<welcome-file-list>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<welcome-file>index.jsp</welcome-file>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</welcome-file-list>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</web-app>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
在Struts 2中,配置有少许改变,最明显的是分发器(dispatcher)已由Servlet转为Servlet Filter,
其配置和Servlet一样简单。和Servlet配置一样,Filter配置中定义了Filter的名称(作为引用)和类名。Filter Mapping通过URI和名称匹配来调用相应的Filter。默认情况下,扩展名为“.action”,这是在default.properties文件(在Struts
2 JAR文件里)的“struts.action.extension”属性定义的。
待续.....
Struts的配置文件都会在web.xml中注册的。
a)
Struts的配置文件如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="UTF-8" ?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!DOCTYPE struts PUBLIC
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"http://struts.apache.org/dtds/struts-2.0.dtd">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<struts>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<constant name="struts.devMode" value="true" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<constant name="struts.i18n.encoding" value="GBK" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Add packages here -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</struts>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Src/struts.xml
b)
struts_book.xml配置文件如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="UTF-8" ?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!DOCTYPE struts PUBLIC
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"http://struts.apache.org/dtds/struts-2.0.dtd">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<struts>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<package name="products" extends="struts-default">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!--default-interceptor-ref name="validation"/-->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Add actions here -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="list" class="bookAction" method="list">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result>/list.jsp</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="delete" class="bookAction" method="delete">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result type="redirect">list.action?queryMap=${queryMap}</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="*" class="com.sterning.commons.AbstractAction">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result>/{1}.jsp</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="edit" class="bookAction" method="load">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result>/editBook.jsp</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<action name="save" class="bookAction" method="save">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<interceptor-ref name="params"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<interceptor-ref name="validation"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result name="input">/editBook.jsp</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<result type="redirect">list.action?queryMap=${queryMap}</result>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</action>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</package>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</struts>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
文件中的<interceptor-ref name="params"/>,使用了struts2自己的拦截器,拦截器在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
Struts 2已经提供了丰富多样的,功能齐全的拦截器实现。大家可以到struts2-all-2.0.6.jar或struts2-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
1、Spring的配置文件如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="UTF-8"?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<beans>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- dataSource config -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id ="dataSource" class ="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="url" value="jdbc:mysql://localhost:3306/game" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="username" value="root" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="password" value="root"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- SessionFactory -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="sessionFactory"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="dataSource">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="dataSource"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="configLocation">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<value>classpath:com/sterning/bean/hibernate/hibernate.cfg.xml</value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- TransactionManager 不过这里暂时没注入-->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="transactionManager"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="sessionFactory">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref local="sessionFactory"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- DAO -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="booksDao" class="com.sterning.books.dao.hibernate.BooksMapDao">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="sessionFactory">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="sessionFactory"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Services -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="booksService" class="com.sterning.books.services.BooksService">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="booksDao">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="booksDao"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="pagerService" class="com.sterning.commons.PagerService"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- view -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<bean id="bookAction" class="com.sterning.books.web.actions.BooksAction" singleton="false">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="booksService">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="booksService"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<property name="pagerService">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<ref bean="pagerService"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</bean>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</beans>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
WebRoot/WEB-INF/srping-content/applicationContent.xml
2、Struts.properties.xml
本来此文件应该写在struts
配置一节,但主要是考虑这体现了集成spring的配置,所以放在spring的配置这里来讲。
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
struts.objectFactory = spring
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
struts.locale=zh_CN
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
struts.i18n.encoding = GBK
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
struts.objectFactory:ObjectFactory
实现了 com.opensymphony.xwork2.ObjectFactory接口(spring)。struts.objectFactory=spring,主要是告知Struts 2运行时使用Spring来创建对象(如Action等)。当然,Spring的ContextLoaderListener监听器,会在web.xml文件中编写,负责Spring与Web容器交互。
struts.locale:The default locale for the Struts application。 默认的国际化地区信息。
struts.i18n.encoding:国际化信息内码。
十、
Web.xml配置
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="GB2312"?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!DOCTYPE web-app
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
"http://java.sun.com/dtd/web-app_2_3.dtd">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<web-app>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<display-name>图书管理系统</display-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<context-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>log4jConfigLocation</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>/WEB-INF/classes/log4j.properties</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</context-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- ContextConfigLocation -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<context-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>contextConfigLocation</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>/WEB-INF/spring-context/applicationContext.xml</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</context-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-name>encodingFilter</filter-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-class>com.sterning.commons.SetCharacterEncodingFilter</filter-class>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>encoding</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>UTF-8</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>forceEncoding</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>true</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</filter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-name>struts2</filter-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-name>config</param-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<param-value>struts-default.xml,struts-plugin.xml,struts.xml,struts_books.xml</param-value>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</init-param>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</filter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-mapping>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-name>encodingFilter</filter-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<url-pattern>/*</url-pattern>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</filter-mapping>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-mapping>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<filter-name>struts2</filter-name>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<url-pattern>/*</url-pattern>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</filter-mapping>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Listener contextConfigLocation -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<listener>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</listener>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- Listener log4jConfigLocation -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<listener>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</listener>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!-- The Welcome File List -->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<welcome-file-list>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<welcome-file>index.jsp</welcome-file>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</welcome-file-list>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</web-app>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
在Struts 2中,配置有少许改变,最明显的是分发器(dispatcher)已由Servlet转为Servlet Filter,
其配置和Servlet一样简单。和Servlet配置一样,Filter配置中定义了Filter的名称(作为引用)和类名。Filter Mapping通过URI和名称匹配来调用相应的Filter。默认情况下,扩展名为“.action”,这是在default.properties文件(在Struts
2 JAR文件里)的“struts.action.extension”属性定义的。
待续.....
相关文章推荐
- Struts2+Spring2+Hibernate3 web应用示例(一)
- Struts2+Spring2+Hibernate3 web应用示例(六)
- Struts2+Spring2+Hibernate3 web应用示例(六)
- Struts2+Spring2+Hibernate3 web应用示例------源代码
- Struts2+Spring2+Hibernate3 web应用示例(一)
- Struts2+Spring2+Hibernate3 web应用示例(一)
- Struts2+Spring2+Hibernate3 web应用示例(四)
- Struts2+Spring2+Hibernate3 web应用示例(七)
- Struts2+Spring2+Hibernate3 web应用示例(一)
- Struts2+Spring2+Hibernate3 web应用示例(六)
- Struts2+Spring2+Hibernate3 web应用示例(一)
- Struts2+Spring2+Hibernate3 web应用示例(二)
- Struts2+Spring2+Hibernate3 web应用示例(四)
- Struts2+Spring2+Hibernate3 web应用示例(七)
- Struts2+Spring2+Hibernate3 web应用示例(二)
- Struts2+Spring2+Hibernate3 web应用示例(三)
- Struts2+Spring2+Hibernate3 web应用示例(二)
- Struts2+Spring2+Hibernate3 web应用示例(四)
- Struts2+Spring2+Hibernate3 web应用示例(七)
- Struts2+Spring2+Hibernate3 web应用示例(一)