SSH Struts2+hiberante+Spring整合

使用SSH框架编写学生信息:

一.新建Java工程:

(1)建立好Java各层级之间的结构:业务处理层dao,数据模型层domain,页面请求处理层(Struts2 MVC层)action,service层.

(2)建立好各层的实现类及接口;

(3)建立一个source folder文件夹,用来存放一些配置问价.

(4)改变字节码生成的位置,改为WEB-INF下面的classes文件夹下.

Java工程层级结构如下图:

二.hibernate整合到Spring容器中

步骤:

1.编写domain,数据模型,此例子为Student类.

package com.xk.ssh.proj.domian;

public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private double fees;
    private long contact;
    public Student() {
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public double getFees() {
        return fees;
    }
    public void setFees(double fees) {
        this.fees = fees;
    }
    public long getContact() {
        return contact;
    }
    public void setContact(long contact) {
        this.contact = contact;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age + ", fees=" + fees + ", contact=" + contact
                + "]";
    }
    public Student(Integer id, String name, Integer age, double fees, long contact) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.fees = fees;
        this.contact = contact;
    }
    public Student( String name, Integer age, double fees, long contact) {
        this.name = name;
        this.age = age;
        this.fees = fees;
        this.contact = contact;
    }
    public Student(Integer id) {
        this.id = id;
    }
}

2.遍写映射文件,在domain文件夹下编写Student.xml文件.hibernate主要用来管理数据库.

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.xk.ssh.proj.domian">
    <class name="Student" table="Student">
        <id name="id" column="s_id">
            <generator class="native" />
        </id>
        <property name="name" column="s_name" />
        <property name="age" column="s_age" />
        <property name="fees" column="s_fees" />
        <property name="contact" column="s_phone" />
    </class>
</hibernate-mapping>

3.编写Dao接口及Dao的实现类

package com.xk.ssh.proj.dao;
import java.util.List;
import com.xk.ssh.proj.domian.Student;
public interface IStudentDao {
    public void save(Student stu);
    public void delete(Student stu);
    public void update(Student stu);
    public Student get(Student stu);
    public List<Student> list();
}
package com.xk.ssh.proj.dao.impl;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.xk.ssh.proj.dao.IStudentDao;
import com.xk.ssh.proj.domian.Student;

public class StudentDaoImpl implements IStudentDao {
    // 在Dao中注入SessionFaction
    private SessionFactory sessionfactory;
    public void setSessionfactory(SessionFactory sessionfactory) {
        this.sessionfactory = sessionfactory;
    }
    @Override
    public void save(Student stu) {
        Session session = sessionfactory.getCurrentSession();
        session.save(stu);
    }
    @Override
    public void delete(Student stu) {
        Session session = sessionfactory.getCurrentSession();
        session.delete(stu);
    }
    @Override
    public void update(Student stu) {
        Session session = sessionfactory.getCurrentSession();
        session.update(stu);
    }
    @Override
    public Student get(Student stu) {
        Session session = sessionfactory.getCurrentSession();
        // Student.class:Student的字节码文件
        return (Student) session.get(Student.class, stu.getId());
    }
    @SuppressWarnings("unchecked")
    @Override
    public List<Student> list() {
        // 查询session.createQuery("sql语句").list
        Session session = sessionfactory.getCurrentSession();
        return session.createQuery("SELECT stu FROM Student stu").list();
    }
}

4.拷贝架包:数据驱动的hibernate包,Spring的core,test,bean,context等

antlr-2.7.7.jar
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
dom4j-1.6.1.jar
druid-1.0.15.jar
ehcache-core-2.4.3.jar
freemarker-2.3.22.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.2.0.Final.jar
hibernate-ehcache-4.2.0.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.0.Final.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
mysql-connector-java-5.1.40-bin.jar
ognl-3.0.6.jar
servlet-api.jar
slf4j-api-1.6.1.jar
spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-test-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
struts2-core-2.3.24.jar
struts2-spring-plugin-2.3.24.jar
xwork-core-2.3.24.jar

