許久沒更新博客了! spring還有一章aop(面向切麵),我就沒講述了,你們可以去看下代理模式。 那麼我們開始整合:struts2 2.3.4 ,hibernate 5.2.10 ,spring 4.3.10 ,一直以來用到的xml式,那麼整合也不例外,就是有些麻煩。另外註解式想瞭解請留言(雖然s ...
許久沒更新博客了!
spring還有一章aop(面向切麵),我就沒講述了,你們可以去看下代理模式。
那麼我們開始整合:struts2 2.3.4 ,hibernate 5.2.10 ,spring 4.3.10 ,一直以來用到的xml式,那麼整合也不例外,就是有些麻煩。另外註解式想瞭解請留言(雖然ssh已過時)。
首先建立一個maven項目,導入以下依賴:
<!-- javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0</version> <scope>provided</scope> </dependency> <!-- hibernate-core --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.10.Final</version> </dependency> <!-- spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.10.RELEASE</version> </dependency> <!-- spring-orm --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.3.10.RELEASE</version> </dependency> <!-- spring-aspects --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.10.RELEASE</version> </dependency> <!-- struts2-core --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.24</version> </dependency> <!-- struts2-spring-plugin --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.24</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <!-- c3p0 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency>
由於整個用xml文件,所以分開配置,比較容易理解:
在resources文件夾下建立以下xml
1.applicationContext-public.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 配置資料庫連接池 c3p0 --> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="root"></property> <property name="password" value="sasa"></property> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssh"></property> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="initialPoolSize" value="3"></property> <property name="maxPoolSize" value="20"></property> </bean> <!-- 配置sessionFactory --> <bean id="sessionFactoryBean" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="datasource"></property>
<!--可以不用--> <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> <property name="mappingLocations" value="classpath:com/entity/*.hbm.xml"></property> </bean> <!-- 配置事務 --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactoryBean"></property> </bean> <!-- 配置事務屬性 --> <tx:advice id="myAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="*" /> </tx:attributes> </tx:advice> <!-- 配置事務切點 --> <aop:config> <aop:pointcut expression="execution(* com.dao.*.*(..))" id="myPointcut" /> <aop:advisor advice-ref="myAdvice" pointcut-ref="myPointcut" /> </aop:config> </beans>
建立basedao,用戶dao層獲取seesion來獲取數據
package com.dao.impl; import org.hibernate.Session; import org.hibernate.SessionFactory; public class BaseDao { private static SessionFactory sessionFactory; public static SessionFactory getSessionFactory() { return sessionFactory; } public static void setSessionFactory(SessionFactory sessionFactory) { BaseDao.sessionFactory = sessionFactory; } public static Session getSession() { return sessionFactory.getCurrentSession(); } }
建立dao類繼承basedao
package com.dao.impl; import java.util.List; import com.dao.IMenuDao; import com.entity.Menu; public class MenuDao extends BaseDao implements IMenuDao { public List<Menu> getAll(String rid, String title) { //引用basedao getSession()方法
getSession().createQuery(sql) .....
return null;
}
}
2.applicationContext-dao.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!--此為公共類 獲取session--> <bean id="baseDao" class="com.dao.impl.BaseDao">
<!--name為basedao中的引用對象名 其實是set方法名 因為對象的set方法一般與對象名一致 ref為applicationContext-public.xml中配置sessionFactory 的id-->
<property name="sessionFactory" ref="sessionFactoryBean"></property> </bean>
<!--id 自己寫 class為類全路徑 parent意為父類,即繼承了上面的basedao-->
</bean>
<bean id="menuDao" class="com.dao.impl.MenuDao" parent="baseDao">
</bean>
</beans>
建立biz類引用dao類
package com.biz.impl; import java.util.List; import com.biz.IMenuBiz; import com.dao.IMenuDao; import com.entity.Menu; public class MenuBiz implements IMenuBiz {
//引用dao 提供getter and setter private IMenuDao iMenuDao; public IMenuDao getiMenuDao() { return iMenuDao; } public void setiMenuDao(IMenuDao iMenuDao) { this.iMenuDao = iMenuDao; } public List<Menu> getAll(String rid,String title) { return iMenuDao.getAll(rid,title); } }
3.applicationContext-biz.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<bean id="menuBiz" class="com.biz.impl.MenuBiz">
<!--name biz類中引用對象名 ref為applicationContext-dao.xml中對象dao的id-->
<property name="iMenuDao" ref="menuDao"></property>
</bean>
</beans>
建立Action類引用biz
package com.action; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.biz.IMenuBiz; import com.entity.Menu; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import net.sf.json.JSONArray; public class MenuAction extends ActionSupport implements ModelDriven<Menu> { private static final long serialVersionUID = 1L; private Menu menu = new Menu();
//引用的biz private IMenuBiz iMenuBiz; public IMenuBiz getiMenuBiz() { return iMenuBiz; } public void setiMenuBiz(IMenuBiz iMenuBiz) { this.iMenuBiz = iMenuBiz; } public Menu getModel() { return menu; } }
4.建立applicationContext-action.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <bean id="menuAction" class="com.action.MenuAction" scope="prototype">
//配置與dao,biz意思一樣 <property name="iMenuBiz" ref="menuBiz"></property> </bean> </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> <package name="mypackage" extends="struts-default"> <!--calss為applicationContext-action.xml對應的id--> <action name="menu*" class="menuAction" method="{1}"> <result name="success">/index.jsp</result> <result name="error">/login.jsp</result> </action> </package> </struts>
web.xml配置
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-*.xml</param-value> </context-param> <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>*.action</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
整個下來很容易配錯,要細心。關於在其中的許多解釋就沒說了,附圖一張: ssh完