采用的整合方案为:Action交由Spring创建,需用到的整合包:struts2-spring-plugin-xxx.jar。
1. Stuts2的安装
1.1 下载struts2所需的包
到http://struts.apache.org/download.cgi/,下载struts2。找到struts2所需的5个核心包:
a、struts2-core.jar struts2的核心包,struts框架的“外衣”(注:略去文件名中的版本号,下同)
b、xwork-core.jar struts2核心包,是webwork内核
c、ognl.jar ognl表达式,类似EL表达式,比EL表达式强大
d、freemarker.jar 比jsp更好用功能更强大的表现层技术
e、commons-fileupload.jar 实现文件上传功能
另外还有其他的包如果需要的话也可添加。将选择的包添加到项目中的lib文件夹中,并添加到classpath。
注:不同版本所需的依赖包不同,如果启动报错,有可能是缺少包,需按照报错提示添加包。
1.2 配置Struts2
1.2.1 配置web.xml
在web.xml中配置Struts2的前端控制器。Struts2使用filter实现前端控制器,不是servlet。示例:
<?xmlversion="1.0" encoding="UTF-8"?>
<web-appversion="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>Strut2Controller</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>Strut2Controller</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>welcome.jsp</welcome-file>
</welcome-file-list>
</web-app>
1.2.2 配置struts的配置文件struts.xml
struts.xml文件告诉struts2请求对应的java类,存放到根目录src中,编译后该文件位于WEB-INF/classes/下。示例:
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPEstruts PUBLIC
"-//Apache Software Foundation//DTDStruts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="sshbase-default" extends="struts-default">
<action name="index-*" class="action.IndexAction" method="{1}">
<result name="hello">/index.jsp</result>
</action>
<!--定义全局result-->
<!-- <global-results>-->
<!-- <resultname="error">error.jsp</result>-->
<!-- </global-results>-->
<!--异常处理,将框架捕获的异常调用指定result处理 -->
<!-- <global-exception-mappings>-->
<!-- <exception-mappingresult="error" exception="java.lang.Exception">-->
<!-- </exception-mapping>-->
<!-- </global-exception-mappings>-->
</package>
</struts>
1.3 注解配置
1.3.1 导入struts2-convention-plugin-xxx.jar插件。
1.3.2 常用的action注解用法:
1.3.2.1 用法1
@Action(value="gotoOfficialLoginPage",results={
@Result(name="officialLoginPage", location="/WEB-INF/content/wsweb/offical/login.ftl")
})
public StringgotoOfficialLoginPage() { }
无需配置1.2.2中的struts.xml。
1.3.2.2 用法2(用法1的简写方式)
@Action("action1")
public String method() {
return "str1";
}
可匹配的资源:
action1.jsp
str1.jsp
action1-str1.jsp
此时需要配置struts.xml文件,添加:
<constantname="struts.convention.result.path" value="/"/>
来定义Convention插件定位视图资源的根路径,其默认值为/WEB-INF/content。
2. Spring安装
2.1 下载Spring所需的包
到http://maven.springframework.org/release/org/springframework/spring/下载所需的Spring压缩包,找到所需的基本jar包,加入到项目lib中,并添加至classpath:[3.2.4.RELEASE]
a、 spring-aop-xxx.jar
b、 spring-aspects-xxx.jar
c、 spring-beans-xxx.jar
d、 spring-build-src-xxx.jar
e、 spring-context-xxx.jar
f、 spring-context-support-xxx.jar
g、 spring-core-xxx.jar
h、 spring-jdbc-xxx.jar
i、 spring-orm-xxx.jar
j、 spring-tx-xxx.jar
添加包的注意事项参考添加struts2包的。
2.2 配置Spring
2.2.1 配置web.xml
在web.xml中添加spring的配置:
<!--Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用","号分隔,此参数用于后面的SpringContext Loader -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/applicationContext*.xml</param-value>
</context-param>
<!--Spring的ApplicationContext载入,在启动时,实例化Spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2.2.2 配置spring的配置文件applicationContext.xml
示例:
<?xmlversion="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsdhttp://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
default-lazy-init="true">
<bean id="testService" class="service.impl.TestService"></bean>
</beans>
2.3 注解配置
2.3.1 在spring的配置文件里面只需要加上<context:annotation-config/>和<context:component-scanbase-package="需要实现注入的类所在包"/>,可以使用base-package="*"表示全部的类。
2.3.2 用法示例
Service:
@Service(value ="testService")
publicclass TestServiceimplements ITestService {
……
}
Action:
publicclass IndexAction {
//inject
@Resource(name ="testService")
private ITestServicetestService;
……
}
2.4 事务管理注解配置 [非注解方式的事务控制可采用AOP切入实现]
2.4.1 在spring配置文件里添加如下配置即可:
<!--事务管理器配置,多数据源JTA事务-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
2.4.2 用法
在service上添加@Transactional注释即可。
2.5 整合
2.5.1 Spring整合Struts2
添加struts2-spring-plugin-xxx.jar包(可在Struts2安装包里找到)到lib并添加至classpath即可完成两者整合。
2.5.2 Spring整合JDBC
2.5.2.1 添加连接池支持包和数据库连接包(本例用oracle数据库)
a、 commons-collections-xxx.jar
b、 commons-dbcp-xxx.jar
c、 commons-pool-xxx.jar
d、 ojdbc14.jar
2.5.2.2 配置applicationContext.xml,添加dataSource bean,以便dao使用
示例:
<!--数据源配置,使用应用内的DBCP数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@117.27.144.87:1521:microvideo" />
<property name="username" value="event" />
<property name="password" value="event123" />
<!-- Connection Pooling Info -->
<property name="initialSize" value="5" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="30" />
<property name="maxWait" value="500" />
<property name="poolPreparedStatements" value="false" />
<property name="defaultAutoCommit" value="false" />
</bean>
2.5.2.3 使用示例
@Repository(value ="userDao")
publicclass UserDaoJdbcImplextends JdbcDaoSupportimplements UserDao {
//inject注入dataSource
@Resource(name ="dataSource")
publicvoid setMyDataSource(DataSource dataSource) {
super.setDataSource(dataSource);
}
public List<User> selectAllUsers() {
List<User> users =new ArrayList<User>();
String sql = "SELECT * FROM sysuser";
users = this.getJdbcTemplate().query(sql,new UserRowMapper());
return users;
}
}
DAO继承JdbcDaoSupport,JdbcDaoSupport帮我们自动注入了上面定义的dataSource组件。
2.5.3 Spring整合Hibernate [需先安装配置hibernate,参考第3小节]
Spring整合Hibernate是建立在整合Jdbc的基础上的。
2.5.3.1配置applicationContext.xml,添加sessionFactory bean,以便dao使用
在2.5.2.2基础上,再配置一个sessionFactory bean,示例:
<!-- Hibernate配置 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="namingStrategy">
<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
<property name="packagesToScan">
<list>
<value>com.hcl.hgevent.**.*</value>
<value>com.visondata.**.*</value>
</list>
</property>
</bean>
2.5.3.2 使用示例
@Repository(value ="hgActivityVideoDao")
publicclass HgActivityVideoDaoImplextends HibernateDaoSupportimplements IHgActivityVideoDao {
//inject注入sessionFactory
@Resource(name ="sessionFactory")
publicvoid setMySessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
public Page<HgActivityVideo>getUserVideoList(String userId, Integer pageNo, Integer pageSize) {
……
Queryquery =
this.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(hql);
……
}
}
3. Hibernate安装
3.1 下载Hibernate所需安装包
到http://www.hibernate.org/downloads下载所需版本的hibernate包,找到所需的基本jar包,加入到项目lib中,并添加至classpath:[4.2.6.FINAL]
a、 antlr-xxx.jar
b、 dom4j-xxx.jar
c、 hibernate-commons-annotations-xxx.jar
d、 hibernate-core-xxx.jar
e、 hibernate-jpa-2.0-api-xxx.jar
3.2 配置整合Hibernate
参见2.5.3。
3.3 实体类注解示例
@Entity
@Table(name ="HG_VOTER")
//默认的缓存策略.
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
publicclass HgVoter {
@Id
@Column(name ="HGVOTERID", unique=true, nullable =false)
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@GenericGenerator(name ="SEQ_HG_VOTER", strategy ="sequence", parameters =@Parameter(name ="sequence", value ="SEQ_HG_VOTER"))
private Integerhgvoterid;
private Stringuserid;
//getter setter
}