5.Spring的配置文件:

  ①添加并配置.properties文件

  

<context:property-placeholder location="classpath:db.properties" />

  ②配置DataSource,连接数据库

  

<!-- 配置DataSource -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        destroy-method="close">
        <!-- 连接数据库 -->
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

  ④配置SessionFactory:(jdbc/tx/orm架包)

    使用LocalSessionFactoryBean 创建SessionFactory

    配置dataSource和引用

    配置hibernate中的常规配置(方言)

    配置domain的映射文件

  

    <!-- 配置sessionFactory -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

        <!-- 配置连接数据库的信息 此处的name是org.springframework.orm.hibernate4.LocalSessionFactoryBean类中的dataSource
            此处的ref是引用配置DateSource中的id -->
        <property name="dataSource" ref="dataSource" />

        <!-- 配置hibernate常规配置 -->
        <property name="hibernateProperties">
            <!-- dialect方言 -->
            <value>
                hibernate.dialect=org.hibernate.dialect.MySQLDialect
                hibernate.hbm2ddl.auto=none
                hibernate.show_sql=true
            </value>
        </property>

        <!-- 配置映射文件,告诉Spring框架*.hbm.xml在哪 此处的name是org.springframework.orm.hibernate4.LocalSessionFactoryBean类中的mappingDirectoryLocations
            value是自己的对象xml的包的权限定名称 -->
        <property name="mappingDirectoryLocations" value="classpath:com/xk/ssh/proj/domian" />
    </bean>

6.编写Dao

  ①直接在Dao中注入一个SessionFactory;

private SessionFactory sessionfactory;
    public void setSessionfactory(SessionFactory sessionfactory) {
        this.sessionfactory = sessionfactory;
    }

  ②在Dao中直接使用SessionFactory.getCurrentSession()来得到我们需要的session

  

Session session = sessionfactory.getCurrentSession();

7.在Spring中配置Dao

  ①抽象一个baseDao;

  <bean id = "baseDao" abstract = "true" />

  ②Dao继承BaseDao;

  <bean id="stuDao" parent="baseDao"/>

  

Dao类extends jdbcDaoSupport implements 接口

 8.编写Service

  ①编写Service接口和实现

  

package com.xk.ssh.proj.service;
import java.util.List;
import com.xk.ssh.proj.domian.Student;
public interface IStudentService {
public void save(Student stu);
    public void delete(Student stu);
    public void update(Student stu);
    public Student get(Student stu);
    public List<Student> list();
}
 1 package com.xk.ssh.proj.service.impl;
 2 import java.util.List;
 3 import com.xk.ssh.proj.dao.IStudentDao;
 4 import com.xk.ssh.proj.domian.Student;
 5 import com.xk.ssh.proj.service.IStudentService;
 6 public class StudentServiceImpl implements IStudentService {
 7     private IStudentDao student;
 8     public void setStudent(IStudentDao student) {
 9         this.student = student;
10     }
11     @Override
12     public void save(Student stu) {
13         student.save(stu);
14     }
15     @Override
16     public void delete(Student stu) {
17         student.delete(stu);
18     }
19     @Override
20     public void update(Student stu) {
21         student.update(stu);
22     }
23     @Override
24     public Student get(Student stu) {
25         return student.get(stu);
26     }
27     @Override
28     public List<Student> list() {
29         return student.list();
30     }
31 }

  ②在Spring中配置事物servicebean

  

<!-- 配置service id为唯一标识,class为service的实现类 name为service实现类中注入的dao层对象 ref为引用Dao -->
    <bean id="stuService" class="com.xk.ssh.proj.service.impl.StudentServiceImpl">
        <property name="student" ref="stuDao" />
    </bean>

 9.配置事物

  

    <!-- 配置事务管理器 -->
    <bean id="txMgr"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <!-- 配置事物 事物是配置给service实现的 -->
    <aop:config>
        <!-- pointcut:切点 ; Advice:通知 advisor:切点和通知的配置器 下面是配置切点:advice-ref:引用通知的ID -->
        <aop:pointcut expression="execution(* com.xk.ssh.proj.service.*.*(..))"
            id="stuTC" />
        <aop:advisor advice-ref="StuAdvice" pointcut-ref="stuTC" />
    </aop:config>

    <tx:advice id="StuAdvice" transaction-manager="txMgr">
        <tx:attributes>
            <!-- 过滤方法,将所有以get和list开头的方法标记为只读 -->
            <tx:method name="get*" read-only="true" />
            <tx:method name="list*" read-only="true" />
            <tx:method name="*" />
        </tx:attributes>
    </tx:advice>

