Spring3.x_Struts2.x_Hibernate3.x整合之个人备忘笔记

Spring3.x_Struts2.x_Hibernate3.x整合

1.导入Struts2的包(导入之后检查一下是否存在冲突的包)
Struts2下载地址:http://struts.apache.org/download.cgi

2.导入Struts2和Spring整合的包(struts2-spring-plugin-2.3.16.3.jar)

3.配置struts2的struts.xml配置文件
<!-- 表示Action由Spring来进行创建,可以直接使用Spring的依赖注入来注入value="org.apache.struts2.spring.StrutsSpringObjectFactory"-->

<constant name="struts.objectFactory" value="spring" />

4.创建action
/**
 * 此时等于用Spring来创建了userAction对象,
 * 在struts的配置文件中写Action的class的时候就不能写类,
 * 而应该写userAction中对象
 * @author sunlight
 *
 */
@Controller("userAction")    
 

5.重新配置struts.xml通配符的部分
<!-- 基于通配符的方式,由于整合了Spring在class中不用使用完整的类了,而一个使用Spring所注入的对象,
            如userAction就应该使用userAction来创建,此处特别注意,第一个字母是小写,文件夹就应该使用小写的 -->
<action name="*_*" class="{1}Action" method="{2}">
    <!-- 在action中引入相应的拦截器,如果在action中引入了相应的拦截器之后,
    原有得继承自struts-default.xml的拦截器就不起作用了,此时需要手动引入 -->
    <!-- <interceptor-ref name="helloStack"/> -->
    <result>/WEB-INF/jsp/{1}/{2}.jsp</result>
    <result name="input">/WEB-INF/jsp/{1}/{2}Input.jsp</result>
    <result name="redirect" type="redirect">/${url}</result>
</action>


6.在web.xml中配置获取beanFactory的配置
<!-- 创建Spring的监听器 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Context Configuration locations for Spring XML files -->
<!-- Spring的监听器可以通过这个上下文参数来获取beans.xml的位置 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <!-- <param-value>/WEB-INF/applicationContext-*.xml,classpath*:beans.xml</param-value> -->
    <param-value>classpath*:beans.xml</param-value>
</context-param>
Spring3.x_Struts2.x_Hibernate3.x整合之个人备忘笔记_第1张图片 Spring3.x_Struts2.x_Hibernate3.x整合之个人备忘笔记_第2张图片

7创建struts2的过滤器
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>

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


8.创建GroupAction
实现获取所有组列表方法

9.创建/jsp/group/list.jsp页面
使用struts2标签获取数据

下面将几个XML文件代码贴上:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">

	<!-- 创建Spring的监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Context Configuration locations for Spring XML files -->
	<!-- Spring的监听器可以通过这个上下文参数来获取beans.xml的位置 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:beans.xml</param-value>
	</context-param>

	<!-- 表单处理乱码 -->
	<filter>
		<filter-name>CharacterFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<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>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

	<!-- 打开Spring的Annotation的支持 -->
	<context:annotation-config />
	<!-- 设定Spring去哪些包中找Annotation -->
	<context:component-scan base-package="org.oms.spring" />

	<!-- 创建数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<!-- 配置连接池的初始值 -->
		<property name="maxActive" value="500" />
		<!-- 最大空闲时,当经过一个高峰之后,连接池可以将一些用布到的连接释放,一直减少到maxIdle为止 -->
		<property name="maxIdle" value="20" />
		<!-- 当最小空闲时,当连接少于minIdle时会自动申请一些连接 -->
		<property name="minIdle" value="1" />
		<property name="maxWait" value="1000" />
	</bean>
	<!-- 导入src下的jdbc.properties -->
	<context:property-placeholder location="classpath:jdbc.properties" />
	<!-- 创建sessionFactory工厂 -->
	<!-- 如果使用的是Annotation方式不能使用org.springframework.orm.hibernate3.LocalSessionFactoryBean,而应该使用org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 设置Spring去那个包中查找相应的实体类 -->
		<property name="packagesToScan">
			<value>org.oms.spring.model</value>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.format_sql">false</prop>
			</props>
		</property>
	</bean>
	<!-- 开启HibernateTemplate,并且为其注入sessionFactory, 
			使用HibernateTemplate不太方便的就是要获取session得通过getSessionFactory() -->
	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	
	<!-- 配置Spring的事物处理 -->
	<!-- 创建事物管理器 -->
	<!-- SessionFactory, DataSource, etc. omitted -->
	<bean id="txManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!-- 配置AOP,Spring是通过AOP来进行事物管理的 -->
	<aop:config>
		<!-- 设置pointcut表示哪些方法要加入事物处理 -->
		<aop:pointcut id="allMethods"
			expression="execution(* org.oms.spring.dao.*.*(..))" />
		<!-- 通过advisor来确定具体要加入事物控制的方法 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods" />
	</aop:config>
	<!-- 配置哪些方法要加入事物控制 -->
	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
			<!-- 让所有方法都加入事物管理(效率低,实际使用中按需处理) -->
			<tx:method name="*" propagation="REQUIRED" />
		</tx:attributes>
	</tx:advice>

