目的:搭建java SSH2(struts2+spring+hibernate)经典框架,供以后的项目直接使用。本例让spring管理struts2和hibernate的事务。贴出详细的xml配置。
1.新建web项目
1)打开myeclipse,我的myeclipse10
2)菜单【file】-【new】-【web project】
3)填写项目名称“ssh“,然后点击finish完成。
2.先添加整合Spring
1)右键点击项目选择【myeclipse】-【add spring capabilites】
2)选择如图spring 3.1 core Libraries,spring 3.1 persistence Libraries,spring 3.1 web Libraries包,并且还要选择把jar包复制到web中lib下(避免把项目发给别人或上传到svn后,别人导入项目没有你的环境)。点击next。
3)接下来把spring 配置文件放到web-inf中,最好放在这里面。
点击finish就完成spring的配置了。
3.添加hibernate整合
1)右键点击项目选择【myeclipse】-【add hibernate capabilites】,同样将jar复制到web下。然后点击next。
2)选择spring配置文件将hibernate交给spring管理。点击next.
3)选择已存在的spring文件。点击next。
4)这里需要选择你新建的JDBC连接,如果没有新建的话去 DB Browser(Windows→Show View→Other→MyEclipse Database→DB Browser)里面新建。点击next.
5)不创建SessionFactory,因为前边这个已经被SprIng整合进去了
点击finish完成hibernate的配置。
3.添加struts2整合
1)右键点击项目选择【myeclipse】-【add struts capabilites】,选择struts2.1。然后点击next。
2)选择struts2 jar包。
点击Finish完成了整个ssh2框架的搭建。搭建好的项目目录如下:
4.xml配置。
1)web.xml(注意添加了spring的listener)
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <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>
2)struts.xml(注意我这里的配置是action输出json,并且我是交给了spring管理action的,bean是和spring中对应的)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.objectFactory" value="spring" /> <constant name="struts.multipart.maxSize" value="1000000000"/> <package name="action" namespace="/" extends="struts-default,json-default"> <action name="userAction" class="userAction"><result type="json"><param name="root">json</param></result></action> </package> </struts>
3)applicationContext.xml
a.这里我配置了事物回滚,一个action一个事物
b.action的bean要配置scope="prototype",spring默认不是多线程,而action是多线程的。
c.配置里面的bean都是by name,不要奇怪为啥没有ref
<?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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" default-autowire="byName"> <!-- 数据库配置 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property name="url" value="jdbc:mysql://localhost:3306/ckd_ios?characterEncoding=utf-8"></property> <property name="username" value="root"></property> <property name="password" value=""></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.hbm2ddl.auto">validate</prop> </props> </property> <property name="mappingResources"> <list> <!--配置dao也要在这里配置一下--> <value>dao/user/User.hbm.xml</value> </list> </property> </bean> <!--配置事物回滚--> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="allDaoMethod" expression="execution(* service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="allDaoMethod" /> </aop:config> <!-- action --> <bean id="userAction" class="action.UserAction" scope="prototype" /> <!-- services --> <bean id="userService" class="service.UserService" /> <!-- dao --> <bean id="userDAO" class="dao.user.UserDAO"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> </beans>
4)log4j配置
#日志文件输出 # Root logger option log4j.rootLogger=INFO,console,dailyFile ##Daily log: log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.dailyFile.File=../logs/ckdLog/ckd.log log4j.appender.dailyFile.Append=true log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout log4j.appender.dailyFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n log4j.appender.dailyFile.Threshold=INFO log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd #控制台输出 # Direct log messages to console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Threshold=INFO log4j.appender.console.ImmediateFlush=false log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %-5p %c{1}\:%L - %m%n