三.将Struts2 集成在Spring容器

  1.导架包:(spring-web/Struts-spring-plugin...jar)

  2.编写Struts.xml(位置与源文件夹同级)

  

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.action.extension" value="action,nice,,"></constant> <!-- 加后缀 -->
    <constant name="struts.devMode" value="true" />  <!-- 小的改动不需要再启动服务器 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!-- 动态调用 -->

     <package name="hello" extends="struts-default">
         <action name="list_*" class="StuAction" method="{1}">
             <result name="list">/WEB-INF/views/SSH.jsp</result>
         </action>
     </package>
</struts>

  3.编写web.xml文件(位置在WEB-INF文件夹下面)

  

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.action.extension" value="action,nice,,"></constant> <!-- 加后缀 -->
    <constant name="struts.devMode" value="true" />  <!-- 小的改动不需要再启动服务器 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!-- 动态调用 -->

     <package name="hello" extends="struts-default">
         <action name="list_*" class="StuAction" method="{1}">
             <result name="list">/WEB-INF/views/SSH.jsp</result>
         </action>
     </package>
</struts>

  4.编写Action (页面请求)

  

package com.xk.ssh.proj.mvc;
import java.util.List;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.xk.ssh.proj.domian.Student;
import com.xk.ssh.proj.service.IStudentService;
public class StudentAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    private IStudentService studentService;
    public void setStudentService(IStudentService studentService) {
        this.studentService = studentService;
    }
    public String list() {
        List<Student> list = studentService.list();
        ActionContext context = ActionContext.getContext();
        context.put("key", list);
        System.out.println(list);
        return "list";
    }
}

5.在applicationcontext.xml中配置action

  

<!-- 配置Action -->
    <bean id="StuAction" class="com.xk.ssh.proj.mvc.StudentAction">
        <property name="studentService" ref="stuService"/>
    </bean>

6.编写Struts的配置文件:在action的class属性中填写的是此action在applicationcontext.xml中对应的bean的id

7.在web.xml中添加listener监听器

8.在web.xml中添加Spring框架启动的加载文件配置路径

<context-param >
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationcontext.xml</param-value>
    </context-param>

