重新学习之spring第四个程序,整合struts2+hibernate+spring
分类:
IT文章
•
2022-02-26 23:16:15

第一步:导入三大框架的jar包(struts2.3.16.1+hibernate3.2+spring3.2.4)


第二步:编写web.xml 和struts.xml和applicationContext.xml和applicationContext-service.xml和application-actionContext.xml和applicationContext-dao.xml
web.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app version="2.5"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
7
8 <context-param>
9 <description>
10 将applicationContext.xml放在src目录下,依然能够找到该配置文件
11 </description>
12
13 <param-name>contextConfigLocation</param-name>
14 <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
15 </context-param>
16 <!-- 配置CharacterEncoding,设置字符集 -->
17 <filter>
18 <filter-name>characterEncodingFilter</filter-name>
19 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
20 <init-param>
21 <param-name>encoding</param-name>
22 <param-value>UTF-8</param-value>
23 </init-param>
24 <init-param>
25 <param-name>forceEncoding</param-name>
26 <param-value>true</param-value>
27 </init-param>
28 </filter>
29
30 <filter-mapping>
31 <filter-name>characterEncodingFilter</filter-name>
32 <url-pattern>/*</url-pattern>
33 </filter-mapping>
34
35 <listener>
36 <description>
37 项目启动时,创建Ioc容器,将项目下所有费数据类创建对象,并注入,建立对象之间的关系
38 </description>
39
40 <listener-class>
41 org.springframework.web.context.ContextLoaderListener</listener-class>
42 </listener>
43
44
45 <!-- 配置Spring自动管理Session. 要配置到struts过滤器之前扩大session生命周期!-->
46 <filter>
47 <filter-name>hibernateSessionFilter</filter-name>
48 <filter-class>
49 org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
50 </filter-class>
51 </filter>
52 <filter-mapping>
53 <filter-name>hibernateSessionFilter</filter-name>
54 <url-pattern>/*</url-pattern>
55 </filter-mapping>
56
57 <!-- 页面session配置 -->
58 <session-config>
59 <session-timeout>20</session-timeout>
60 </session-config>
61
62
63 <!-- struts2拦截器,将所有请求拦截到struts2的框架中 -->
64 <filter>
65 <filter-name>struts2</filter-name>
66 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
67 </filter>
68
69 <filter-mapping>
70 <filter-name>struts2</filter-name>
71 <url-pattern>/*</url-pattern>
72 </filter-mapping>
73
74 </web-app>
View Code
struts.xml
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE struts PUBLIC
3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4 "http://struts.apache.org/dtds/struts-2.3.dtd">
5
6 <struts>
7 <!-- 如果请求地址=actionName!methodName ,则该配置需要进行设置,否则访问地址错误-->
8 <constant name="struts.enable.DynamicMethodInvocation" value="true" />
9
10 <!-- 开发模式 -->
11 <constant name="struts.devMode" value="true" />
12
13 <!-- 编码格式过滤 -->
14 <constant name="struts.i18n.encoding" value="utf-8"></constant>
15
16 <!-- 告诉struts.xml不要自己通过反射new,对象,去spring的ioc容器中找
17 action中的class='spring中Ioc容器中对象的id'
18 annotation注解生成对象默认情况下id值为是:类名首字符小写
19 需要加jar包struts-spring-plugin..jar
20 -->
21 <constant name="struts.objectFactory" value="spring"></constant>
22
23
24 <package name="default" namespace="/" extends="struts-default">
25 <!-- actionName!methodName请求方式的配置 -->
26 <action name="StudentAction" class="StudentAction">
27 <result name="success">/page/success.jsp</result>
28 </action>
29 </package>
30 </struts>
View Code
applicationContext.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:aop="http://www.springframework.org/schema/aop"
5 xmlns:tx="http://www.springframework.org/schema/tx"
6 xsi:schemaLocation="
7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
10
11
12 <!-- 数据库连接池,以及建立数据库连接 -->
13 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
14 <!-- 驱动 -->
15 <property name="driverClass" value="com.mysql.jdbc.Driver">
16
17 </property>
18 <!-- 数据库地址 -->
19 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test">
20
21 </property>
22 <!-- 默认初始化获取3个连接 -->
23 <!-- 空闲连接检查时间 -->
24 <property name="idleConnectionTestPeriod" value="18000"></property>
25 <!-- 最大空闲连接时间 3小时 -->
26 <property name="maxIdleTime" value="25000"></property>
27 <!-- 检查获取的连接是否有效 -->
28 <property name="testConnectionOnCheckin" value="true"></property>
29 <property name="testConnectionOnCheckout" value="true"></property>
30 <!-- 测试语句 -->
31 <property name="preferredTestQuery" value="select 1"></property>
32 <!-- 连接数据库 -->
33 <property name="properties">
34 <props>
35 <prop key="user">root</prop>
36 <prop key="password">1234</prop>
37 <prop key="c3p0.acquire_increment">5</prop>
38 <prop key="c3p0.idle_test_period">18000</prop>
39
40 <!-- 连接空闲超时时间 -->
41 <prop key="c3p0.timeout">20000</prop>
42 <prop key="c3p0.max_size">40</prop>
43 <prop key="c3p0.max_statements">100</prop>
44 <prop key="c3p0.min_size">10</prop>
45 </props>
46 </property>
47 </bean>
48
49
50
51 <!-- 替代hibernate中hibernate.cfg.xml包括:连接数据库信息,实体类和表的映射桥梁,全局参数的配置 -->
52 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
53 <!--
54 一般有三类配置信息!!
55 1. 和数据库连接信息。
56 2. 全局参数配置 比如缓存配置, sql打印信息,等等。。
57 3. mapping
58 -->
59 <!-- 【1】数据库连接 -->
60 <property name="dataSource" >
61 <ref bean="dataSource"/>
62 </property>
63 <!-- 【2】参数配置 -->
64 <property name="hibernateProperties">
65 <props>
66 <!-- 一些hibernate框架的设置 -->
67 <!-- hibernate 会自动生成sql。 为了能够屏蔽 数据库的差异。 需要配置 数据库方言-->
68 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
69
70 <!-- 如果数据库中无相应的表的话,则自动生成一个与po对应的表 -->
71 <prop key="hibernate.hbm2ddl.auto">update</prop>
72
73 <!-- 在服务器后台打印出hibernate映射的sql语句 ,格式打印sql语句-->
74 <prop key="hibernate.show_sql" >true</prop>
75 <prop key="hibernate.format_sql" >true</prop>
76 </props>
77 </property>
78
79 <!-- 【3】mapping数据模型和数据库的桥梁,只需要配置到路径,无需一个个配置 -->
80 <property name="mappingDirectoryLocations">
81 <list>
82 <value>classpath:/com/bjsxt/sxf/po</value>
83 </list>
84 </property>
85 </bean>
86
87
88 <!-- 在ioc容器中创建HibernateTemplate对象,并将sessionFactory工厂的对象,注入其中。 -->
89 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" >
90 <property name="sessionFactory" ref="sessionFactory"></property>
91 </bean>
92
93
94 <!-- 事务 -->
95 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
96 <property name="sessionFactory" ref="sessionFactory"></property>
97 </bean>
98
99 <!-- 动态批量代理,事务,确保实际业务逻辑的完整性,合理性。比如银行转账的事务 -->
100 <tx:advice id="txadvice" transaction-manager="transactionManager">
101 <tx:attributes>
102 <tx:method name="get*" propagation="REQUIRED" read-only="true"/>
103 <tx:method name="find*" propagation="REQUIRED" read-only="true"/>
104 <tx:method name="query*" propagation="REQUIRED" read-only="true"/>
105 <tx:method name="*" propagation="REQUIRED" />
106 </tx:attributes>
107 </tx:advice>
108 <!-- 面向切面编程 -->
109 <aop:config proxy-target-class="true">
110 <!-- 切面 -->
111 <aop:pointcut id="serviceMethods" expression="execution(* com.bjsxt.sxf.service.impl.*.*(..))"/>
112 <aop:advisor advice-ref="txadvice" pointcut-ref="serviceMethods"/>
113 </aop:config>
114
115 <!-- 导入各种包,将bean分类。进行配置。 -->
116 <import resource="applicationContext-dao.xml"/>
117 <import resource="applicationContext-service.xml"/>
118 <import resource="applicationContext-action.xml"/>
119
120 </beans>
View Code
applicationContext-dao.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans
3 xmlns="http://www.springframework.org/schema/beans"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:p="http://www.springframework.org/schema/p"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
7
8
9 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
10 <property name="sessionFactory" ref="sessionFactory"></property>
11 </bean>
12
13 <bean id="StudentDao" class="com.bjsxt.sxf.dao.StudentDao" scope="prototype" >
14 <property name="hibernateTemplate" ref="hibernateTemplate"></property>
15 </bean>
16 </beans>
View Code
applicationContext-service.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans
3 xmlns="http://www.springframework.org/schema/beans"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:p="http://www.springframework.org/schema/p"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
7
8 <bean id="StudentService" class="com.bjsxt.sxf.service.impl.StudentServiceImpl" scope="prototype" autowire="byType"></bean>
9 </beans>
View Code
applicationContext-action.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans
3 xmlns="http://www.springframework.org/schema/beans"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:p="http://www.springframework.org/schema/p"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
7
8 <bean id="StudentAction" class="com.bjsxt.sxf.action.StudentAction" scope="prototype" autowire="byType" ></bean>
9
10 </beans>
View Code
第三步:测试--项目布局。
项目布局

student.hbm.xml
1 <?xml version="1.0"?>
2 <!DOCTYPE hibernate-mapping PUBLIC
3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
5 <hibernate-mapping
6 package="com.bjsxt.sxf.po"><!-- 实体类包名 -->
7
8 <class name="Student" table="shang_student">
9
10
11 <!-- 主键递增 -->
12 <id name="id" column="id">
13 <generator class="native"></generator>
14 </id>
15
16 <!-- 学生名字 -->
17 <property name="name" column="name"></property>
18 <!-- 学生性别 -->
19 <property name="sex" column="sex"></property>
20
21
22 </class>
23
24 </hibernate-mapping>
View Code
添加一个用户
访问localhost:8080/Struts2HibernateSpring/StudentAction!add向数据库中的表添加一个用户
StudenAction省去setget方法
1 public class StudentAction {
2 private StudentService studentService;
3
4
5 public String add(){
6 System.out.println("StudentAction.add(8888888888888)");
7 Student student =new Student();
8 student.setName("shangxiaoyan");
9 student.setSex("女");
10 studentService.addStudent(student);
11 return null;
12 }
View Code