Strusts2+Hibernate4+Spring3的框架整合

搭建Spring3.2.1環境

1、把用到的Spring包拷貝到lib目錄下

   

2、新建配置文件 applicationContext.xml

 

加入<context: compontent-scan></context>標籤

<!-- 使用 annotation 自動註冊bean,並檢查@Controller, @Service, @Repository註解已被注入 -->

<context:component-scan base-package="pan.dao,pan.service" /> 

3、編寫測試類

 

3-1新建 UserServiceI.java接口

public interface UserServiceI {

public void test();

3-2新建 UserServiceImpl 實現類

//使用 annotation 自動註冊bean,並檢查@Service已被注入

@Service(value="userService")

public class UserServiceImpl implements UserServiceI {

@Override

public void test() {

System.out.println("Success!");

}

}

3-3新建測試類SpringTest.java

public class SpringTest {

@Test

public void test(){

ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"resources/spring/applicationContext.xml"});

UserServiceI user=(UserServiceI) ac.getBean("userService"); 

user.test();

}

}

 

 

 

4、Spring在Web.xml中的配置

  <!-- Spring的配置 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:resources/spring/applicationContext.xml</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoad erListener

</listener-class>

</listener>

 

到此Spring配置完畢 

 

搭建Struts2環境(Struts2Spring的整合)

 

1、添加struts依賴的jar包

 

2、配置struts.xml

<struts>

<!-- 開啓使用開發模式,詳細錯誤提示 -->

<constant name="struts.devMode" value="true"/>

<!-- 指定資源編碼 -->

<contant name="struts.i18n.encoding" value="UTF-8"/>

<!-- 默認後綴名 -->

<constant name="struts.action.extension" value="action"/>

<!-- 將對象交給spring管理 -->

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

<!-- 設置Web應用的默認Locale爲zh_CN -->

<contant name="struts.locale" value="zh_CN"/>

<!-- struts配置文件更改後是否重新加載 -->

<constant name="struts.configuration.xml.reload" value="true"/>

<!-- 設置瀏覽器是否緩存靜態內容 -->

<constant name="struts.serve.static.browserCache" value="true"/>

<package name=pan-default extends=struts-default 

namespace=/></package>

</struts>

 

3、配置web.xml

<!-- 配置struts -->

<filter>

   <filter-name>struts2</filter-name>

   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

   <init-param>

   <param-name>config</param-name>

   <param-value>struts-default.xml,struts-plugin.xml,resources/struts/struts.xml</param-value>

   </init-param>

</filter>

<filter-mapping>

   <filter-name>struts2</filter-name>

   <url-pattern>*.action</url-pattern>

   </filter-mapping>

</filter-mapping>

 

4、編寫測試方法(測試web)

 

public class UserAction {

public String test(){

return "success";

}

}

 

在struts.xml裏添加 

<struts>

<package name="admin" namespace="/a" extends="pan-default">

<!-- action測試 -->

<action name="user" class="pan.action.UserAction" method="test">

<result name="success">/WEB-INF/admin/test.jsp</result>

</action>

</package>

</struts>

 

測試結果:

  

 

 