四.附上完整代码:

  1 //domain
  2 package com.xk.ssh.proj.domian;
  3
  4 public class Student {
  5     private Integer id;
  6     private String name;
  7     private Integer age;
  8     private double fees;
  9     private long contact;
 10     public Student() {
 11     }
 12     public Integer getId() {
 13         return id;
 14     }
 15     public void setId(Integer id) {
 16         this.id = id;
 17     }
 18     public String getName() {
 19         return name;
 20     }
 21     public void setName(String name) {
 22         this.name = name;
 23     }
 24     public Integer getAge() {
 25         return age;
 26     }
 27     public void setAge(Integer age) {
 28         this.age = age;
 29     }
 30     public double getFees() {
 31         return fees;
 32     }
 33     public void setFees(double fees) {
 34         this.fees = fees;
 35     }
 36     public long getContact() {
 37         return contact;
 38     }
 39     public void setContact(long contact) {
 40         this.contact = contact;
 41     }
 42     @Override
 43     public String toString() {
 44         return "Student [id=" + id + ", name=" + name + ", age=" + age + ", fees=" + fees + ", contact=" + contact
 45                 + "]";
 46     }
 47     public Student(Integer id, String name, Integer age, double fees, long contact) {
 48         this.id = id;
 49         this.name = name;
 50         this.age = age;
 51         this.fees = fees;
 52         this.contact = contact;
 53     }
 54     public Student( String name, Integer age, double fees, long contact) {
 55         this.name = name;
 56         this.age = age;
 57         this.fees = fees;
 58         this.contact = contact;
 59     }
 60     public Student(Integer id) {
 61         this.id = id;
 62     }
 63 }
 64
 65 //domain的xml
 66 <?xml version="1.0"?>
 67 <!DOCTYPE hibernate-mapping PUBLIC
 68     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 69     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 70 <hibernate-mapping package="com.xk.ssh.proj.domian">
 71     <class name="Student" table="Student">
 72         <id name="id" column="s_id">
 73             <generator class="native" />
 74         </id>
 75         <property name="name" column="s_name" />
 76         <property name="age" column="s_age" />
 77         <property name="fees" column="s_fees" />
 78         <property name="contact" column="s_phone" />
 79     </class>
 80 </hibernate-mapping>
 81 //dao接口
 82 package com.xk.ssh.proj.dao;
 83 import java.util.List;
 84 import com.xk.ssh.proj.domian.Student;
 85 public interface IStudentDao {
 86     public void save(Student stu);
 87     public void delete(Student stu);
 88     public void update(Student stu);
 89     public Student get(Student stu);
 90     public List<Student> list();
 91 }
 92
 93 //dao
 94 package com.xk.ssh.proj.dao.impl;
 95
 96 import java.util.List;
 97
 98 import org.hibernate.Session;
 99 import org.hibernate.SessionFactory;
