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

时间:2021-12-25 18:39:15

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. }

【转载】Ssh整合开发介绍和简单的登入案例实现的更多相关文章

  1. 从MVC和三层架构说到SSH整合开发

    相信很多人都认同JavaWeb开发是遵从MVC开发模式的,遵从三层架构进行开发的,是的,大家都这么认同.但是相信大家都会有过这样一个疑问,if(MVC三层模式==三层架构思想)out.println( ...

  2. SSH整合开发时Scope为默认时现象与原理

    1.前提知识 1)scope默认值 进行SSH整合开发时,Struts2的action须要用spring容器进行管理,仅仅要涉及到类以bean的形式入到spring容器中.无论是xml配置还是使用注解 ...

  3. 从MVC和三层架构说到ssh整合开发-下

    这章主要讲整合开发,直接从实战讲起,对与ssh的单方面了解,请继续等待我的兴许文章. 解说不到位的地方欢迎大家指正:联系方式rlovep.com 具体请看源码凝视: 全部代码下载(csdn):链接 G ...

  4. spring和mybatis的整合开发&lpar;基于MapperFactoryBean的整合开发(方便简单不复杂)&rpar;

    MapperFactoryBean是mybati-spring团队提供的一个用于根据mapper接口生成mapper对象的类. 在spring配置文件中可以配置以下参数: 1.mapperInterf ...

  5. ssh整合开发

    ssh整合思想 ssh整合 第一步:导入ssh相关jar包 第二步:搭建struts环境   (1)创建 action  struts.xml配置文件, 配置action struts.xml约束 & ...

  6. SpringBoot整合SpringSecurity简单实现登入登出从零搭建

    技术栈 : SpringBoot + SpringSecurity + jpa + freemark ,完整项目地址 : https://github.com/EalenXie/spring-secu ...

  7. SSH整合开发的web&period;xml配置

    <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" ...

  8. 手游聚合SDK开发之远程开关---渠道登入白名单

    白名单有啥好说的呢?无非就是筛选登入,大家第一眼看到就是这个印象,白名单也是有文章的,弄的时机不同会给你带来很不错的收益,注意是收益.还是举例来说,游戏上线前渠道都会做一个预下载,一般提前1-2天,这 ...

  9. Java窗体简单登入案例(附带源码)

    运行截图 源代码下载地址 https://pan.baidu.com/s/1i82Z_onKdOdPFdfGce5e8Q

随机推荐

  1. 文件描述符、文件表项指针、inode节点的关系

    内核使用3种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程的影响. (1) 每个进程在进程表中都有一个纪录项,纪录项中包含一张打开文件描述符表,每个文件描述符各占一项, ...

  2. 复选框(checkox)全选、全不选、反选、获得选中项值的用例

    HTML部分: <div class="all"> <ul> <li><input type="checkbox" v ...

  3. kafka消费者客户端(0&period;9&period;0&period;1API)

    转自:http://orchome.com/203 kafka客户端从kafka集群消费消息(记录).它会透明地处理kafka集群中服务器的故障.它获取集群内数据的分区,也和服务器进行交互,允许消费者 ...

  4. table创建固定表头

    布局:两个div,上部内容将表头复制,高度固定,下部div内部将table设置为margin:-**px; 隐藏掉表头,下部div设置overflow,即可. 代码:

  5. 5&period;21&lowbar;启程日本二面&lowbar;1 vs 1

    昨天上午刚群面完,晚上7点左右就接到了电话.面试官就两位菇凉,看来她们也是很辛苦.今天下午3点 1 vs 1,在一家咖啡店里,主要是询问下去日本的意愿是否足够强烈.太老实,这里实话实说,也没有表现出非 ...

  6. JS中的Replace只会替换第一处解决办法

    解决这个问题只需将replace的第一个参数使用正则的方式即可,代码如下: var reg = new RegExp(",","g"); var str = & ...

  7. hibernate解读之session--基于最新稳定版5&period;2&period;12

    前言 hibernate是一个实现了JPA标准的,用于对象持久化的orm框架.博主近一年开发都在使用. 前段时间在工作中遇到了一个hibernate的问题,从数据库查找得到对象后,修改了其中部分字段值 ...

  8. hello2 源码解析

    在hello2的项目中,采用的是Java servlet  技术来采取对项目的整体框架的搭建.编写另一个greeting的java文件,实现了一个greeting的java类来覆盖url的doGet方 ...

  9. Contiguous Array with Equal Number of 0 &amp&semi; 1

    2018-07-08 13:24:31 问题描述: 问题求解: 问题规模已经给出是50000量级,显然只能是O(n),至多O(nlogn)的复杂度.本题使用DP和滑动数组都比较棘手,这里给出的方案是p ...

  10. 一、final关键字

    final关键字修饰:类,方法,基本类型变量,引用,具有不同的意思 1.final修饰类 表示该类不能被继承 package property; public final class Hero ext ...