【转载】Ssh整合开发介绍和简单的登入案例实现

Ssh整合开发介绍和简单的登入案例实现

Ssh整合开发介绍和简单的登入案例实现

    1. 一  介绍:
    2. Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开发,这是目前我的整合开发的使用技术和版本,使用的数据库为mySql。使用的开发工具是eclipse,eplipse的版本为Indigo Service Release 2
    3. 二  搭建环境
    4. 1.  首先要先引入struts2和sping和hibernate所需要的包
    5. (1)struts2的包为:
    6. struts-2.3.1.2\lib\ struts2-core-2.3.1.2.jar
    7. struts-2.3.1.2\lib\ognl-3.0.4.jar
    8. struts-2.3.1.2\lib\ xwork-core-2.3.1.2.jar
    9. struts-2.3.1.2\lib\ freemarker-2.3.18.jar
    10. struts-2.3.1.2\lib\commons-fileupload-1.2.2.jar
    11. struts-2.3.1.2\lib\ commons-io-2.0.1.jar
    12. struts-2.3.1.2\lib\commons-lang-2.5.jar
    13. struts-2.3.1.2\lib\commons-logging-1.1.1.jar
    14. struts-2.3.1.2\lib \struts2-json-plugin-2.3.1.2.jar
    15. struts-2.3.1.2\lib \struts2-spring-plugin-2.3.1.2.jar
    16. (2)引入hibernate的包
    17. hibernate-distribution-3.6.8.Final\lib\required\*.jar  所有的jar包
    18. hibernate-distribution-3.6.8.Final\lib\jpa\hibernate-jpa-2.0-api-1.0.1.Final.jar
    19. hibernate-distribution-3.6.8.Final\ hibernate3.jar
    20. (3)spring的包为:
    21. spring-framework-2.5.6\dist\ spring.jar
    22. spring-framework-2.5.6\lib\c3p0\c3p0-0.9.1.2.jar
    23. spring-framework-2.5.6\lib\aspectj\*.jar
    24. spring-framework-2.5.6\lib\j2ee\common-annotations.jar
    25. spring-framework-2.5.6\lib\log4j\log4j-1.2.15.jar
    26. spring-framework-2.5.6\lib\jakarta-commons\ commons-logging.jar
    27. spring-framework-2.5.6\lib\cglib\cglib-nodep-2.1_3.jar
    28. spring-framework-2.5.6\lib\dom4j\dom4j-1.6.1.jar
    29. 2.  配置spring下所需要的文件
    30. (1)首先配置spring所需要的xml文件
    31. 我们在class下,即在src下创建一个applicationContext.xml的xml文件,文件的头文件因为要用到各种标签,所以我们在引入头文件的时候尽量引的比较多点,代码为:
    32. <?xml version="1.0" encoding="UTF-8"?>
    33. <beans xmlns="http://www.springframework.org/schema/beans"
    34. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    35. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    36. xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    37. http://www.springframework.org/schema/aop
    38. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    39. http://www.springframework.org/schema/context
    40. http://www.springframework.org/schema/context/spring-context-2.5.xsd
    41. http://www.springframework.org/schema/tx
    42. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    43. </beans>
    44. (2)在xml中配置和数据库相关联,并用c3p0来配置数据库连接池
    45. <!-- 数据库的连接池 -->
    46. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    47. destroy-method="close">
    48. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    49. <property name="jdbcUrl"
    50. value="jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8" />
    51. <property name="user" value="root" />
    52. <property name="password" value="1234" />
    53. <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
    54. <property name="initialPoolSize" value="1" />
    55. <!--连接池中保留的最小连接数。 -->
    56. <property name="minPoolSize" value="1" />
    57. <!--连接池中保留的最大连接数。Default: 15 -->
    58. <property name="maxPoolSize" value="300" />
    59. <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
    60. <property name="maxIdleTime" value="60" />
    61. <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
    62. <property name="acquireIncrement" value="5" />
    63. <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
    64. <property name="idleConnectionTestPeriod" value="60" />
    65. </bean>
    66. 当然,这样所写的可以在一个properties中读取。读取外部文件在xml中的使用为:
    67. <!-- 读取外部的文件 -->
    68. <context:property-placeholder location="jdbc.properties" />
    69. (3)配置sessionFactory工厂,相当于是hibernate.cfg.xml里面的配置
    70. <!-- sessionFactory工厂 -->
    71. <bean id="sessionFactory"
    72. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    73. <!-- 注入数据源 -->
    74. <property name="dataSource" ref="dataSource"></property>
    75. <!-- hibernate映射文件的引入 -->
    76. <property name="mappingResources">
    77. <list>
    78. <value>cn/csdn/hr/s2sh/domain/Admin.hbm.xml</value>
    79. </list>
    80. </property>
    81. <!-- 配置hibernate属性的设置 -->
    82. <property name="hibernateProperties">
    83. <props>
    84. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
    85. <prop key="hibernate.hbm2ddl.auto">update</prop>
    86. <prop key="hibernate.show_sql">true</prop>
    87. <prop key="hibernate.format_sql">true</prop>
    88. </props>
    89. </property>
    90. </bean>
    91. 3.配置struts2.xml中需要的内容
    92. (1)配置基本的struts2.xml
    93. <!DOCTYPE struts PUBLIC
    94. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    95. "http://struts.apache.org/dtds/struts-2.3.dtd">
    96. <struts>
    97. <!--使用spring创建管理struts2的action操作 -->
    98. <constant name="struts.objectFactory" value="spring"/>
    99. <include file="struts-admin.xml"></include>
    100. </struts>
    101. 注:其中include是引入的文件,一下的语句是非常重要的:
    102. <constant name="struts.objectFactory" value="spring"/>,它是struts2和spring的连接的关键
    103. (2)引入的struts-admin.xml文件,意在检测并作出一个简单的登入的实现
    104. <!DOCTYPE struts PUBLIC
    105. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    106. "http://struts.apache.org/dtds/struts-2.3.dtd">
    107. <struts>
    108. <package name="admin" extends="struts-default" namespace="/csdn">
    109. <!-- class的名称  等于spring中action配置文件中的id名称 -->
    110. <action name="loginAdmin" class="adminAction" method="login">
    111. <result name="success">../index.jsp</result>
    112. </action>
    113. </package>
    114. </struts>
    115. 4.  Hibernate.cfg.xml中的内容可以省略,它已经在spring中的xml中配置了
    116. 5.搭建层之间的关系
    117. (1)首先是domain,包为cn.csdn.hr.s2sh.domain,我们以admin为例
    118. 属性为id和name和pass
    119. 封装的实体类为:
    120. package cn.csdn.hr.s2sh.domain;
    121. import java.io.Serializable;
    122. public class Admin implements Serializable {
    123. private static final long serialVersionUID = 1L;
    124. private Integer id;
    125. private String name;
    126. private String pass;
    127. public Admin() {
    128. super();
    129. // TODO Auto-generated constructor stub
    130. }
    131. public Admin(Integer id, String name, String pass) {
    132. super();
    133. this.id = id;
    134. this.name = name;
    135. this.pass = pass;
    136. }
    137. public Integer getId() {
    138. return id;
    139. }
    140. public void setId(Integer id) {
    141. this.id = id;
    142. }
    143. public String getName() {
    144. return name;
    145. }
    146. public void setName(String name) {
    147. this.name = name;
    148. }
    149. public String getPass() {
    150. return pass;
    151. }
    152. public void setPass(String pass) {
    153. this.pass = pass;
    154. }
    155. @Override
    156. public String toString() {
    157. return "Admin [id=" + id + ", name=" + name + ", pass=" + pass + "]";
    158. }
    159. }
    160. (2)在同一个包下的实体类的映射文件
    161. <?xml version="1.0" encoding="UTF-8"?>
    162. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    163. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    164. <hibernate-mapping package="cn.csdn.hr.s2sh.domain">
    165. <class name="Admin" table="admin">
    166. <id name="id" column="id">
    167. <generator class="native"></generator>
    168. </id>
    169. <property name="name" column="name"></property>
    170. <property name="pass" column="pass"></property>
    171. </class>
    172. </hibernate-mapping>
    173. (3)创建dao层,创建的包名为cn.csdn.hr.s2sh.dao,创建的接口名为AdminDao,类名为AdminDaoImpl
    174. 下面是创建的接口 AdminDao.java
    175. package cn.csdn.hr.s2sh.dao;
    176. import java.util.List;
    177. import cn.csdn.hr.s2sh.domain.Admin;
    178. public interface AdminDao {
    179. public Admin login(final String name,final String pass);
    180. }
    181. 创建的类为AdminDaoImpl.java
    182. package cn.csdn.hr.s2sh.dao;
    183. import java.sql.SQLException;
    184. import java.util.List;
    185. import org.hibernate.HibernateException;
    186. import org.hibernate.Session;
    187. import org.springframework.orm.hibernate3.HibernateCallback;
    188. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    189. import cn.csdn.hr.s2sh.domain.Admin;
    190. @SuppressWarnings("unchecked")
    191. public class AdminDaoImpl extends HibernateDaoSupport implements AdminDao {
    192. public Admin login(final String name, final String pass) {
    193. return (Admin) this.getHibernateTemplate().execute(
    194. new HibernateCallback() {
    195. public Object doInHibernate(Session session)
    196. throws HibernateException, SQLException {
    197. // TODO Auto-generated method stub
    198. Object obj = session
    199. .createQuery(
    200. "from Admin where name=:name and pass=:pass")
    201. .setString("name", name)
    202. .setString("pass", pass).uniqueResult();
    203. return obj;
    204. }
    205. });
    206. }
    207. }
    208. (4)创建service层,创建的包名为cn.csdn.hr.s2sh.service
    209. 创建的AdminService.java接口
    210. package cn.csdn.hr.s2sh.service;
    211. import cn.csdn.hr.s2sh.dao.AdminDao;
    212. public interface AdminService extends AdminDao{
    213. }
    214. 创建的AdminServiceImpl.java
    215. package cn.csdn.hr.s2sh.service;
    216. import java.util.List;
    217. import org.springframework.transaction.TransactionStatus;
    218. import org.springframework.transaction.support.TransactionCallback;
    219. import org.springframework.transaction.support.TransactionTemplate;
    220. import cn.csdn.hr.s2sh.dao.AdminDao;
    221. import cn.csdn.hr.s2sh.domain.Admin;
    222. public class AdminServiceImpl implements AdminService {
    223. private AdminDao adminDao;
    224. public void setAdminDao(AdminDao adminDao) {
    225. this.adminDao = adminDao;
    226. }
    227. public Admin login(String name, String pass) {
    228. // TODO Auto-generated method stub
    229. return adminDao.login(name, pass);
    230. }
    231. }
    232. 6.创建访问struts2的时候的action,我们把action放到一个bean-action.xml中
    233. <?xml version="1.0" encoding="UTF-8"?>
    234. <beans xmlns="http://www.springframework.org/schema/beans"
    235. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    236. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    237. xsi:schemaLocation="http://www.springframework.org/schema/beans
    238. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    239. http://www.springframework.org/schema/aop
    240. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    241. http://www.springframework.org/schema/context
    242. http://www.springframework.org/schema/context/spring-context-2.5.xsd
    243. http://www.springframework.org/schema/tx
    244. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    245. <!-- 创建struts2中的action -->
    246. <!-- 配置admin的action -->
    247. <bean id="adminAction" class="cn.csdn.hr.s2sh.action.AdminAction"
    248. scope="prototype">
    249. <property name="adminService" ref="adminServiceImpl"></property>
    250. </bean>
    251. </beans>
    252. 而ref的adminServiceImpl是在bean-service.xml中
    253. <?xml version="1.0" encoding="UTF-8"?>
    254. <beans xmlns="http://www.springframework.org/schema/beans"
    255. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    256. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    257. xsi:schemaLocation="http://www.springframework.org/schema/beans
    258. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    259. http://www.springframework.org/schema/aop
    260. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    261. http://www.springframework.org/schema/context
    262. http://www.springframework.org/schema/context/spring-context-2.5.xsd
    263. http://www.springframework.org/schema/tx
    264. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    265. <!-- admin的业务操作 -->
    266. <bean id="adminServiceImpl" class="cn.csdn.hr.s2sh.service.AdminServiceImpl">
    267. <property name="adminDao" ref="adminDaoImpl"></property>
    268. </bean>
    269. </beans>
    270. 上面的ref是adminDaoImpl,在beans-dao.xml
    271. <?xml version="1.0" encoding="UTF-8"?>
    272. <beans xmlns="http://www.springframework.org/schema/beans"
    273. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    274. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    275. xsi:schemaLocation="http://www.springframework.org/schema/beans
    276. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    277. http://www.springframework.org/schema/aop
    278. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    279. http://www.springframework.org/schema/context
    280. http://www.springframework.org/schema/context/spring-context-2.5.xsd
    281. http://www.springframework.org/schema/tx
    282. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    283. <!-- hibernatedao的模板类 HibernateDaoSuppor 抽象类不可以实例化 加上abstract="true" -->
    284. <bean id="hibernateDaoSupport"
    285. class="org.springframework.orm.hibernate3.support.HibernateDaoSupport"
    286. abstract="true">
    287. <property name="sessionFactory" ref="sessionFactory"></property>
    288. </bean>
    289. <!-- admin的dao对象 -->
    290. <bean id="adminDaoImpl" class="cn.csdn.hr.s2sh.dao.AdminDaoImpl"
    291. parent="hibernateDaoSupport" />
    292. </beans>
    293. 然后我们把上面的三个beans.xml导入到applicationContext.xml中
    294. <!-- 导入其他的配置文件 -->
    295. <import resource="beans-dao.xml" />
    296. <import resource="beans-service.xml" />
    297. <import resource="beans-action.xml" />
    298. 7.配置web.xml
    299. <?xml version="1.0" encoding="UTF-8"?>
    300. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    301. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    302. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    303. id="WebApp_ID" version="2.5">
    304. <display-name>s2sh</display-name>
    305. <welcome-file-list>
    306. <welcome-file>index.html</welcome-file>
    307. <welcome-file>index.htm</welcome-file>
    308. <welcome-file>index.jsp</welcome-file>
    309. <welcome-file>default.html</welcome-file>
    310. <welcome-file>default.htm</welcome-file>
    311. <welcome-file>default.jsp</welcome-file>
    312. </welcome-file-list>
    313. <!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 -->
    314. <context-param>
    315. <param-name>contextConfigLocation</param-name>
    316. <param-value>classpath:applic*.xml</param-value>
    317. </context-param>
    318. <!-- 对Spring容器进行实例化 -->
    319. <listener>
    320. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    321. </listener>
    322. <!-- struts2 的配置 -->
    323. <filter>
    324. <filter-name>struts2</filter-name>
    325. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    326. </filter>
    327. <filter-mapping>
    328. <filter-name>struts2</filter-name>
    329. <url-pattern>/*</url-pattern>
    330. </filter-mapping>
    331. <!-- 配置 使用spring解决hibernate因session关闭导致的延迟加载例外问题 -->
    332. <filter>
    333. <filter-name>OpenSessionInViewFilter</filter-name>
    334. <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    335. <init-param>
    336. <!-- 指定org.springframework.orm.hibernate3.LocalSessionFactoryBean在spring配置文件中的名称,默认值为sessionFactory.如果LocalSessionFactoryBean在spring中的名称不是sessionFactory,该参数一定要指定,否则会出现找不到sessionFactory的例外 -->
    337. <param-name>sessionFactoryBeanName</param-name>
    338. <param-value>sessionFactory</param-value>
    339. </init-param>
    340. </filter>
    341. <filter-mapping>
    342. <filter-name>OpenSessionInViewFilter</filter-name>
    343. <url-pattern>/*</url-pattern>
    344. </filter-mapping>
    345. <!-- 使用spring解决struts2的中文乱码的问题 -->
    346. <filter>
    347. <filter-name>encoding</filter-name>     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    348. <init-param>
    349. <param-name>encoding</param-name>
    350. <param-value>UTF-8</param-value>
    351. </init-param>
    352. </filter>
    353. <filter-mapping>
    354. <filter-name>encoding</filter-name>
    355. <url-pattern>/*</url-pattern>
    356. </filter-mapping>
    357. </web-app>
    358. 8.我们来做一个简单的登入,使用的jsp页面为:
    359. <body>
    360. <div>
    361. <form action="/s2sh/csdn/loginAdmin.action" method="get">
    362. 用户名:<input type="text" name="admin.name"/><br/>
    363. 密  码:<input type="password" name="admin.pass"/><br/>
    364. <input type="submit" value="登入"/>
    365. <input type="reset" value="重置"/>
    366. </form>
    367. </div>
    368. <div>
    369. 用户名为:${admin.name}
    370. </div>
    371. </body>
    372. 访问到的action的处理为:
    373. package cn.csdn.hr.s2sh.action;
    374. import cn.csdn.hr.s2sh.domain.Admin;
    375. import cn.csdn.hr.s2sh.service.AdminService;
    376. import com.opensymphony.xwork2.ActionSupport;
    377. public class AdminAction extends ActionSupport {
    378. private static final long serialVersionUID = 1L;
    379. private AdminService adminService;
    380. private Admin admin;
    381. public Admin getAdmin() {
    382. return admin;
    383. }
    384. public void setAdmin(Admin admin) {
    385. this.admin = admin;
    386. }
    387. // 注入
    388. public void setAdminService(AdminService adminService) {
        1. Ssh整合开发介绍和简单的登入案例实现
        2. 一  介绍:
        3. Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开发,这是目前我的整合开发的使用技术和版本,使用的数据库为mySql。使用的开发工具是eclipse,eplipse的版本为Indigo Service Release 2
        4. 二  搭建环境
        5. 1.  首先要先引入struts2和sping和hibernate所需要的包
        6. (1)struts2的包为:
        7. struts-2.3.1.2\lib\ struts2-core-2.3.1.2.jar
        8. struts-2.3.1.2\lib\ognl-3.0.4.jar
        9. struts-2.3.1.2\lib\ xwork-core-2.3.1.2.jar
        10. struts-2.3.1.2\lib\ freemarker-2.3.18.jar
        11. struts-2.3.1.2\lib\commons-fileupload-1.2.2.jar
        12. struts-2.3.1.2\lib\ commons-io-2.0.1.jar
        13. struts-2.3.1.2\lib\commons-lang-2.5.jar
        14. struts-2.3.1.2\lib\commons-logging-1.1.1.jar
        15. struts-2.3.1.2\lib \struts2-json-plugin-2.3.1.2.jar
        16. struts-2.3.1.2\lib \struts2-spring-plugin-2.3.1.2.jar
        17. (2)引入hibernate的包
        18. hibernate-distribution-3.6.8.Final\lib\required\*.jar  所有的jar包
        19. hibernate-distribution-3.6.8.Final\lib\jpa\hibernate-jpa-2.0-api-1.0.1.Final.jar
        20. hibernate-distribution-3.6.8.Final\ hibernate3.jar
        21. (3)spring的包为:
        22. spring-framework-2.5.6\dist\ spring.jar
        23. spring-framework-2.5.6\lib\c3p0\c3p0-0.9.1.2.jar
        24. spring-framework-2.5.6\lib\aspectj\*.jar
        25. spring-framework-2.5.6\lib\j2ee\common-annotations.jar
        26. spring-framework-2.5.6\lib\log4j\log4j-1.2.15.jar
        27. spring-framework-2.5.6\lib\jakarta-commons\ commons-logging.jar
        28. spring-framework-2.5.6\lib\cglib\cglib-nodep-2.1_3.jar
        29. spring-framework-2.5.6\lib\dom4j\dom4j-1.6.1.jar
        30. 2.  配置spring下所需要的文件
        31. (1)首先配置spring所需要的xml文件
        32. 我们在class下,即在src下创建一个applicationContext.xml的xml文件,文件的头文件因为要用到各种标签,所以我们在引入头文件的时候尽量引的比较多点,代码为:
        33. <?xml version="1.0" encoding="UTF-8"?>
        34. <beans xmlns="http://www.springframework.org/schema/beans"
        35. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
        36. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        37. xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        38. http://www.springframework.org/schema/aop
        39. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        40. http://www.springframework.org/schema/context
        41. http://www.springframework.org/schema/context/spring-context-2.5.xsd
        42. http://www.springframework.org/schema/tx
        43. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
        44. </beans>
        45. (2)在xml中配置和数据库相关联,并用c3p0来配置数据库连接池
        46. <!-- 数据库的连接池 -->
        47. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        48. destroy-method="close">
        49. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        50. <property name="jdbcUrl"
        51. value="jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8" />
        52. <property name="user" value="root" />
        53. <property name="password" value="1234" />
        54. <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
        55. <property name="initialPoolSize" value="1" />
        56. <!--连接池中保留的最小连接数。 -->
        57. <property name="minPoolSize" value="1" />
        58. <!--连接池中保留的最大连接数。Default: 15 -->
        59. <property name="maxPoolSize" value="300" />
        60. <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        61. <property name="maxIdleTime" value="60" />
        62. <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
        63. <property name="acquireIncrement" value="5" />
        64. <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
        65. <property name="idleConnectionTestPeriod" value="60" />
        66. </bean>
        67. 当然,这样所写的可以在一个properties中读取。读取外部文件在xml中的使用为:
        68. <!-- 读取外部的文件 -->
        69. <context:property-placeholder location="jdbc.properties" />
        70. (3)配置sessionFactory工厂,相当于是hibernate.cfg.xml里面的配置
        71. <!-- sessionFactory工厂 -->
        72. <bean id="sessionFactory"
        73. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        74. <!-- 注入数据源 -->
        75. <property name="dataSource" ref="dataSource"></property>
        76. <!-- hibernate映射文件的引入 -->
        77. <property name="mappingResources">
        78. <list>
        79. <value>cn/csdn/hr/s2sh/domain/Admin.hbm.xml</value>
        80. </list>
        81. </property>
        82. <!-- 配置hibernate属性的设置 -->
        83. <property name="hibernateProperties">
        84. <props>
        85. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
        86. <prop key="hibernate.hbm2ddl.auto">update</prop>
        87. <prop key="hibernate.show_sql">true</prop>
        88. <prop key="hibernate.format_sql">true</prop>
        89. </props>
        90. </property>
        91. </bean>
        92. 3.配置struts2.xml中需要的内容
        93. (1)配置基本的struts2.xml
        94. <!DOCTYPE struts PUBLIC
        95. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        96. "http://struts.apache.org/dtds/struts-2.3.dtd">
        97. <struts>
        98. <!--使用spring创建管理struts2的action操作 -->
        99. <constant name="struts.objectFactory" value="spring"/>
        100. <include file="struts-admin.xml"></include>
        101. </struts>
        102. 注:其中include是引入的文件,一下的语句是非常重要的:
        103. <constant name="struts.objectFactory" value="spring"/>,它是struts2和spring的连接的关键
        104. (2)引入的struts-admin.xml文件,意在检测并作出一个简单的登入的实现
        105. <!DOCTYPE struts PUBLIC
        106. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        107. "http://struts.apache.org/dtds/struts-2.3.dtd">
        108. <struts>
        109. <package name="admin" extends="struts-default" namespace="/csdn">
        110. <!-- class的名称  等于spring中action配置文件中的id名称 -->
        111. <action name="loginAdmin" class="adminAction" method="login">
        112. <result name="success">../index.jsp</result>
        113. </action>
        114. </package>
        115. </struts>
        116. 4.  Hibernate.cfg.xml中的内容可以省略,它已经在spring中的xml中配置了
        117. 5.搭建层之间的关系
        118. (1)首先是domain,包为cn.csdn.hr.s2sh.domain,我们以admin为例
        119. 属性为id和name和pass
        120. 封装的实体类为:
        121. package cn.csdn.hr.s2sh.domain;
        122. import java.io.Serializable;
        123. public class Admin implements Serializable {
        124. private static final long serialVersionUID = 1L;
        125. private Integer id;
        126. private String name;
        127. private String pass;
        128. public Admin() {
        129. super();
        130. // TODO Auto-generated constructor stub
        131. }
        132. public Admin(Integer id, String name, String pass) {
        133. super();
        134. this.id = id;
        135. this.name = name;
        136. this.pass = pass;
        137. }
        138. public Integer getId() {
        139. return id;
        140. }
        141. public void setId(Integer id) {
        142. this.id = id;
        143. }
        144. public String getName() {
        145. return name;
        146. }
        147. public void setName(String name) {
        148. this.name = name;
        149. }
        150. public String getPass() {
        151. return pass;
        152. }
        153. public void setPass(String pass) {
        154. this.pass = pass;
        155. }
        156. @Override
        157. public String toString() {
        158. return "Admin [id=" + id + ", name=" + name + ", pass=" + pass + "]";
        159. }
        160. }
        161. (2)在同一个包下的实体类的映射文件
        162. <?xml version="1.0" encoding="UTF-8"?>
        163. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        164. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        165. <hibernate-mapping package="cn.csdn.hr.s2sh.domain">
        166. <class name="Admin" table="admin">
        167. <id name="id" column="id">
        168. <generator class="native"></generator>
        169. </id>
        170. <property name="name" column="name"></property>
        171. <property name="pass" column="pass"></property>
        172. </class>
        173. </hibernate-mapping>
        174. (3)创建dao层,创建的包名为cn.csdn.hr.s2sh.dao,创建的接口名为AdminDao,类名为AdminDaoImpl
        175. 下面是创建的接口 AdminDao.java
        176. package cn.csdn.hr.s2sh.dao;
        177. import java.util.List;
        178. import cn.csdn.hr.s2sh.domain.Admin;
        179. public interface AdminDao {
        180. public Admin login(final String name,final String pass);
        181. }
        182. 创建的类为AdminDaoImpl.java
        183. package cn.csdn.hr.s2sh.dao;
        184. import java.sql.SQLException;
        185. import java.util.List;
        186. import org.hibernate.HibernateException;
        187. import org.hibernate.Session;
        188. import org.springframework.orm.hibernate3.HibernateCallback;
        189. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
        190. import cn.csdn.hr.s2sh.domain.Admin;
        191. @SuppressWarnings("unchecked")
        192. public class AdminDaoImpl extends HibernateDaoSupport implements AdminDao {
        193. public Admin login(final String name, final String pass) {
        194. return (Admin) this.getHibernateTemplate().execute(
        195. new HibernateCallback() {
        196. public Object doInHibernate(Session session)
        197. throws HibernateException, SQLException {
        198. // TODO Auto-generated method stub
        199. Object obj = session
        200. .createQuery(
        201. "from Admin where name=:name and pass=:pass")
        202. .setString("name", name)
        203. .setString("pass", pass).uniqueResult();
        204. return obj;
        205. }
        206. });
        207. }
        208. }
        209. (4)创建service层,创建的包名为cn.csdn.hr.s2sh.service
        210. 创建的AdminService.java接口
        211. package cn.csdn.hr.s2sh.service;
        212. import cn.csdn.hr.s2sh.dao.AdminDao;
        213. public interface AdminService extends AdminDao{
        214. }
        215. 创建的AdminServiceImpl.java
        216. package cn.csdn.hr.s2sh.service;
        217. import java.util.List;
        218. import org.springframework.transaction.TransactionStatus;
        219. import org.springframework.transaction.support.TransactionCallback;
        220. import org.springframework.transaction.support.TransactionTemplate;
        221. import cn.csdn.hr.s2sh.dao.AdminDao;
        222. import cn.csdn.hr.s2sh.domain.Admin;
        223. public class AdminServiceImpl implements AdminService {
        224. private AdminDao adminDao;
        225. public void setAdminDao(AdminDao adminDao) {
        226. this.adminDao = adminDao;
        227. }
        228. public Admin login(String name, String pass) {
        229. // TODO Auto-generated method stub
        230. return adminDao.login(name, pass);
        231. }
        232. }
        233. 6.创建访问struts2的时候的action,我们把action放到一个bean-action.xml中
        234. <?xml version="1.0" encoding="UTF-8"?>
        235. <beans xmlns="http://www.springframework.org/schema/beans"
        236. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
        237. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        238. xsi:schemaLocation="http://www.springframework.org/schema/beans
        239. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        240. http://www.springframework.org/schema/aop
        241. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        242. http://www.springframework.org/schema/context
        243. http://www.springframework.org/schema/context/spring-context-2.5.xsd
        244. http://www.springframework.org/schema/tx
        245. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
        246. <!-- 创建struts2中的action -->
        247. <!-- 配置admin的action -->
        248. <bean id="adminAction" class="cn.csdn.hr.s2sh.action.AdminAction"
        249. scope="prototype">
        250. <property name="adminService" ref="adminServiceImpl"></property>
        251. </bean>
        252. </beans>
        253. 而ref的adminServiceImpl是在bean-service.xml中
        254. <?xml version="1.0" encoding="UTF-8"?>
        255. <beans xmlns="http://www.springframework.org/schema/beans"
        256. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
        257. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        258. xsi:schemaLocation="http://www.springframework.org/schema/beans
        259. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        260. http://www.springframework.org/schema/aop
        261. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        262. http://www.springframework.org/schema/context
        263. http://www.springframework.org/schema/context/spring-context-2.5.xsd
        264. http://www.springframework.org/schema/tx
        265. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
        266. <!-- admin的业务操作 -->
        267. <bean id="adminServiceImpl" class="cn.csdn.hr.s2sh.service.AdminServiceImpl">
        268. <property name="adminDao" ref="adminDaoImpl"></property>
        269. </bean>
        270. </beans>
        271. 上面的ref是adminDaoImpl,在beans-dao.xml
        272. <?xml version="1.0" encoding="UTF-8"?>
        273. <beans xmlns="http://www.springframework.org/schema/beans"
        274. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
        275. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        276. xsi:schemaLocation="http://www.springframework.org/schema/beans
        277. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        278. http://www.springframework.org/schema/aop
        279. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        280. http://www.springframework.org/schema/context
        281. http://www.springframework.org/schema/context/spring-context-2.5.xsd
        282. http://www.springframework.org/schema/tx
        283. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
        284. <!-- hibernatedao的模板类 HibernateDaoSuppor 抽象类不可以实例化 加上abstract="true" -->
        285. <bean id="hibernateDaoSupport"
        286. class="org.springframework.orm.hibernate3.support.HibernateDaoSupport"
        287. abstract="true">
        288. <property name="sessionFactory" ref="sessionFactory"></property>
        289. </bean>
        290. <!-- admin的dao对象 -->
        291. <bean id="adminDaoImpl" class="cn.csdn.hr.s2sh.dao.AdminDaoImpl"
        292. parent="hibernateDaoSupport" />
        293. </beans>
        294. 然后我们把上面的三个beans.xml导入到applicationContext.xml中
        295. <!-- 导入其他的配置文件 -->
        296. <import resource="beans-dao.xml" />
        297. <import resource="beans-service.xml" />
        298. <import resource="beans-action.xml" />
        299. 7.配置web.xml
        300. <?xml version="1.0" encoding="UTF-8"?>
        301. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        302. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        303. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        304. id="WebApp_ID" version="2.5">
        305. <display-name>s2sh</display-name>
        306. <welcome-file-list>
        307. <welcome-file>index.html</welcome-file>
        308. <welcome-file>index.htm</welcome-file>
        309. <welcome-file>index.jsp</welcome-file>
        310. <welcome-file>default.html</welcome-file>
        311. <welcome-file>default.htm</welcome-file>
        312. <welcome-file>default.jsp</welcome-file>
        313. </welcome-file-list>
        314. <!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 -->
        315. <context-param>
        316. <param-name>contextConfigLocation</param-name>
        317. <param-value>classpath:applic*.xml</param-value>
        318. </context-param>
        319. <!-- 对Spring容器进行实例化 -->
        320. <listener>
        321. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        322. </listener>
        323. <!-- struts2 的配置 -->
        324. <filter>
        325. <filter-name>struts2</filter-name>
        326. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        327. </filter>
        328. <filter-mapping>
        329. <filter-name>struts2</filter-name>
        330. <url-pattern>/*</url-pattern>
        331. </filter-mapping>
        332. <!-- 配置 使用spring解决hibernate因session关闭导致的延迟加载例外问题 -->
        333. <filter>
        334. <filter-name>OpenSessionInViewFilter</filter-name>
        335. <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        336. <init-param>
        337. <!-- 指定org.springframework.orm.hibernate3.LocalSessionFactoryBean在spring配置文件中的名称,默认值为sessionFactory.如果LocalSessionFactoryBean在spring中的名称不是sessionFactory,该参数一定要指定,否则会出现找不到sessionFactory的例外 -->
        338. <param-name>sessionFactoryBeanName</param-name>
        339. <param-value>sessionFactory</param-value>
        340. </init-param>
        341. </filter>
        342. <filter-mapping>
        343. <filter-name>OpenSessionInViewFilter</filter-name>
        344. <url-pattern>/*</url-pattern>
        345. </filter-mapping>
        346. <!-- 使用spring解决struts2的中文乱码的问题 -->
        347. <filter>
        348. <filter-name>encoding</filter-name>     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        349. <init-param>
        350. <param-name>encoding</param-name>
        351. <param-value>UTF-8</param-value>
        352. </init-param>
        353. </filter>
        354. <filter-mapping>
        355. <filter-name>encoding</filter-name>
        356. <url-pattern>/*</url-pattern>
        357. </filter-mapping>
        358. </web-app>
        359. 8.我们来做一个简单的登入,使用的jsp页面为:
        360. <body>
        361. <div>
        362. <form action="/s2sh/csdn/loginAdmin.action" method="get">
        363. 用户名:<input type="text" name="admin.name"/><br/>
        364. 密  码:<input type="password" name="admin.pass"/><br/>
        365. <input type="submit" value="登入"/>
        366. <input type="reset" value="重置"/>
        367. </form>
        368. </div>
        369. <div>
        370. 用户名为:${admin.name}
        371. </div>
        372. </body>
        373. 访问到的action的处理为:
        374. package cn.csdn.hr.s2sh.action;
        375. import cn.csdn.hr.s2sh.domain.Admin;
        376. import cn.csdn.hr.s2sh.service.AdminService;
        377. import com.opensymphony.xwork2.ActionSupport;
        378. public class AdminAction extends ActionSupport {
        379. private static final long serialVersionUID = 1L;
        380. private AdminService adminService;
        381. private Admin admin;
        382. public Admin getAdmin() {
        383. return admin;
        384. }
        385. public void setAdmin(Admin admin) {
        386. this.admin = admin;
        387. }
        388. // 注入
        389. public void setAdminService(AdminService adminService) {
        390. this.adminService = adminService;
        391. }
        392. public String login() {
        393. System.out.println("用户名:" + admin.getName());
        394. admin = adminService.login(admin.getName(), admin.getPass());
        395. return SUCCESS;
        396. }
        397. }  
            1. Ssh整合开发介绍和简单的登入案例实现
            2. 一  介绍:
            3. Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开发,这是目前我的整合开发的使用技术和版本,使用的数据库为mySql。使用的开发工具是eclipse,eplipse的版本为Indigo Service Release 2
            4. 二  搭建环境
            5. 1.  首先要先引入struts2和sping和hibernate所需要的包
            6. (1)struts2的包为:
            7. struts-2.3.1.2\lib\ struts2-core-2.3.1.2.jar
            8. struts-2.3.1.2\lib\ognl-3.0.4.jar
            9. struts-2.3.1.2\lib\ xwork-core-2.3.1.2.jar
            10. struts-2.3.1.2\lib\ freemarker-2.3.18.jar
            11. struts-2.3.1.2\lib\commons-fileupload-1.2.2.jar
            12. struts-2.3.1.2\lib\ commons-io-2.0.1.jar
            13. struts-2.3.1.2\lib\commons-lang-2.5.jar
            14. struts-2.3.1.2\lib\commons-logging-1.1.1.jar
            15. struts-2.3.1.2\lib \struts2-json-plugin-2.3.1.2.jar
            16. struts-2.3.1.2\lib \struts2-spring-plugin-2.3.1.2.jar
            17. (2)引入hibernate的包
            18. hibernate-distribution-3.6.8.Final\lib\required\*.jar  所有的jar包
            19. hibernate-distribution-3.6.8.Final\lib\jpa\hibernate-jpa-2.0-api-1.0.1.Final.jar
            20. hibernate-distribution-3.6.8.Final\ hibernate3.jar
            21. (3)spring的包为:
            22. spring-framework-2.5.6\dist\ spring.jar
            23. spring-framework-2.5.6\lib\c3p0\c3p0-0.9.1.2.jar
            24. spring-framework-2.5.6\lib\aspectj\*.jar
            25. spring-framework-2.5.6\lib\j2ee\common-annotations.jar
            26. spring-framework-2.5.6\lib\log4j\log4j-1.2.15.jar
            27. spring-framework-2.5.6\lib\jakarta-commons\ commons-logging.jar
            28. spring-framework-2.5.6\lib\cglib\cglib-nodep-2.1_3.jar
            29. spring-framework-2.5.6\lib\dom4j\dom4j-1.6.1.jar
            30. 2.  配置spring下所需要的文件
            31. (1)首先配置spring所需要的xml文件
            32. 我们在class下,即在src下创建一个applicationContext.xml的xml文件,文件的头文件因为要用到各种标签,所以我们在引入头文件的时候尽量引的比较多点,代码为:
            33. <?xml version="1.0" encoding="UTF-8"?>
            34. <beans xmlns="http://www.springframework.org/schema/beans"
            35. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
            36. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            37. xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            38. http://www.springframework.org/schema/aop
            39. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            40. http://www.springframework.org/schema/context
            41. http://www.springframework.org/schema/context/spring-context-2.5.xsd
            42. http://www.springframework.org/schema/tx
            43. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
            44. </beans>
            45. (2)在xml中配置和数据库相关联,并用c3p0来配置数据库连接池
            46. <!-- 数据库的连接池 -->
            47. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
            48. destroy-method="close">
            49. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            50. <property name="jdbcUrl"
            51. value="jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8" />
            52. <property name="user" value="root" />
            53. <property name="password" value="1234" />
            54. <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
            55. <property name="initialPoolSize" value="1" />
            56. <!--连接池中保留的最小连接数。 -->
            57. <property name="minPoolSize" value="1" />
            58. <!--连接池中保留的最大连接数。Default: 15 -->
            59. <property name="maxPoolSize" value="300" />
            60. <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
            61. <property name="maxIdleTime" value="60" />
            62. <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
            63. <property name="acquireIncrement" value="5" />
            64. <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
            65. <property name="idleConnectionTestPeriod" value="60" />
            66. </bean>
            67. 当然,这样所写的可以在一个properties中读取。读取外部文件在xml中的使用为:
            68. <!-- 读取外部的文件 -->
            69. <context:property-placeholder location="jdbc.properties" />
            70. (3)配置sessionFactory工厂,相当于是hibernate.cfg.xml里面的配置
            71. <!-- sessionFactory工厂 -->
            72. <bean id="sessionFactory"
            73. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            74. <!-- 注入数据源 -->
            75. <property name="dataSource" ref="dataSource"></property>
            76. <!-- hibernate映射文件的引入 -->
            77. <property name="mappingResources">
            78. <list>
            79. <value>cn/csdn/hr/s2sh/domain/Admin.hbm.xml</value>
            80. </list>
            81. </property>
            82. <!-- 配置hibernate属性的设置 -->
            83. <property name="hibernateProperties">
            84. <props>
            85. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            86. <prop key="hibernate.hbm2ddl.auto">update</prop>
            87. <prop key="hibernate.show_sql">true</prop>
            88. <prop key="hibernate.format_sql">true</prop>
            89. </props>
            90. </property>
            91. </bean>
            92. 3.配置struts2.xml中需要的内容
            93. (1)配置基本的struts2.xml
            94. <!DOCTYPE struts PUBLIC
            95. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
            96. "http://struts.apache.org/dtds/struts-2.3.dtd">
            97. <struts>
            98. <!--使用spring创建管理struts2的action操作 -->
            99. <constant name="struts.objectFactory" value="spring"/>
            100. <include file="struts-admin.xml"></include>
            101. </struts>
            102. 注:其中include是引入的文件,一下的语句是非常重要的:
            103. <constant name="struts.objectFactory" value="spring"/>,它是struts2和spring的连接的关键
            104. (2)引入的struts-admin.xml文件,意在检测并作出一个简单的登入的实现
            105. <!DOCTYPE struts PUBLIC
            106. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
            107. "http://struts.apache.org/dtds/struts-2.3.dtd">
            108. <struts>
            109. <package name="admin" extends="struts-default" namespace="/csdn">
            110. <!-- class的名称  等于spring中action配置文件中的id名称 -->
            111. <action name="loginAdmin" class="adminAction" method="login">
            112. <result name="success">../index.jsp</result>
            113. </action>
            114. </package>
            115. </struts>
            116. 4.  Hibernate.cfg.xml中的内容可以省略,它已经在spring中的xml中配置了
            117. 5.搭建层之间的关系
            118. (1)首先是domain,包为cn.csdn.hr.s2sh.domain,我们以admin为例
            119. 属性为id和name和pass
            120. 封装的实体类为:
            121. package cn.csdn.hr.s2sh.domain;
            122. import java.io.Serializable;
            123. public class Admin implements Serializable {
            124. private static final long serialVersionUID = 1L;
            125. private Integer id;
            126. private String name;
            127. private String pass;
            128. public Admin() {
            129. super();
            130. // TODO Auto-generated constructor stub
            131. }
            132. public Admin(Integer id, String name, String pass) {
            133. super();
            134. this.id = id;
            135. this.name = name;
            136. this.pass = pass;
            137. }
            138. public Integer getId() {
            139. return id;
            140. }
            141. public void setId(Integer id) {
            142. this.id = id;
            143. }
            144. public String getName() {
            145. return name;
            146. }
            147. public void setName(String name) {
            148. this.name = name;
            149. }
            150. public String getPass() {
            151. return pass;
            152. }
            153. public void setPass(String pass) {
            154. this.pass = pass;
            155. }
            156. @Override
            157. public String toString() {
            158. return "Admin [id=" + id + ", name=" + name + ", pass=" + pass + "]";
            159. }
            160. }
            161. (2)在同一个包下的实体类的映射文件
            162. <?xml version="1.0" encoding="UTF-8"?>
            163. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            164. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
            165. <hibernate-mapping package="cn.csdn.hr.s2sh.domain">
            166. <class name="Admin" table="admin">
            167. <id name="id" column="id">
            168. <generator class="native"></generator>
            169. </id>
            170. <property name="name" column="name"></property>
            171. <property name="pass" column="pass"></property>
            172. </class>
            173. </hibernate-mapping>
            174. (3)创建dao层,创建的包名为cn.csdn.hr.s2sh.dao,创建的接口名为AdminDao,类名为AdminDaoImpl
            175. 下面是创建的接口 AdminDao.java
            176. package cn.csdn.hr.s2sh.dao;
            177. import java.util.List;
            178. import cn.csdn.hr.s2sh.domain.Admin;
            179. public interface AdminDao {
            180. public Admin login(final String name,final String pass);
            181. }
            182. 创建的类为AdminDaoImpl.java
            183. package cn.csdn.hr.s2sh.dao;
            184. import java.sql.SQLException;
            185. import java.util.List;
            186. import org.hibernate.HibernateException;
            187. import org.hibernate.Session;
            188. import org.springframework.orm.hibernate3.HibernateCallback;
            189. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
            190. import cn.csdn.hr.s2sh.domain.Admin;
            191. @SuppressWarnings("unchecked")
            192. public class AdminDaoImpl extends HibernateDaoSupport implements AdminDao {
            193. public Admin login(final String name, final String pass) {
            194. return (Admin) this.getHibernateTemplate().execute(
            195. new HibernateCallback() {
            196. public Object doInHibernate(Session session)
            197. throws HibernateException, SQLException {
            198. // TODO Auto-generated method stub
            199. Object obj = session
            200. .createQuery(
            201. "from Admin where name=:name and pass=:pass")
            202. .setString("name", name)
            203. .setString("pass", pass).uniqueResult();
            204. return obj;
            205. }
            206. });
            207. }
            208. }
            209. (4)创建service层,创建的包名为cn.csdn.hr.s2sh.service
            210. 创建的AdminService.java接口
            211. package cn.csdn.hr.s2sh.service;
            212. import cn.csdn.hr.s2sh.dao.AdminDao;
            213. public interface AdminService extends AdminDao{
            214. }
            215. 创建的AdminServiceImpl.java
            216. package cn.csdn.hr.s2sh.service;
            217. import java.util.List;
            218. import org.springframework.transaction.TransactionStatus;
            219. import org.springframework.transaction.support.TransactionCallback;
            220. import org.springframework.transaction.support.TransactionTemplate;
            221. import cn.csdn.hr.s2sh.dao.AdminDao;
            222. import cn.csdn.hr.s2sh.domain.Admin;
            223. public class AdminServiceImpl implements AdminService {
            224. private AdminDao adminDao;
            225. public void setAdminDao(AdminDao adminDao) {
            226. this.adminDao = adminDao;
            227. }
            228. public Admin login(String name, String pass) {
            229. // TODO Auto-generated method stub
            230. return adminDao.login(name, pass);
            231. }
            232. }
            233. 6.创建访问struts2的时候的action,我们把action放到一个bean-action.xml中
            234. <?xml version="1.0" encoding="UTF-8"?>
            235. <beans xmlns="http://www.springframework.org/schema/beans"
            236. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
            237. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            238. xsi:schemaLocation="http://www.springframework.org/schema/beans
            239. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            240. http://www.springframework.org/schema/aop
            241. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            242. http://www.springframework.org/schema/context
            243. http://www.springframework.org/schema/context/spring-context-2.5.xsd
            244. http://www.springframework.org/schema/tx
            245. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
            246. <!-- 创建struts2中的action -->
            247. <!-- 配置admin的action -->
            248. <bean id="adminAction" class="cn.csdn.hr.s2sh.action.AdminAction"
            249. scope="prototype">
            250. <property name="adminService" ref="adminServiceImpl"></property>
            251. </bean>
            252. </beans>
            253. 而ref的adminServiceImpl是在bean-service.xml中
            254. <?xml version="1.0" encoding="UTF-8"?>
            255. <beans xmlns="http://www.springframework.org/schema/beans"
            256. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
            257. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            258. xsi:schemaLocation="http://www.springframework.org/schema/beans
            259. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            260. http://www.springframework.org/schema/aop
            261. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            262. http://www.springframework.org/schema/context
            263. http://www.springframework.org/schema/context/spring-context-2.5.xsd
            264. http://www.springframework.org/schema/tx
            265. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
            266. <!-- admin的业务操作 -->
            267. <bean id="adminServiceImpl" class="cn.csdn.hr.s2sh.service.AdminServiceImpl">
            268. <property name="adminDao" ref="adminDaoImpl"></property>
            269. </bean>
            270. </beans>
            271. 上面的ref是adminDaoImpl,在beans-dao.xml
            272. <?xml version="1.0" encoding="UTF-8"?>
            273. <beans xmlns="http://www.springframework.org/schema/beans"
            274. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
            275. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            276. xsi:schemaLocation="http://www.springframework.org/schema/beans
            277. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            278. http://www.springframework.org/schema/aop
            279. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            280. http://www.springframework.org/schema/context
            281. http://www.springframework.org/schema/context/spring-context-2.5.xsd
            282. http://www.springframework.org/schema/tx
            283. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
            284. <!-- hibernatedao的模板类 HibernateDaoSuppor 抽象类不可以实例化 加上abstract="true" -->
            285. <bean id="hibernateDaoSupport"
            286. class="org.springframework.orm.hibernate3.support.HibernateDaoSupport"
            287. abstract="true">
            288. <property name="sessionFactory" ref="sessionFactory"></property>
            289. </bean>
            290. <!-- admin的dao对象 -->
            291. <bean id="adminDaoImpl" class="cn.csdn.hr.s2sh.dao.AdminDaoImpl"
            292. parent="hibernateDaoSupport" />
            293. </beans>
            294. 然后我们把上面的三个beans.xml导入到applicationContext.xml中
            295. <!-- 导入其他的配置文件 -->
            296. <import resource="beans-dao.xml" />
            297. <import resource="beans-service.xml" />
            298. <import resource="beans-action.xml" />
            299. 7.配置web.xml
            300. <?xml version="1.0" encoding="UTF-8"?>
            301. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            302. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
            303. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
            304. id="WebApp_ID" version="2.5">
            305. <display-name>s2sh</display-name>
            306. <welcome-file-list>
            307. <welcome-file>index.html</welcome-file>
            308. <welcome-file>index.htm</welcome-file>
            309. <welcome-file>index.jsp</welcome-file>
            310. <welcome-file>default.html</welcome-file>
            311. <welcome-file>default.htm</welcome-file>
            312. <welcome-file>default.jsp</welcome-file>
            313. </welcome-file-list>
            314. <!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 -->
            315. <context-param>
            316. <param-name>contextConfigLocation</param-name>
            317. <param-value>classpath:applic*.xml</param-value>
            318. </context-param>
            319. <!-- 对Spring容器进行实例化 -->
            320. <listener>
            321. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
            322. </listener>
            323. <!-- struts2 的配置 -->
            324. <filter>
            325. <filter-name>struts2</filter-name>
            326. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
            327. </filter>
            328. <filter-mapping>
            329. <filter-name>struts2</filter-name>
            330. <url-pattern>/*</url-pattern>
            331. </filter-mapping>
            332. <!-- 配置 使用spring解决hibernate因session关闭导致的延迟加载例外问题 -->
            333. <filter>
            334. <filter-name>OpenSessionInViewFilter</filter-name>
            335. <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
            336. <init-param>
            337. <!-- 指定org.springframework.orm.hibernate3.LocalSessionFactoryBean在spring配置文件中的名称,默认值为sessionFactory.如果LocalSessionFactoryBean在spring中的名称不是sessionFactory,该参数一定要指定,否则会出现找不到sessionFactory的例外 -->
            338. <param-name>sessionFactoryBeanName</param-name>
            339. <param-value>sessionFactory</param-value>
            340. </init-param>
            341. </filter>
            342. <filter-mapping>
            343. <filter-name>OpenSessionInViewFilter</filter-name>
            344. <url-pattern>/*</url-pattern>
            345. </filter-mapping>
            346. <!-- 使用spring解决struts2的中文乱码的问题 -->
            347. <filter>
            348. <filter-name>encoding</filter-name>     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            349. <init-param>
            350. <param-name>encoding</param-name>
            351. <param-value>UTF-8</param-value>
            352. </init-param>
            353. </filter>
            354. <filter-mapping>
            355. <filter-name>encoding</filter-name>
            356. <url-pattern>/*</url-pattern>
            357. </filter-mapping>
            358. </web-app>
            359. 8.我们来做一个简单的登入,使用的jsp页面为:
            360. <body>
            361. <div>
            362. <form action="/s2sh/csdn/loginAdmin.action" method="get">
            363. 用户名:<input type="text" name="admin.name"/><br/>
            364. 密  码:<input type="password" name="admin.pass"/><br/>
            365. <input type="submit" value="登入"/>
            366. <input type="reset" value="重置"/>
            367. </form>
            368. </div>
            369. <div>
            370. 用户名为:${admin.name}
            371. </div>
            372. </body>
            373. 访问到的action的处理为:
            374. package cn.csdn.hr.s2sh.action;
            375. import cn.csdn.hr.s2sh.domain.Admin;
            376. import cn.csdn.hr.s2sh.service.AdminService;
            377. import com.opensymphony.xwork2.ActionSupport;
            378. public class AdminAction extends ActionSupport {
            379. private static final long serialVersionUID = 1L;
            380. private AdminService adminService;
            381. private Admin admin;
            382. public Admin getAdmin() {
            383. return admin;
            384. }
            385. public void setAdmin(Admin admin) {
            386. this.admin = admin;
            387. }
            388. // 注入
            389. public void setAdminService(AdminService adminService) {
            390. this.adminService = adminService;
            391. }
            392. public String login() {
            393. System.out.println("用户名:" + admin.getName());
            394. admin = adminService.login(admin.getName(), admin.getPass());
            395. return SUCCESS;
            396. }
            397. }  
                1. Ssh整合开发介绍和简单的登入案例实现
                2. 一  介绍:
                3. Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开发,这是目前我的整合开发的使用技术和版本,使用的数据库为mySql。使用的开发工具是eclipse,eplipse的版本为Indigo Service Release 2
                4. 二  搭建环境
                5. 1.  首先要先引入struts2和sping和hibernate所需要的包
                6. (1)struts2的包为:
                7. struts-2.3.1.2\lib\ struts2-core-2.3.1.2.jar
                8. struts-2.3.1.2\lib\ognl-3.0.4.jar
                9. struts-2.3.1.2\lib\ xwork-core-2.3.1.2.jar
                10. struts-2.3.1.2\lib\ freemarker-2.3.18.jar
                11. struts-2.3.1.2\lib\commons-fileupload-1.2.2.jar
                12. struts-2.3.1.2\lib\ commons-io-2.0.1.jar
                13. struts-2.3.1.2\lib\commons-lang-2.5.jar
                14. struts-2.3.1.2\lib\commons-logging-1.1.1.jar
                15. struts-2.3.1.2\lib \struts2-json-plugin-2.3.1.2.jar
                16. struts-2.3.1.2\lib \struts2-spring-plugin-2.3.1.2.jar
                17. (2)引入hibernate的包
                18. hibernate-distribution-3.6.8.Final\lib\required\*.jar  所有的jar包
                19. hibernate-distribution-3.6.8.Final\lib\jpa\hibernate-jpa-2.0-api-1.0.1.Final.jar
                20. hibernate-distribution-3.6.8.Final\ hibernate3.jar
                21. (3)spring的包为:
                22. spring-framework-2.5.6\dist\ spring.jar
                23. spring-framework-2.5.6\lib\c3p0\c3p0-0.9.1.2.jar
                24. spring-framework-2.5.6\lib\aspectj\*.jar
                25. spring-framework-2.5.6\lib\j2ee\common-annotations.jar
                26. spring-framework-2.5.6\lib\log4j\log4j-1.2.15.jar
                27. spring-framework-2.5.6\lib\jakarta-commons\ commons-logging.jar
                28. spring-framework-2.5.6\lib\cglib\cglib-nodep-2.1_3.jar
                29. spring-framework-2.5.6\lib\dom4j\dom4j-1.6.1.jar
                30. 2.  配置spring下所需要的文件
                31. (1)首先配置spring所需要的xml文件
                32. 我们在class下,即在src下创建一个applicationContext.xml的xml文件,文件的头文件因为要用到各种标签,所以我们在引入头文件的时候尽量引的比较多点,代码为:
                33. <?xml version="1.0" encoding="UTF-8"?>
                34. <beans xmlns="http://www.springframework.org/schema/beans"
                35. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
                36. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                37. xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                38. http://www.springframework.org/schema/aop
                39. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                40. http://www.springframework.org/schema/context
                41. http://www.springframework.org/schema/context/spring-context-2.5.xsd
                42. http://www.springframework.org/schema/tx
                43. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
                44. </beans>
                45. (2)在xml中配置和数据库相关联,并用c3p0来配置数据库连接池
                46. <!-- 数据库的连接池 -->
                47. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
                48. destroy-method="close">
                49. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
                50. <property name="jdbcUrl"
                51. value="jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8" />
                52. <property name="user" value="root" />
                53. <property name="password" value="1234" />
                54. <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
                55. <property name="initialPoolSize" value="1" />
                56. <!--连接池中保留的最小连接数。 -->
                57. <property name="minPoolSize" value="1" />
                58. <!--连接池中保留的最大连接数。Default: 15 -->
                59. <property name="maxPoolSize" value="300" />
                60. <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
                61. <property name="maxIdleTime" value="60" />
                62. <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
                63. <property name="acquireIncrement" value="5" />
                64. <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
                65. <property name="idleConnectionTestPeriod" value="60" />
                66. </bean>
                67. 当然,这样所写的可以在一个properties中读取。读取外部文件在xml中的使用为:
                68. <!-- 读取外部的文件 -->
                69. <context:property-placeholder location="jdbc.properties" />
                70. (3)配置sessionFactory工厂,相当于是hibernate.cfg.xml里面的配置
                71. <!-- sessionFactory工厂 -->
                72. <bean id="sessionFactory"
                73. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                74. <!-- 注入数据源 -->
                75. <property name="dataSource" ref="dataSource"></property>
                76. <!-- hibernate映射文件的引入 -->
                77. <property name="mappingResources">
                78. <list>
                79. <value>cn/csdn/hr/s2sh/domain/Admin.hbm.xml</value>
                80. </list>
                81. </property>
                82. <!-- 配置hibernate属性的设置 -->
                83. <property name="hibernateProperties">
                84. <props>
                85. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                86. <prop key="hibernate.hbm2ddl.auto">update</prop>
                87. <prop key="hibernate.show_sql">true</prop>
                88. <prop key="hibernate.format_sql">true</prop>
                89. </props>
                90. </property>
                91. </bean>
                92. 3.配置struts2.xml中需要的内容
                93. (1)配置基本的struts2.xml
                94. <!DOCTYPE struts PUBLIC
                95. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
                96. "http://struts.apache.org/dtds/struts-2.3.dtd">
                97. <struts>
                98. <!--使用spring创建管理struts2的action操作 -->
                99. <constant name="struts.objectFactory" value="spring"/>
                100. <include file="struts-admin.xml"></include>
                101. </struts>
                102. 注:其中include是引入的文件,一下的语句是非常重要的:
                103. <constant name="struts.objectFactory" value="spring"/>,它是struts2和spring的连接的关键
                104. (2)引入的struts-admin.xml文件,意在检测并作出一个简单的登入的实现
                105. <!DOCTYPE struts PUBLIC
                106. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
                107. "http://struts.apache.org/dtds/struts-2.3.dtd">
                108. <struts>
                109. <package name="admin" extends="struts-default" namespace="/csdn">
                110. <!-- class的名称  等于spring中action配置文件中的id名称 -->
                111. <action name="loginAdmin" class="adminAction" method="login">
                112. <result name="success">../index.jsp</result>
                113. </action>
                114. </package>
                115. </struts>
                116. 4.  Hibernate.cfg.xml中的内容可以省略,它已经在spring中的xml中配置了
                117. 5.搭建层之间的关系
                118. (1)首先是domain,包为cn.csdn.hr.s2sh.domain,我们以admin为例
                119. 属性为id和name和pass
                120. 封装的实体类为:
                121. package cn.csdn.hr.s2sh.domain;
                122. import java.io.Serializable;
                123. public class Admin implements Serializable {
                124. private static final long serialVersionUID = 1L;
                125. private Integer id;
                126. private String name;
                127. private String pass;
                128. public Admin() {
                129. super();
                130. // TODO Auto-generated constructor stub
                131. }
                132. public Admin(Integer id, String name, String pass) {
                133. super();
                134. this.id = id;
                135. this.name = name;
                136. this.pass = pass;
                137. }
                138. public Integer getId() {
                139. return id;
                140. }
                141. public void setId(Integer id) {
                142. this.id = id;
                143. }
                144. public String getName() {
                145. return name;
                146. }
                147. public void setName(String name) {
                148. this.name = name;
                149. }
                150. public String getPass() {
                151. return pass;
                152. }
                153. public void setPass(String pass) {
                154. this.pass = pass;
                155. }
                156. @Override
                157. public String toString() {
                158. return "Admin [id=" + id + ", name=" + name + ", pass=" + pass + "]";
                159. }
                160. }
                161. (2)在同一个包下的实体类的映射文件
                162. <?xml version="1.0" encoding="UTF-8"?>
                163. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                164. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
                165. <hibernate-mapping package="cn.csdn.hr.s2sh.domain">
                166. <class name="Admin" table="admin">
                167. <id name="id" column="id">
                168. <generator class="native"></generator>
                169. </id>
                170. <property name="name" column="name"></property>
                171. <property name="pass" column="pass"></property>
                172. </class>
                173. </hibernate-mapping>
                174. (3)创建dao层,创建的包名为cn.csdn.hr.s2sh.dao,创建的接口名为AdminDao,类名为AdminDaoImpl
                175. 下面是创建的接口 AdminDao.java
                176. package cn.csdn.hr.s2sh.dao;
                177. import java.util.List;
                178. import cn.csdn.hr.s2sh.domain.Admin;
                179. public interface AdminDao {
                180. public Admin login(final String name,final String pass);
                181. }
                182. 创建的类为AdminDaoImpl.java
                183. package cn.csdn.hr.s2sh.dao;
                184. import java.sql.SQLException;
                185. import java.util.List;
                186. import org.hibernate.HibernateException;
                187. import org.hibernate.Session;
                188. import org.springframework.orm.hibernate3.HibernateCallback;
                189. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
                190. import cn.csdn.hr.s2sh.domain.Admin;
                191. @SuppressWarnings("unchecked")
                192. public class AdminDaoImpl extends HibernateDaoSupport implements AdminDao {
                193. public Admin login(final String name, final String pass) {
                194. return (Admin) this.getHibernateTemplate().execute(
                195. new HibernateCallback() {
                196. public Object doInHibernate(Session session)
                197. throws HibernateException, SQLException {
                198. // TODO Auto-generated method stub
                199. Object obj = session
                200. .createQuery(
                201. "from Admin where name=:name and pass=:pass")
                202. .setString("name", name)
                203. .setString("pass", pass).uniqueResult();
                204. return obj;
                205. }
                206. });
                207. }
                208. }
                209. (4)创建service层,创建的包名为cn.csdn.hr.s2sh.service
                210. 创建的AdminService.java接口
                211. package cn.csdn.hr.s2sh.service;
                212. import cn.csdn.hr.s2sh.dao.AdminDao;
                213. public interface AdminService extends AdminDao{
                214. }
                215. 创建的AdminServiceImpl.java
                216. package cn.csdn.hr.s2sh.service;
                217. import java.util.List;
                218. import org.springframework.transaction.TransactionStatus;
                219. import org.springframework.transaction.support.TransactionCallback;
                220. import org.springframework.transaction.support.TransactionTemplate;
                221. import cn.csdn.hr.s2sh.dao.AdminDao;
                222. import cn.csdn.hr.s2sh.domain.Admin;
                223. public class AdminServiceImpl implements AdminService {
                224. private AdminDao adminDao;
                225. public void setAdminDao(AdminDao adminDao) {
                226. this.adminDao = adminDao;
                227. }
                228. public Admin login(String name, String pass) {
                229. // TODO Auto-generated method stub
                230. return adminDao.login(name, pass);
                231. }
                232. }
                233. 6.创建访问struts2的时候的action,我们把action放到一个bean-action.xml中
                234. <?xml version="1.0" encoding="UTF-8"?>
                235. <beans xmlns="http://www.springframework.org/schema/beans"
                236. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
                237. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                238. xsi:schemaLocation="http://www.springframework.org/schema/beans
                239. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                240. http://www.springframework.org/schema/aop
                241. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                242. http://www.springframework.org/schema/context
                243. http://www.springframework.org/schema/context/spring-context-2.5.xsd
                244. http://www.springframework.org/schema/tx
                245. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
                246. <!-- 创建struts2中的action -->
                247. <!-- 配置admin的action -->
                248. <bean id="adminAction" class="cn.csdn.hr.s2sh.action.AdminAction"
                249. scope="prototype">
                250. <property name="adminService" ref="adminServiceImpl"></property>
                251. </bean>
                252. </beans>
                253. 而ref的adminServiceImpl是在bean-service.xml中
                254. <?xml version="1.0" encoding="UTF-8"?>
                255. <beans xmlns="http://www.springframework.org/schema/beans"
                256. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
                257. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                258. xsi:schemaLocation="http://www.springframework.org/schema/beans
                259. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                260. http://www.springframework.org/schema/aop
                261. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                262. http://www.springframework.org/schema/context
                263. http://www.springframework.org/schema/context/spring-context-2.5.xsd
                264. http://www.springframework.org/schema/tx
                265. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
                266. <!-- admin的业务操作 -->
                267. <bean id="adminServiceImpl" class="cn.csdn.hr.s2sh.service.AdminServiceImpl">
                268. <property name="adminDao" ref="adminDaoImpl"></property>
                269. </bean>
                270. </beans>
                271. 上面的ref是adminDaoImpl,在beans-dao.xml
                272. <?xml version="1.0" encoding="UTF-8"?>
                273. <beans xmlns="http://www.springframework.org/schema/beans"
                274. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
                275. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                276. xsi:schemaLocation="http://www.springframework.org/schema/beans
                277. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                278. http://www.springframework.org/schema/aop
                279. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                280. http://www.springframework.org/schema/context
                281. http://www.springframework.org/schema/context/spring-context-2.5.xsd
                282. http://www.springframework.org/schema/tx
                283. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
                284. <!-- hibernatedao的模板类 HibernateDaoSuppor 抽象类不可以实例化 加上abstract="true" -->
                285. <bean id="hibernateDaoSupport"
                286. class="org.springframework.orm.hibernate3.support.HibernateDaoSupport"
                287. abstract="true">
                288. <property name="sessionFactory" ref="sessionFactory"></property>
                289. </bean>
                290. <!-- admin的dao对象 -->
                291. <bean id="adminDaoImpl" class="cn.csdn.hr.s2sh.dao.AdminDaoImpl"
                292. parent="hibernateDaoSupport" />
                293. </beans>
                294. 然后我们把上面的三个beans.xml导入到applicationContext.xml中
                295. <!-- 导入其他的配置文件 -->
                296. <import resource="beans-dao.xml" />
                297. <import resource="beans-service.xml" />
                298. <import resource="beans-action.xml" />
                299. 7.配置web.xml
                300. <?xml version="1.0" encoding="UTF-8"?>
                301. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                302. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
                303. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
                304. id="WebApp_ID" version="2.5">
                305. <display-name>s2sh</display-name>
                306. <welcome-file-list>
                307. <welcome-file>index.html</welcome-file>
                308. <welcome-file>index.htm</welcome-file>
                309. <welcome-file>index.jsp</welcome-file>
                310. <welcome-file>default.html</welcome-file>
                311. <welcome-file>default.htm</welcome-file>
                312. <welcome-file>default.jsp</welcome-file>
                313. </welcome-file-list>
                314. <!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 -->
                315. <context-param>
                316. <param-name>contextConfigLocation</param-name>
                317. <param-value>classpath:applic*.xml</param-value>
                318. </context-param>
                319. <!-- 对Spring容器进行实例化 -->
                320. <listener>
                321. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                322. </listener>
                323. <!-- struts2 的配置 -->
                324. <filter>
                325. <filter-name>struts2</filter-name>
                326. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
                327. </filter>
                328. <filter-mapping>
                329. <filter-name>struts2</filter-name>
                330. <url-pattern>/*</url-pattern>
                331. </filter-mapping>
                332. <!-- 配置 使用spring解决hibernate因session关闭导致的延迟加载例外问题 -->
                333. <filter>
                334. <filter-name>OpenSessionInViewFilter</filter-name>
                335. <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
                336. <init-param>
                337. <!-- 指定org.springframework.orm.hibernate3.LocalSessionFactoryBean在spring配置文件中的名称,默认值为sessionFactory.如果LocalSessionFactoryBean在spring中的名称不是sessionFactory,该参数一定要指定,否则会出现找不到sessionFactory的例外 -->
                338. <param-name>sessionFactoryBeanName</param-name>
                339. <param-value>sessionFactory</param-value>
                340. </init-param>
                341. </filter>
                342. <filter-mapping>
                343. <filter-name>OpenSessionInViewFilter</filter-name>
                344. <url-pattern>/*</url-pattern>
                345. </filter-mapping>
                346. <!-- 使用spring解决struts2的中文乱码的问题 -->
                347. <filter>
                348. <filter-name>encoding</filter-name>     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
                349. <init-param>
                350. <param-name>encoding</param-name>
                351. <param-value>UTF-8</param-value>
                352. </init-param>
                353. </filter>
                354. <filter-mapping>
                355. <filter-name>encoding</filter-name>
                356. <url-pattern>/*</url-pattern>
                357. </filter-mapping>
                358. </web-app>
                359. 8.我们来做一个简单的登入,使用的jsp页面为:
                360. <body>
                361. <div>
                362. <form action="/s2sh/csdn/loginAdmin.action" method="get">
                363. 用户名:<input type="text" name="admin.name"/><br/>
                364. 密  码:<input type="password" name="admin.pass"/><br/>
                365. <input type="submit" value="登入"/>
                366. <input type="reset" value="重置"/>
                367. </form>
                368. </div>
                369. <div>
                370. 用户名为:${admin.name}
                371. </div>
                372. </body>
                373. 访问到的action的处理为:
                374. package cn.csdn.hr.s2sh.action;
                375. import cn.csdn.hr.s2sh.domain.Admin;
                376. import cn.csdn.hr.s2sh.service.AdminService;
                377. import com.opensymphony.xwork2.ActionSupport;
                378. public class AdminAction extends ActionSupport {
                379. private static final long serialVersionUID = 1L;
                380. private AdminService adminService;
                381. private Admin admin;
                382. public Admin getAdmin() {
                383. return admin;
                384. }
                385. public void setAdmin(Admin admin) {
                386. this.admin = admin;
                387. }
                388. // 注入
                389. public void setAdminService(AdminService adminService) {
                390. this.adminService = adminService;
                391. }
                392. public String login() {
                393. System.out.println("用户名:" + admin.getName());
                394. admin = adminService.login(admin.getName(), admin.getPass());
                395. return SUCCESS;
                396. }
                397. }

      this.adminService = adminService;

    389. }
    390. public String login() {
    391. System.out.println("用户名:" + admin.getName());
    392. admin = adminService.login(admin.getName(), admin.getPass());
    393. return SUCCESS;
    394. }
    395. }
上一篇:(转)iOS Wow体验 - 第二章 - iOS用户体验解析(2)


下一篇:PHP入门 - - 05-->编写HTML页面的常用标签