100
101
102 import com.xk.ssh.proj.dao.IStudentDao;
103 import com.xk.ssh.proj.domian.Student;
104
105 public class StudentDaoImpl implements IStudentDao {
106     // 在Dao中注入SessionFaction
107     private SessionFactory sessionfactory;
108     public void setSessionfactory(SessionFactory sessionfactory) {
109         this.sessionfactory = sessionfactory;
110     }
111     @Override
112     public void save(Student stu) {
113         Session session = sessionfactory.getCurrentSession();
114         session.save(stu);
115     }
116     @Override
117     public void delete(Student stu) {
118         Session session = sessionfactory.getCurrentSession();
119         session.delete(stu);
120     }
121     @Override
122     public void update(Student stu) {
123         Session session = sessionfactory.getCurrentSession();
124         session.update(stu);
125     }
126     @Override
127     public Student get(Student stu) {
128         Session session = sessionfactory.getCurrentSession();
129         // Student.class:Student的字节码文件
130         return (Student) session.get(Student.class, stu.getId());
131     }
132     @SuppressWarnings("unchecked")
133     @Override
134     public List<Student> list() {
135         // 查询session.createQuery("sql语句").list
136         Session session = sessionfactory.getCurrentSession();
137         return session.createQuery("SELECT stu FROM Student stu").list();
138     }
139 }
140 //service接口
141 package com.xk.ssh.proj.service;
142 import java.util.List;
143 import com.xk.ssh.proj.domian.Student;
144 public interface IStudentService {
145 public void save(Student stu);
146     public void delete(Student stu);
147     public void update(Student stu);
148     public Student get(Student stu);
149     public List<Student> list();
150 }
151
152 //service类
153 package com.xk.ssh.proj.service.impl;
154 import java.util.List;
155 import com.xk.ssh.proj.dao.IStudentDao;
156 import com.xk.ssh.proj.domian.Student;
157 import com.xk.ssh.proj.service.IStudentService;
158 public class StudentServiceImpl implements IStudentService {
159     private IStudentDao student;
160     public void setStudent(IStudentDao student) {
161         this.student = student;
162     }
163     @Override
164     public void save(Student stu) {
165         student.save(stu);
166     }
167     @Override
168     public void delete(Student stu) {
169         student.delete(stu);
170     }
171     @Override
172     public void update(Student stu) {
173         student.update(stu);
174     }
175     @Override
176     public Student get(Student stu) {
177         return student.get(stu);
178     }
179     @Override
180     public List<Student> list() {
181         return student.list();
182     }
183 }
184
185 //MVC:action类
186 package com.xk.ssh.proj.mvc;
187 import java.util.List;
188 import com.opensymphony.xwork2.ActionContext;
189 import com.opensymphony.xwork2.ActionSupport;
190 import com.xk.ssh.proj.domian.Student;
191 import com.xk.ssh.proj.service.IStudentService;
192 public class StudentAction extends ActionSupport {
193     private static final long serialVersionUID = 1L;
194     private IStudentService studentService;
195     public void setStudentService(IStudentService studentService) {
196         this.studentService = studentService;
197     }
198     public String list() {
199         List<Student> list = studentService.list();
200         ActionContext context = ActionContext.getContext();
201         context.put("key", list);
202         System.out.println(list);
203         return "list";
204     }
205 }
206 //Struts.xml
207 <?xml version="1.0" encoding="UTF-8" ?>
208 <!DOCTYPE struts PUBLIC
209     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
210     "http://struts.apache.org/dtds/struts-2.3.dtd">
211 <struts>
212     <constant name="struts.action.extension" value="action,nice,,"></constant> <!-- 加后缀 -->
213     <constant name="struts.devMode" value="true" />  <!-- 小的改动不需要再启动服务器 -->
214     <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!-- 动态调用 -->
215
216      <package name="hello" extends="struts-default">
217          <action name="list_*" class="StuAction" method="{1}">
218              <result name="list">/WEB-INF/views/SSH.jsp</result>
219          </action>
220      </package>
221 </struts>
222
223 //applicationcontext.xml
224 <?xml version="1.0" encoding="UTF-8"?>
225 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
226     xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx"
227     xmlns:context="http://www.springframework.org/schema/context"
228     xmlns:aop="http://www.springframework.org/schema/aop"
229     xsi:schemaLocation="http://www.springframework.org/schema/beans
230            http://www.springframework.org/schema/beans/spring-beans.xsd
231            http://www.springframework.org/schema/context
232            http://www.springframework.org/schema/context/spring-context.xsd
233            http://www.springframework.org/schema/aop
234            http://www.springframework.org/schema/aop/spring-aop.xsd
235            http://www.springframework.org/schema/tx
236            http://www.springframework.org/schema/tx/spring-tx.xsd">
237     <!-- 配置数据库连接池 -->
238     <context:property-placeholder location="classpath:db.properties" />
239
240     <!-- 配置DataSource -->
241     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
242         destroy-method="close">
243         <!-- 连接数据库 -->
244         <property name="driverClassName" value="${jdbc.driverClassName}" />
245         <property name="url" value="${jdbc.url}" />
246         <property name="username" value="${jdbc.username}" />
247         <property name="password" value="${jdbc.password}" />
248     </bean>
249
250     <!-- 配置sessionFactory -->
251     <bean id="sessionFactory"
252         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
253
254         <!-- 配置连接数据库的信息 此处的name是org.springframework.orm.hibernate4.LocalSessionFactoryBean类中的dataSource
255             此处的ref是引用配置DateSource中的id -->
256         <property name="dataSource" ref="dataSource" />
257
258         <!-- 配置hibernate常规配置 -->
259         <property name="hibernateProperties">
260             <!-- dialect方言 -->
261             <value>
262                 hibernate.dialect=org.hibernate.dialect.MySQLDialect
263                 hibernate.hbm2ddl.auto=none
264                 hibernate.show_sql=true
265             </value>
266         </property>
267
268         <!-- 配置映射文件,告诉Spring框架*.hbm.xml在哪 此处的name是org.springframework.orm.hibernate4.LocalSessionFactoryBean类中的mappingDirectoryLocations
269             value是自己的对象xml的包的权限定名称 -->
270         <property name="mappingDirectoryLocations" value="classpath:com/xk/ssh/proj/domian" />
271     </bean>
272
273     <!-- 配置Dao: 此处ID为唯一标识;class为实现类的权限定 -->
274     <bean id="stuDao" class="com.xk.ssh.proj.dao.impl.StudentDaoImpl">
275         <!-- 此处name为StudentDaoimpl类中的注入的sessionFactory ; ref为session工厂的标识 -->
276         <property name="sessionfactory" ref="sessionFactory" />
277     </bean>
278
279     <!-- 配置service id为唯一标识,class为service的实现类 name为service实现类中注入的dao层对象 ref为引用Dao -->
280     <bean id="stuService" class="com.xk.ssh.proj.service.impl.StudentServiceImpl">
281         <property name="student" ref="stuDao" />
282     </bean>
283
284     <!-- 配置事务管理器 -->
285     <bean id="txMgr"
286         class="org.springframework.orm.hibernate4.HibernateTransactionManager">
287         <property name="sessionFactory" ref="sessionFactory" />
288     </bean>
289
290     <!-- 配置事物 事物是配置给service实现的 -->
291     <aop:config>
292         <!-- pointcut:切点 ; Advice:通知 advisor:切点和通知的配置器 下面是配置切点:advice-ref:引用通知的ID -->
293         <aop:pointcut expression="execution(* com.xk.ssh.proj.service.*.*(..))"
294             id="stuTC" />
295         <aop:advisor advice-ref="StuAdvice" pointcut-ref="stuTC" />
296     </aop:config>
297
298     <tx:advice id="StuAdvice" transaction-manager="txMgr">
299         <tx:attributes>
300             <!-- 过滤方法,将所有以get和list开头的方法标记为只读 -->
301             <tx:method name="get*" read-only="true" />
302             <tx:method name="list*" read-only="true" />
303             <tx:method name="*" />
304         </tx:attributes>
305     </tx:advice>
306     <!-- 配置Action -->
307     <bean id="StuAction" class="com.xk.ssh.proj.mvc.StudentAction">
308         <property name="studentService" ref="stuService"/>
309     </bean>
310
311 </beans>
312 //test测试类
313 package com.xk.ssh.proj.test;
314
315 import java.util.List;
316
317 import org.junit.Test;
318 import org.junit.runner.RunWith;
319 import org.springframework.beans.factory.annotation.Autowired;
320 import org.springframework.test.context.ContextConfiguration;
321 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
322
323 import com.xk.ssh.proj.domian.Student;
324 import com.xk.ssh.proj.service.IStudentService;
325
326 @RunWith(SpringJUnit4ClassRunner.class)
327 @ContextConfiguration("classpath:applicationcontext.xml")
328 public class StudentTest {
329     @Autowired
330     private IStudentService stuService;
331     @Test
332     public void TestStudentSave() throws Exception {
333         stuService.save(new Student("张1", 11, 1991, 2222));
334         stuService.save(new Student("张2", 12, 1992, 2222));
335         stuService.save(new Student("张3", 13, 1993, 2222));
336         stuService.save(new Student("张4", 14, 1994, 2222));
337     }
338     @Test
339     public void TestStudentDelete() throws Exception {
340         stuService.delete(new Student(1));
341     }
342     @Test
343     public void TestStudentUptade() throws Exception {
344         stuService.update(new Student(2, "张阿三", 2, 1123, 12232));
345     }
346     @Test
347     public void TestStudentGet() throws Exception {
348         Student student = stuService.get(new Student(2));
349         System.out.println(student);
350     }
351     @Test
352     public void TestStudentList() throws Exception {
353         List<Student> list = stuService.list();
354         System.out.println(list);
355     }
356 }
357 //properties文件
358 jdbc.driverClassName=com.mysql.jdbc.Driver
359 jdbc.url=jdbc:mysql:///spring
360 jdbc.username=root
361 jdbc.password=root

  

  