</beans>

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

<struts>
	<!-- Some or all of these can be flipped to true for debugging -->
	<constant name="struts.devMode" value="false" />
	<constant name="struts.configuration.xml.reload" value="false" />
	<constant name="struts.i18n.reload" value="false" />
	<constant name="struts.custom.i18n.resources" value="globalMessages" />
	<constant name="struts.action.extension" value="action,do" />
	<!-- 表示Action由Spring来进行创建,可以直接使用Spring的依赖注入来注入 -->
	<constant name="struts.objectFactory" value="spring" />

	<package name="default" namespace="/" extends="struts-default">
		<default-action-ref name="index" />
		<!-- 全局结果集,所有action相应的返回值来找对应的处理页面 -->
		<global-results>
			<result name="error">/error.jsp</result>
		</global-results>
		<!-- 定义异常处理页面 -->
		<global-exception-mappings>
			<exception-mapping exception="org.oms.spring.exception.UserException"
				result="error" />
		</global-exception-mappings>
		
		<action name="index">
			<result>/index.jsp</result>
		</action>
		
		<!-- 基于通配符的方式,由于整合了Spring在class中不用使用完整的类了,而一个使用Spring所注入的对象,
			如userAction就应该使用userAction来创建,此处特别注意,第一个字母是小写,文件夹就应该使用小写的 -->
		<action name="*_*" class="{1}Action" method="{2}">
			<!-- 在action中引入相应的拦截器,如果在action中引入了相应的拦截器之后,
			原有得继承自struts-default.xml的拦截器就不起作用了,此时需要手动引入 -->
			<!-- <interceptor-ref name="helloStack"/> -->
			<result>/WEB-INF/jsp/{1}/{2}.jsp</result>
			<result name="input">/WEB-INF/jsp/{1}/{2}Input.jsp</result>
			<result name="redirect" type="redirect">/${url}</result>
		</action>
	</package>


	<!-- Add packages here -->

</struts>

GroupAction.class
package org.oms.spring.action;

import javax.annotation.Resource;

import org.oms.spring.model.Group;
import org.oms.spring.service.IGroupService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@SuppressWarnings("serial")
/**
 * 此时等于用Spring来创建了groupAction对象,
 * 在struts的配置文件中写Action的class的时候就不能写类,
 * 而应该写groupAction中对象
 * @author sunlight
 *
 */
@Controller("groupAction")
@Scope("prototype")
public class GroupAction extends ActionSupport implements ModelDriven<Group>{
	private IGroupService groupService;
	private Group group;

	@Override
	public Group getModel() {
		if (group==null) {
			group=new Group();
		}
		return group;
	}

	public IGroupService getGroupService() {
		return groupService;
	}

	@Resource
	public void setGroupService(IGroupService groupService) {
		this.groupService = groupService;
	}

	public Group getGroup() {
		return group;
	}

	public void setGroup(Group group) {
		this.group = group;
	}
	
	public String list(){
		ActionContext.getContext().put("gl", groupService.list());
		return SUCCESS;
	}
	
}

截图:

Spring3.x_Struts2.x_Hibernate3.x整合之个人备忘笔记_第3张图片

jar包图:

Spring3.x_Struts2.x_Hibernate3.x整合之个人备忘笔记_第4张图片

浏览器测试结果图:



个人备忘笔记~~~呵呵!

你可能感兴趣的:(spring,Hibernate,struts2,ssh,SSH整合)