5.1、編寫測試方法(測試Spring 和 Struts的結合是否成功 方法1

public String test2(){

WebApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext、 (ServletActionContext.getServletContext());

UserServiceI userService =  (UserServiceI)ac.getBean("userService");

userService.test();

return "success";

 

}

 

5.2、(測試Spring 和 Struts的結合是否成功 方法2

增加屬性 UserServiceI

private UserServiceI userService;

public UserServiceI getUserService() {

return userService;

}

@Autowired 

public void setUserService(UserServiceI userService) {

this.userService = userService;

}

 

測試結果 :

 

 

Hibernate4的配置(HibernateSpring的整合)

1、導入Hibernate4的核心jar

 

2、配置applicationContext.xml(因爲我的HibernateSpring的配置都寫在了該文件中)

<!-- Hibernate數據源的配置 -->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<!-- 指定連接數據庫的驅動 -->

<property name="driverClassName" value="com.mysql.jdbc.Driver" />

<!-- 指定連接數據庫的URL -->

<property name="url"

value="jdbc:mysql://localhost:3306/examonline" />

<!-- 指定連接數據庫的用戶名 -->

<property name="username" value="root" />

<!-- 指定連接數據庫的密碼 -->

<property name="password" value="root" />

<!-- 指定連接數據庫的連接池的初始化大小 -->

<property name="initialSize" value="5" />

<!-- 指定連接數據庫的連接池最大連接數 -->

<property name="maxActive" value="100" />

<!-- 指定連接數據庫的連接池最大空閒時間 -->

<property name="maxIdle" value="30" />

<!-- 指定連接數據庫的連接池最大等待時間 -->

<property name="maxWait" value="1000" />

</bean>

<!-- 配置hibernate session工廠 -->

<bean id="sessionFactory"

class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="hibernateProperties">

<props>

<prop key="cache.region.factory_class">org.hibernate.cache.EhCacheProvider</prop>

<prop key="cache.use_query_cache">true</prop>

<prop key="cache.use_second_level_cache">true</prop>

<prop key="current_session_context_class">thread</prop>

<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

<prop key="hibernate.hbm2ddl.auto">update</prop>

<prop key="hibernate.show_sql">true</prop>

</props>

</property>

<!-- 實體掃描路徑 自動掃描註解方式配置的hibernate類文件 -->

<property name="packagesToScan" value="pan.model"/><!-路徑一定要對,我在這兒栽了->

</bean>

<!-- 配置事務管理 -->

<!-- 聲明一個事務管理器 -->

<bean id="transactionManager"

class="org.springframework.orm.hibernate4.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory" />

</bean>

<!-- 攔截器方式配置事務 切面方式 -->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="save*" propagation="REQUIRED" />

<tx:method name="remove*" propagation="REQUIRED" />

<tx:method name="update*" propagation="REQUIRED" />

<tx:method name="append*" propagation="REQUIRED" />

<!-- read-only method-->

<tx:method name="find*" propagation="REQUIRED" read-only="true" />

<tx:method name="list*" propagation="REQUIRED" read-only="true" />

<tx:method name="count*" propagation="REQUIRED" read-only="true" />

</tx:attributes>

</tx:advice>

<aop:config>

<aop:pointcut id="mainServiceMethods" expression="execution(* pan.main.service.impl.*.*(..))" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="mainServiceMethods" />

</aop:config>

 

紅色字體爲須修改的地方,其它部分可不變。

 

3、編寫測試類和方法

 

 

model實體類

@Entity

@Table(name="t_user")

@DynamicInsert(true)

@DynamicUpdate(true)

@SuppressWarnings("serial")

public class Tuser implements Serializable{

private String id;

/*

 * 用戶名

 */

private String name;

/*

 * 密碼

 */

private String password;

/*

 * 創建時間

 */

private Date createdatetime;

/*

 * 修改時間

 */

private Date modifydatetime;

@Id

@Column(name="id", length=36, nullable=false)

public String getId() {

return id;

}

@Column(name="name", unique=true, length=64, nullable=false)

public String getName() {

return name;

}

@Column(name="password", length=64, nullable=false)

public String getPassword() {

return password;

}

@Column(name="createdatetime")

public Date getCreatedatetime() {

if(this.createdatetime != null){

return createdatetime;

}

return new Date();

}

@Column(name="modifydatetime")

public Date getModifydatetime() {

if(this.modifydatetime != null){

return modifydatetime;

}

return new Date();

}

(......省略set方法

  

UserDaoI.java

@Repository("userDao")

public interface UserDaoI {

public Serializable save(Tuser tuser);

}

-------------------------------------------------------------

UserDaoImpl.java

@Repository("userDao")

public class UserDaoImpl implements UserDaoI {

private SessionFactory sessionFactory;

@Resource

public void setSessionFactory(SessionFactory sessionFactory) {

this.sessionFactory = sessionFactory;

}

 

@Override

public Serializable save(Tuser tuser) {

return  this.sessionFactory.getCurrentSession().save(tuser);

}

  

UserServiceI.java 

@Repository("userDao")

public interface UserDaoI {

public Serializable save(Tuser tuser);

}

 

------------------------------------------------------------

UserServiceImpl.java

@Service(value="userService")//使用 annotation 自動註冊bean,並檢查@Service已被注入

public class UserServiceImpl implements UserServiceI {

private UserDaoI userDao;

@Resource

public void setUserDao(UserDaoI userDao) {

this.userDao = userDao;

}

@Override

public Serializable save(Tuser tuser) {

return userDao.save(tuser);

}

}

 

HibernateTest測試方法:

 

public class HibernateTest {

@Test

public void test(){

ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"classpath:resources/spring/applicationContext.xml"});

UserServiceI userService = (UserServiceI) ac.getBean("userService");

Tuser tuser = new Tuser();

tuser.setId(UUID.randomUUID().toString());

tuser.setName("admin");

tuser.setPassword("23341");

tuser.setCreatedatetime(new Date());

tuser.setModifydatetime(new Date());

userService.save(tuser);

}

}

 

測試結果 :

 

 

 

到此Struts2Hibernate4Spring3整合完畢。

(配置過程中,可能需要導入依賴的jar包,根據控制檯提示信息導入即可。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章