时间: 2024-10-24 08:02:41

SSH Struts2+hiberante+Spring整合的相关文章

工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

上文中我们介绍<工作笔记2.软件开发常用工具> 从今天开始本文将教大家如何进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个独立配置:struts2. Hibernate. Spring 2)2个整合:整合Sring和struts2. 整合Spring和Hibernate 3)资源分类 开发包.软件.框架源码,已经共享到百度网盘:http://pan.baidu.com/s/1o6FkbA6 一.3个独立配置 1.Struts2: 1

第一次做的struts2与spring整合

参考:http://www.cnblogs.com/S-E-P/archive/2012/01/18/2325253.html 这篇文章说的关键就是“除了导入Struts2和Spring的核心库之外,还要导入commons-logging和struts2-spring-plugin包,否则启动会出异常” struts2版本:2.3.16.3 我在apache官方网站直接下载的struts-2.3.16.3-all.zip 这里面不仅有struts2的核心jar包,也有spring的核心jar包,

二十六:Struts2 和 spring整合

二十六:Struts2 和 spring整合 将项目名称为day29_02_struts2Spring下的scr目录下的Struts.xml文件拷贝到新项目的scr目录下 在新项目的WebRoot---->WEB-INF目录下新建一个目录lib,用于存放jar包(Struts2和spring整合所需jar包) 将项目名称为day29_02_struts2Spring,WebRoot---->WEB-INF下的lib目录下的所有jar包拷贝到新项目对应的位置,同时将spring的配置文件appl

