SSH框架整(12)
1.1 Struts2導入jar包:
* struts2/apps/struts2-blank.war/WEB-INF/lib/*.jar
* 導入與spring整合的jar
* struts2/lib/struts2-spring-plugin-2.3.15.3.jar--- 整合Spring框架
* struts2/lib/struts2-json-plugin-2.3.15.3.jar--- 整合AJAX
* struts2/lib/struts2-convention-plugin-2.3.15.3.jar--- 使用Struts2註解開發.
1.2 * 配置
web.xml
<!-- 配置Struts2的核心過濾器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts.xml
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
</package>
</struts>
---------------------------------------------------------------------------------------------
2.1Spring導入jar包:
Spring3.2 開發最基本jar包
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar
AOP開發
spring-aop-3.2.0.RELEASE.jar
spring-aspects-3.2.0.RELEASE.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
Spring Jdbc開發
spring-jdbc-3.2.0.RELEASE.jar
spring-tx-3.2.0.RELEASE.jar
Spring事務管理
spring-tx-3.2.0.RELEASE.jar
Spring整合其他ORM框架
spring-orm-3.2.0.RELEASE.jar
Spring在web中使用
spring-web-3.2.0.RELEASE.jar
Spring整合Junit測試
spring-test-3.2.0.RELEASE.jar
(Spring沒有引入c3p0和數據庫驅動)
2.2* 配置:
applicationContext.xml
Log4j.properties
在web.xml中配置監聽器;
<!-- 配置Spring的監聽器 -->
<listener>
<!-- 監聽器默認加載的是WEB-INF/applicationContext.xml -->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定Spring框架的配置文件所在的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
---------------------------------------------------------------------------------------------
3.1Hibernate的jar包導入:
* 核心包:hibernate3.jar
* lib/required/*.jar
* lib/jpa/*.jar
* 引入hibernate整合日誌系統的jar包:
* 數據連接池:
* 數據庫驅動:
* 二級緩存:(可選的.)
* backport-util-concurrent.jar
* commons-logging.jar
* ehcache-1.5.0.jar
3.2* Hibernate的配置:
* hibernate.cfg.xml
* 映射:
* 格式:類名.hbm.xml
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
Struts2和Spring的整合:
1.新建包結構:
* cn.ssh.action
* cn.ssh.service
* cn.ssh.dao
* cn.ssh.vo
2.創建實體類:
* Book
package cn.ssh.vo; public class Book { private Integer id; private String name; private Double price; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } }
3.新建一個jsp頁面:
* addBook.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>添加圖書</h1> <s:form action="book_add" namespace="/" method="post" theme="simple"> 圖書名稱:<s:textfield name="name"/><br/> 圖書價格:<s:textfield name="price"/><br/> <s:submit value="添加圖書"/> </s:form> </body> </html>
4.編寫Action:
package cn.ssh.action; import cn.ssh.vo.Book; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class BookAction extends ActionSupport implements ModelDriven<Book> { // 模型驅動類 private Book book = new Book(); public Book getModel() { return book; } // 處理請求的方法: public String add() { System.out.println("web層的添加執行了..."); return NONE; } }
5.配置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> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="book_*" class="cn.ssh.action.BookAction" method="{1}"> </action> </package> </struts>
6.發布測試
信息: Server startup in 4928 ms web層的添加執行了...
Struts2和Spring的整合兩種方式:
Struts2自己管理Action:(方式一)多例
<action name="book_*" class="cn.ssh.action.BookAction" method="{1}"> * Struts2框架自動創建Action的類.
Action交給Spring管理:(方式二)默認是單例
可以在<action>標簽上通過一個偽類名方式進行配置: <action name="book_*" class="bookAction" method="{1}"></action> 在spring的配置文件中:[scope="prototype"] <!-- 配置action 這裏面的id 跟Struts class="bookAction對應*****重點看scope*****--> <bean id="bookAction" class="cn.ssh.action.BookAction" scope="prototype"></bean> (*****)註意:Action交給Spring管理一定要配置scope=”prototype”
第二種方式測試:
Struts.xml配置文件修改為:<action name="book_*" class="bookAction" method="{1}">
applicationContext.xml配置新增:
<!-- 配置action 這裏面的id 跟Struts class="bookAction對應*****重點看scope*****-->
<bean id="bookAction" class="cn.ssh.action.BookAction" scope="prototype">
</bean>
推薦使用二:
* 在Spring中管理的類,可以對其進行AOP開發.統一的管理.
Web層獲得Service:
傳統方式: * 獲得WebApplicationContext對象. * 通過WebAppolicationContext中getBean(“”); 實際開發中: * 引入了struts2-spring-plugin-2.3.15.3.jar * 有一個配置文件 : struts-plugin.xml 開啟常量 : <constant name="struts.objectFactory" value="spring" /> 引發另一個常量的執行:(Spring的工廠類按照名稱自動註入) struts.objectFactory.spring.autoWire = name
初始化整合:
BookAction類,修改如下:
//這樣就可以或得service對象(1) private BookService bookService; public void setBookService(BookService bookService) { this.bookService = bookService; } ... // 處理請求的方法: public String add(){ System.out.println("web層的添加執行了..."); //有了(1)就可以直接調用bookService的方法了。 bookService.add(book); return NONE; }
applicationContext.xml
<!-- 配置action 這裏面的id 跟Struts class="bookAction對應*****重點看scope*****--> <bean id="bookAction" class="cn.ssh.action.BookAction" scope="prototype"> <!-- action註入service --> <property name="bookService" ref="bookService"/> </bean> <!-- service的配置 --> <bean id="bookService" class="cn.ssh.service.BookService"> <!-- service註入dao --> <property name="bookDao" ref="bookDao"/> </bean> <!-- dao的配置 --> <bean id="bookDao" class="cn.ssh.dao.BookDao"> </bean>
測試結果:
web層的添加執行了... Service層保存圖書…… dao層保存圖書...
Spring整合Hibernate:
Spring整合Hibernate框架的時候有兩種方式:
零障礙整合:(第一種)
---------------------------------------------------------------------------------------------------------------------
可以在Spring中引入Hibernate的配置文件.
1.通過LocalSessionFactoryBean在spring中直接引用hibernate配置文件
<!-- 零障礙整合 在spring配置文件中引入hibernate的配置文件 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> </bean>
2.Spring提供了Hibernate的模板.只需要將HibernateTemplate模板註入給DAO.
* DAO繼承HibernateDaoSupport.
<!-- dao的配置 --> <bean id="bookDao" class="cn.ssh.dao.BookDao"> <!-- --> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
改寫DAO:繼承HibernateDaoSupport類.
public class BookDao extends HibernateDaoSupport{ public void save(Book book) { System.out.println("DAO層的保存圖書..."); this.getHibernateTemplate().save(book); } }
3.創建一個映射文件 (hibernate核心包hibernate-mapping-3.0.dtd頭):
<hibernate-mapping> <class name="cn.ssh.vo.Book" table="book"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="price"/> </class> </hibernate-mapping>
4.別忘記事務管理:
事務管理器:
<!-- 管理事務 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean>
5.註解管理事務:
<!-- 註解開啟事務 --> <tx:annotation-driven transaction-manager="transactionManager"/>
6.在業務層類上添加一個註解:
@Transactional
ps: @Transactional public class BookService {}
測試結果:
啟動tomcat 自動創建表 Hibernate: insert into book (name, price) values (?, ?)
沒有Hibernate配置文件的形式(二)
不需要Hibernate配置文件的方式,將Hibernate配置文件的信息直接配置到Spring中. Hibernate配置文件中的信息 : * 連接數據庫基本參數: * Hibernate常用屬性: * 連接池: * 映射:
把Hibernate配置文件整合Spring中:
刪除hibernate.xml連接池信息
<!-- 必須去配置的屬性 --> <!-- 配置數據庫連接的基本信息: --> <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="hibernate.connection.url"> jdbc:mysql://192.168.1.188:3306/ssh1 </property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123</property> <!-- C3P0連接池設定--> <!-- 使用c3po連接池 配置連接池提供的供應商--> <property name="connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property> <!--在連接池中可用的數據庫連接的最少數目 --> <property name="c3p0.min_size">5</property> <!--在連接池中所有數據庫連接的最大數目 --> <property name="c3p0.max_size">20</property> <!--設定數據庫連接的過期時間,以秒為單位, 如果連接池中的某個數據庫連接處於空閑狀態的時間超過了timeout時間,就會從連接池中清除 --> <property name="c3p0.timeout">120</property> <!--每3000秒檢查所有連接池中的空閑連接 以秒為單位--> <property name="c3p0.idle_test_period">3000</property>
在applicationContext.xml配置連接池:
<!-- 配置沒有hibernate配置文件 --> <!-- 連接池信息 --> <!-- 配置C3P0連接池 引入配置文件的方式 方法二--> <context:property-placeholder location="classpath:JDBC.properties"/> <bean id="dateSourceC3p0ref" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean>
--------------------------------------------------
Hibernate常用屬性:
刪除hibernate.xml方言信息
<!-- Hibernate的方言 --> <!-- 生成底層SQL不同的 --> <property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </property> <!-- 可選的屬性 --> <!-- 顯示SQL --> <property name="hibernate.show_sql">true</property> <!-- 格式化SQL --> <property name="hibernate.format_sql">true</property> <property name="hibernate.connection.autocommit">false</property> <!-- hbm:映射 to DDL: create drop alter --> <property name="hibernate.hbm2ddl.auto">update</property>
修改applicationContext.xml配置
<!-- 零障礙整合 在spring配置文件中引入hibernate的配置文件 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>刪除
<!-- 管理連接池 新增的-->
<property name="dataSource" ref="dateSourceC3p0ref"></property>
<!-- 配置hibernate屬性 Hibernate的方言-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.connection.autocommit">false</prop>
</props>
</property>
</bean>
--------------------------------------------------
映射
刪除hibernate.xml配置
<!-- 通知Hibernate加載那些映射文件 --> <mapping resource="cn/ssh/vo/Book.hbm.xml" />
添加applicationContext.xml配置
<!-- 加載映射 第一種 --> <property name="mappingResources"> <list> <value>cn/ssh/vo/Book.hbm.xml</value> </list> </property> ↓↓↓↓↓如果配置文件很多,用第二種方式。↓↓↓↓↓ <!-- 映射文件夾所在路徑 第二種 --> <property name="mappingDirectoryLocations"> <list> <value>classpath:cn/ssh/vo</value> </list> </property> </bean>
SSH框架整(12)