struts2 与spring整合

要把struts2的action交给spring管理,这样spring才能帮struts2注入需要的的bean(一开始action是由struts初始化,所以想注入spring里面的bean是注入不了的) struts2 的filter生成action的时候由spring管理 struts2向spring要action struts2是主导(struts2有个插件,要action的时候向这个插件要) struts2向spring要,你帮我把action初始化,spring帮strus产生acti

Struts2与Spring整合

Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的bean. 1.导入依赖包 除了导入Struts2和Spring的核心库之外,还要导入commons-logging和struts2-spring-plugin包,否则启动会出异常 2.web.xml的配置 既然有Struts2,核心拦截器的配置是不可少的 <filter> <filter-na

结合源码浅析Struts2与Spring整合的原理

本文假设读者已经自己动手整合过Struts2和Spring这两个框架.我想说明的重点不是如何整合这两个框架,而是为什么经过配置之后Struts的Action等对象可以由Spring来管理,即找到两个框架的衔接点. 笔者用的是框架版本分别为Struts-2.3和Spring-4.1. ------------------------------------------------------- 文章的结构如下: 一.回顾Struts2与Spring整合的配置方法 二.(重点)对关键配置的分析 --

struts2与spring整合时需要注意的点

首先我们需要明白spring整合struts2中的什么东西,spring中的核心就是IOC和AOP,IOC是对象的容器,AOP是处理动态代理的;比如spring与hibernate整合时就要用到aop,具体就是把事务的开启与关闭交于spring中的aop处理.一句话,spring就是整合struts2的对象. 先前struts.xml配置文件中action标签中的class属性的值是"包名+类名",这样配置就可以让struts2自己生成对象,但这样不符合模式设计六大原则,为了解决这个问

Struts2+Hibernate+Spring 整合示例[转]

原文 http://blog.csdn.net/tkd03072010/article/details/7468769 Spring整合Struts2.Hibernate原理概述: 从用户角度来看,用户发出HTTP请求,当MVC框架的控制器组件拦截到用户请求时,将调用系统的业务逻辑组件,业务逻辑组件则调用系统的DAO组件,而DAO组件则依赖于SessionFactory和DataSource等底层组件实现数据库访问. 从系统实现角度看,Ioc容器先创建SessionFactory和DataSou

struts2与spring整合问题,访问struts2链接时,spring会负责创建Action

每次访问一次链接,spring会创建一个对象,并将链接所带的参数注入到Action的变量中(如何做到的呐) 因为: struts2的action每次访问都重新创建一个对象,那spring的ioc是怎么实现注入的呢 ? 靠的是spring给创建的对象. 不知道你的action是在spring容器里还是自己创建的!要是在spring容器中那直接ref就好了. http://zhidao.baidu.com/link?url=tLlBYhZ9WIZLKo_0CzT1m3EIaXqIdAntESNjx3