SSH框架整合-myeclipse

项目结构

 

1.mysql数据库 stuinfo

 1 /*
 2 SQLyog 企业版 - MySQL GUI v8.14 
 3 MySQL - 5.5.40 : Database - stuinfo
 4 *********************************************************************
 5 */
 6 
 7 CREATE DATABASE /*!32312 IF NOT EXISTS*/`stuinfo` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;
 8 
 9 USE `stuinfo`;
10 
11 /*Table structure for table `classes` */
12 
13 DROP TABLE IF EXISTS `classes`;
14 
15 CREATE TABLE `classes` (
16   `id` int(12) NOT NULL AUTO_INCREMENT,
17   `name` varchar(11) COLLATE utf8_bin NOT NULL,
18   PRIMARY KEY (`id`)
19 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
20 
21 /*Data for the table `classes` */
22 
23 insert  into `classes`(`id`,`name`) values (1,'y2134'),(2,'s2188'),(3,'s2192');
24 
25 /*Table structure for table `student` */
26 
27 DROP TABLE IF EXISTS `student`;
28 
29 CREATE TABLE `student` (
30   `id` int(12) NOT NULL AUTO_INCREMENT COMMENT '学员编号',
31   `name` varchar(11) COLLATE utf8_bin NOT NULL COMMENT '姓名',
32   `age` int(12) NOT NULL COMMENT '年龄',
33   `gender` char(2) COLLATE utf8_bin NOT NULL COMMENT '性别',
34   `telephone` varchar(11) COLLATE utf8_bin NOT NULL COMMENT '电话',
35   `email` varchar(32) COLLATE utf8_bin NOT NULL COMMENT 'Email',
36   `classId` int(12) NOT NULL COMMENT '班级编号',
37   PRIMARY KEY (`id`),
38   KEY `FK_student` (`classId`),
39   CONSTRAINT `FK_student` FOREIGN KEY (`classId`) REFERENCES `classes` (`id`)
40 ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
41 
42 /*Data for the table `student` */
43 
44 insert  into `student`(`id`,`name`,`age`,`gender`,`telephone`,`email`,`classId`) values (1,'何东东',20,'男','13910101000','hdd@accp.co',1),(2,'付好',23,'男','18856906326','fuhao@126.com',2),(3,'李建达',24,'男','18888888888','lijianda@qq.com',2),(4,'lucy',20,'女','15852033216','lucy@qq.com',3),(5,'李健',25,'男','13956063365','liyang1@126.com',2),(6,'李健康',20,'男','13956063369','lijiankang@126.com',1);
stuinfo

2. 数据库配置文件

1 driverClass=com.mysql.jdbc.Driver
2 jdbcUrl=jdbc:mysql://localhost:3306/stuinfo?characterEncoding=utf8
3 user=root
4 password=root
View Code

3. spring配置文件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" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
 5 
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 7     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 8     http://www.springframework.org/schema/tx 
 9     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
10     http://www.springframework.org/schema/context 
11     http://www.springframework.org/schema/context/spring-context-3.0.xsd ">
12     <!-- 1.add spring capabilitise -->
13     <!-- 注解扫描包 -->
14     <context:component-scan base-package="cn.stu" />
15     <!-- 读取数据库配置文件 -->
16     <context:property-placeholder location="classpath:jdbc.properties" />
17     <!-- 打开事务注解 -->
18     <tx:annotation-driven />
19     <!-- 数据源配置 -->
20     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
21         <property name="driverClass" value="${driverClass}" />
22         <property name="jdbcUrl" value="${jdbcUrl}" />
23         <property name="user" value="${user}" />
24         <property name="password" value="${password}" />
25     </bean>
26 
27     <!-- sessionFactory配置 -->
28     <bean id="sessionFactory"
29         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
30         <property name="dataSource" ref="dataSource"></property>
31         <property name="hibernateProperties">
32             <props>
33                 <!-- hibernate方言配置 -->
34                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
35                 <!-- 配置hibernate 控制台打印查询sql -->
36                 <prop key="hibernate.show_sql">true</prop>
37                 <prop key="hibernate.format_sql">true</prop>
38             </props>
39         </property>
40         <property name="mappingLocations" value="classpath:cn/stu/entity/*.hbm.xml"></property>
41     </bean>
42     <!-- hibernate方言配置 -->
43     <bean id="transactionManager"
44         class="org.springframework.orm.hibernate3.HibernateTransactionManager">
45         <property name="sessionFactory" ref="sessionFactory"></property>
46     </bean>
47     <!-- hibernateTemplate bean -->
48     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
49         <property name="sessionFactory" ref="sessionFactory"></property>
50     </bean>
51 </beans>
applictaionContext.xml

4.hibernate配置文件hibernate.cfg.xml(反向工具自动生成)

 1 <?xml version='1.0' encoding='UTF-8'?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 
 6 <!-- Generated by MyEclipse Hibernate Tools.                   -->
 7 <hibernate-configuration>
 8 
 9     <session-factory>
10         <property name="dialect">
11             org.hibernate.dialect.MySQLDialect
12         </property>
13         <property name="connection.url">
14             jdbc:mysql://localhost:3306/stuinfo
15         </property>
16         <property name="connection.username">root</property>
17         <property name="connection.password">root</property>
18         <property name="connection.driver_class">
19             com.mysql.jdbc.Driver
20         </property>
21         <property name="myeclipse.connection.profile">mysql</property>
22         <mapping resource="cn/stu/entity/Student.hbm.xml" />
23         <mapping resource="cn/stu/entity/Classes.hbm.xml" />
24 
25     </session-factory>
26 
27 </hibernate-configuration>
hibernate.cfg.xml

5. strus配置文件

 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 <struts>
 6     <package name="default" namespace="/" extends="struts-default">
 7         <action name="stuListPage" class="cn.stu.aciton.StuAction" method="stuListPage">
 8             <!--result不写name,默认name值是success  -->
 9             <result>/index.jsp</result>
10         </action>
11         
12         <action name="stuAddPage" class="cn.stu.aciton.StuAction" method="stuAddPage">
13             <result>/addPage.jsp</result>
14         </action>
15         
16         <action name="addStu" class="cn.stu.aciton.StuAction" method="addStu">
17             <result name="success" type="redirectAction">stuListPage</result> <!-- 保存成功,重定向到显示页面 -->
18             <result name="failed" >/addPage.jsp</result>
19         </action>
20         
21         <action name="deleteClasses" class="cn.stu.aciton.StuAction" method="delStu">
22             <result name="success" type="redirectAction">stuListPage</result>
23         </action> 
24     </package>
25     
26 </struts>
struts.xml

 6. JavaBean和 hibernate sql映射文件(反向工具自动生成,手动写的话,只需写Classes Student两个类就行了)

 1 package cn.stu.entity;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 /**
 7  * AbstractClasses entity provides the base persistence definition of the
 8  * Classes entity. @author MyEclipse Persistence Tools
 9  */
10 
11 public abstract class AbstractClasses implements java.io.Serializable {
12 
13     // Fields
14 
15     private Integer id;
16     private String name;
17     private Set students = new HashSet(0);
18 
19     public AbstractClasses() {
20     }
21 
22     public AbstractClasses(String name) {
23         this.name = name;
24     }
25 
26     public AbstractClasses(String name, Set students) {
27         this.name = name;
28         this.students = students;
29     }
30 
31     // Property accessors
32 
33     public Integer getId() {
34         return this.id;
35     }
36 
37     public void setId(Integer id) {
38         this.id = id;
39     }
40 
41     public String getName() {
42         return this.name;
43     }
44 
45     public void setName(String name) {
46         this.name = name;
47     }
48 
49     public Set getStudents() {
50         return this.students;
51     }
52 
53     public void setStudents(Set students) {
54         this.students = students;
55     }
56 
57 //    @Override
58 //    public String toString() {
59 //        return "AbstractClasses [id=" + id + ", name=" + name + ", students="
60 //                + students + "]";
61 //    }
62 
63     
64 }
AbstractClasses
 1 package cn.stu.entity;
 2 
 3 /**
 4  * AbstractStudent entity provides the base persistence definition of the
 5  * Student entity. @author MyEclipse Persistence Tools
 6  */
 7 
 8 public abstract class AbstractStudent implements java.io.Serializable {
 9 
10     // Fields
11 
12     private Integer id;
13     private Classes classes;
14     private String name;
15     private Integer age;
16     private String gender;
17     private String telephone;
18     private String email;
19 
20     // Constructors
21 
22     /** default constructor */
23     public AbstractStudent() {
24     }
25 
26     /** full constructor */
27     public AbstractStudent(Classes classes, String name, Integer age,
28             String gender, String telephone, String email) {
29         this.classes = classes;
30         this.name = name;
31         this.age = age;
32         this.gender = gender;
33         this.telephone = telephone;
34         this.email = email;
35     }
36 
37     // Property accessors
38 
39     public Integer getId() {
40         return this.id;
41     }
42 
43     public void setId(Integer id) {
44         this.id = id;
45     }
46 
47     public Classes getClasses() {
48         return this.classes;
49     }
50 
51     public void setClasses(Classes classes) {
52         this.classes = classes;
53     }
54 
55     public String getName() {
56         return this.name;
57     }
58 
59     public void setName(String name) {
60         this.name = name;
61     }
62 
63     public Integer getAge() {
64         return this.age;
65     }
66 
67     public void setAge(Integer age) {
68         this.age = age;
69     }
70 
71     public String getGender() {
72         return this.gender;
73     }
74 
75     public void setGender(String gender) {
76         this.gender = gender;
77     }
78 
79     public String getTelephone() {
80         return this.telephone;
81     }
82 
83     public void setTelephone(String telephone) {
84         this.telephone = telephone;
85     }
86 
87     public String getEmail() {
88         return this.email;
89     }
90 
91     public void setEmail(String email) {
92         this.email = email;
93     }
94 
95 }
AbstractStudent
 1 package cn.stu.entity;
 2 
 3 import java.util.Set;
 4 
 5 /**
 6  * Classes entity. @author MyEclipse Persistence Tools
 7  */
 8 public class Classes extends AbstractClasses implements java.io.Serializable {
 9 
10     // Constructors
11 
12     /** default constructor */
13     public Classes() {
14     }
15 
16     /** minimal constructor */
17     public Classes(String name) {
18         super(name);
19     }
20 
21     /** full constructor */
22     public Classes(String name, Set students) {
23         super(name, students);
24     }
25 
26 }
Classes
 1 package cn.stu.entity;
 2 
 3 /**
 4  * Student entity. @author MyEclipse Persistence Tools
 5  */
 6 public class Student extends AbstractStudent implements java.io.Serializable {
 7 
 8     // Constructors
 9 
10     /** default constructor */
11     public Student() {
12     }
13 
14     /** full constructor */
15     public Student(Classes classes, String name, Integer age, String gender,
16             String telephone, String email) {
17         super(classes, name, age, gender, telephone, email);
18     }
19 
20     
21 }
Student
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- 
 5     Mapping file autogenerated by MyEclipse Persistence Tools
 6 -->
 7 <hibernate-mapping>
 8     <class name="cn.stu.entity.Classes" table="classes" catalog="stuinfo" lazy="false">
 9         <id name="id" type="java.lang.Integer">
10             <column name="id" />
11             <generator class="identity" />
12         </id>
13         <property name="name" type="java.lang.String">
14             <column name="name" length="11" not-null="true" />
15         </property>
16         <set name="students" inverse="true">
17             <key>
18                 <column name="classId" not-null="true">
19                     <comment>班级编号</comment>
20                 </column>
21             </key>
22             <one-to-many class="cn.stu.entity.Student" />
23         </set>
24     </class>
25 </hibernate-mapping>
Classes.hbm.xml
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- 
 5     Mapping file autogenerated by MyEclipse Persistence Tools
 6 -->
 7 <hibernate-mapping>
 8     <class name="cn.stu.entity.Student" table="student" catalog="stuinfo" lazy="false">
 9         <id name="id" type="java.lang.Integer">
10             <column name="id" />
11             <generator class="identity" />
12         </id>
13         <many-to-one name="classes" class="cn.stu.entity.Classes" fetch="select">
14             <column name="classId" not-null="true">
15                 <comment>班级编号</comment>
16             </column>
17         </many-to-one>
18         <property name="name" type="java.lang.String">
19             <column name="name" length="11" not-null="true">
20                 <comment>姓名</comment>
21             </column>
22         </property>
23         <property name="age" type="java.lang.Integer">
24             <column name="age" not-null="true">
25                 <comment>年龄</comment>
26             </column>
27         </property>
28         <property name="gender" type="java.lang.String">
29             <column name="gender" length="2" not-null="true">
30                 <comment>性别</comment>
31             </column>
32         </property>
33         <property name="telephone" type="java.lang.String">
34             <column name="telephone" length="11" not-null="true">
35                 <comment>电话</comment>
36             </column>
37         </property>
38         <property name="email" type="java.lang.String">
39             <column name="email" length="11" not-null="true">
40                 <comment>Email</comment>
41             </column>
42         </property>
43     </class>
44 </hibernate-mapping>
Student.hbm.xml

7.DAO层

 1 package cn.stu.dao;
 2 
 3 import java.io.Serializable;
 4 import java.util.List;
 5 
 6 import cn.stu.entity.Classes;
 7 import cn.stu.entity.Student;
 8 
 9 public interface StuDao {
10 
11     /**
12      * 查所有学生
13      * 
14      * @return
15      */
16     List<Student> showStudnets();
17 
18     /**
19      * 添加学生
20      * 
21      * @param student
22      */
23     void addStudent(Student student);
24 
25     /**
26      * 查所有班级列表
27      * 
28      * @return
29      */
30     List<Classes> showClasses();
31 
32     /**
33      * 删除班级
34      * 
35      * @param id
36      */
37     void deleteClasses(Serializable id);
38 
39     /**
40      * 删除学生
41      * 
42      * @param classId
43      */
44     void deleteStudent(Serializable classId);
45 
46 }
StuDao
 1 package cn.stu.dao;
 2 
 3 import java.io.Serializable;
 4 import java.util.List;
 5 
 6 import org.junit.Test;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.context.support.ClassPathXmlApplicationContext;
 9 import org.springframework.orm.hibernate3.HibernateTemplate;
10 import org.springframework.stereotype.Repository;
11 
12 import cn.stu.entity.Classes;
13 import cn.stu.entity.Student;
14 /*
15  * @Repository注解将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。
16  * 为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,
17  * 需要在 XML 配置文件中启用Bean 的自动扫描功能,这可以通过<context:component-scan/>实现*/
18 @Repository //
19 public class StuDaoImpl implements StuDao {
20 
21     @Autowired //自动注入hibernateTemplate 这个bean
22     private HibernateTemplate hibernateTemplate;
23 
24     
25     @SuppressWarnings("unchecked")
26     public List<Student> showStudnets() {
27         String hql = "from Student ";
28         return hibernateTemplate.find(hql);
29     }
30 
31     public void addStudent(Student student) {
32         
33         hibernateTemplate.save(student);
34     }
35 
36     public List<Classes> showClasses() {
37         String hql="from Classes";
38         return hibernateTemplate.find(hql);
39         
40     }
41 
42     public void deleteClasses(Serializable id) {
43         Classes classes = hibernateTemplate.get(Classes.class, id);
44         hibernateTemplate.delete(classes);
45     }
46 
47     public void deleteStudent(Serializable classId) {
48         //String hql = "delete from Student where classId =: classId";
49         //bulkUpdate方法是hibernateTemplate提供的批量删除方法!!!
50         hibernateTemplate.bulkUpdate("delete from Student where classId =?", new Object[]{classId});
51         
52     }
53     
54 
55 }
StuDaoImpl

8.Service层

 1 package cn.stu.service;
 2 
 3 import java.io.Serializable;
 4 import java.util.List;
 5 
 6 import cn.stu.entity.Classes;
 7 import cn.stu.entity.Student;
 8 
 9 public interface StuService {
10 
11     List<Student> showStudnets();
12 
13     void addStudent(Student student);
14 
15     List<Classes> showClasses();
16     
17     void deleteClasses(Serializable id);
18 }
StuService
 1 package cn.stu.service;
 2 
 3 import java.io.Serializable;
 4 import java.util.List;
 5 
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.stereotype.Service;
 8 import org.springframework.transaction.annotation.Isolation;
 9 import org.springframework.transaction.annotation.Propagation;
10 import org.springframework.transaction.annotation.Transactional;
11 
12 import cn.stu.dao.StuDao;
13 import cn.stu.entity.Classes;
14 import cn.stu.entity.Student;
15 
16 @Service
17 @Transactional //事务注解,后面删除功能用到了事务管理
18 public class StuServiceImpl implements StuService {
19 
20     @Autowired
21     private StuDao dao;
22     
23     public void addStudent(Student student) {
24         dao.addStudent(student);
25     }
26 
27     public List<Classes> showClasses() {
28         return dao.showClasses();
29     }
30 
31     public List<Student> showStudnets() {
32         return dao.showStudnets();
33     }
34     
35     @Transactional(propagation=Propagation.REQUIRED,
36             isolation=Isolation.DEFAULT,
37             rollbackFor=Exception.class)
38     public void deleteClasses(Serializable id){
39         //删除班级,同时删除该班级下的学生,写在通一个service方法里,受事务保护
40         System.out.println("删除班级和对应的学生,班级id:"+id);
41         dao.deleteStudent(id);
42         try {
43             int i=1/0;
44         } catch (Exception e) {
45             e.printStackTrace();
46         //    throw new RuntimeException(e);//如果进行捕获,必须要手动抛出异常,否则事务不会回滚
47         }
48         dao.deleteClasses(id);
49     
50         
51     }
52     
53 
54 }
55 
56 
57 /*
58  * @Transactional(propagation=Propagation.REQUIRED,
59             isolation=Isolation.DEFAULT,
60             rollbackFor=Exception.class)
61     public void deleteClasses(Serializable id){
62         //删除班级,同时删除该班级下的学生,写在通一个service方法里,受事务保护
63         System.out.println("删除班级和对应的学生,班级id:"+id);
64         try {
65             if(id!=null){
66                 dao.deleteStudent(id);
67                 int i=1/0;
68                 dao.deleteClasses(id);//在deleteClasses方法里面制造异常,还是能完整的删除
69             }
70         } catch (Exception e) {
71             System.out.println("人为制造异常测试事务(删除班级及对应班级的学生)能否进行回滚!");
72             
73             e.printStackTrace();
74         }
75         
76     }
77  * */
StuServiceImpl

 9.servlet层

  1 package cn.stu.aciton;
  2 
  3 import java.util.List;
  4 
  5 
  6 import org.springframework.beans.factory.annotation.Autowired;
  7 import org.springframework.stereotype.Controller;
  8 
  9 import cn.stu.entity.Classes;
 10 import cn.stu.entity.Student;
 11 import cn.stu.service.StuService;
 12 
 13 import com.opensymphony.xwork2.ActionContext;
 14 import com.opensymphony.xwork2.ActionSupport;
 15 
 16 /**
 17  * 使用struts的action作为控制器
 18  * 
 19  * @author Administrator
 20  * 
 21  */
 22 @Controller
 23 public class StuAction extends ActionSupport {
 24 
 25     private static final long serialVersionUID = 1L;
 26     @Autowired
 27     private StuService stuService;
 28     private List<Student> stus = null;
 29     private List<Classes> classes = null;
 30     private Student student;// 用于接收表单提交的添加学生信息
 31     private Integer classId;//要删除的班级编号————一定要生成get set方法,否则获取不到页面的参数值
 32 
 33     public Integer getClassId() {
 34         return classId;
 35     }
 36 
 37     public void setClassId(Integer classId) {
 38         this.classId = classId;
 39     }
 40 
 41     public List<Student> getStus() {
 42         return stus;
 43     }
 44 
 45     public void setStus(List<Student> stus) {
 46         this.stus = stus;
 47     }
 48 
 49     public List<Classes> getClasses() {
 50         return classes;
 51     }
 52 
 53     public void setClasses(List<Classes> classes) {
 54         this.classes = classes;
 55     }
 56 
 57     public Student getStudent() {
 58         return student;
 59     }
 60 
 61     public void setStudent(Student student) {
 62         this.student = student;
 63     }
 64 
 65     /**
 66      * 请求tomcat服务器http://localhost:8080/StuManagementSSH/stuListPage.action
 67      * 跳转到学生列表显示页面
 68      * 
 69      * @return
 70      */
 71     public String stuListPage() {
 72         System.out.println("in stuListPage method...");
 73         stus = stuService.showStudnets();
 74         return SUCCESS;
 75     }
 76 
 77     /**
 78      * 跳转到添加学生页面
 79      * 
 80      * @return
 81      */
 82     public String stuAddPage() {
 83         classes = stuService.showClasses();
 84         return SUCCESS;
 85     }
 86 
 87     /**
 88      * 添加学生页面表单提交
 89      * 
 90      * @return
 91      */
 92     public String addStu() {
 93         try {
 94             stuService.addStudent(student);
 95             ActionContext context = ActionContext.getContext();
 96         //    ActionContext.getContext().getSession().put("loginUser", student);//保存信息到session中
 97 //            Map<String, Object> session = context.getSession();
 98 //            Map<String, Object> application = context.getApplication();
 99 //            Map request = (Map)context.get("request");//与context.put()相同
100 //            context.put("name", "gree");//放到request作用域
101             return SUCCESS;
102         } catch (Exception e) {
103             
104             e.printStackTrace();
105             return "failed";
106         }
107     }
108     
109     
110     public String delStu(){
111         stuService.deleteClasses(classId);
112         return SUCCESS;
113     }
114 }
StuAction

10.web.xml配置:

(1)配置OpenSessionInViewFilter,保证一次请求期间,都使用同一个session,要设置在struts核心过滤器之前

(2) struts过滤器配置

(3)创建监听器,获得spring配置文件的信息,创建容器

(4)启动时加载上下文,即加载spring

 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   <welcome-file-list>
 8     <welcome-file>index.jsp</welcome-file>
 9   </welcome-file-list>
10   
11   <!-- 防止懒加载异常,保证一次请求期间,都使用同一个session,要设置在struts核心过滤器之前 -->
12   <filter>
13       <filter-name>OpenSessionInViewFilter</filter-name>
14       <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
15      <init-param>
16          <param-name>sessionFactoryBeanName</param-name>
17          <param-value>sessionFactory</param-value>   <!-- applicaionContext.xml中的sessionFactory -->
18      </init-param>
19   </filter>
20   <filter-mapping>
21       <filter-name>OpenSessionInViewFilter</filter-name>
22       <url-pattern>*.action</url-pattern>
23   </filter-mapping>
24   
25   <!-- struts过滤器配置 -->
26   <filter>
27       <filter-name>StrutsPrepareAndExecuteFilter</filter-name>
28       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
29   </filter>
30   <filter-mapping>
31       <filter-name>StrutsPrepareAndExecuteFilter</filter-name>
32       <!-- 只要是同一个action,都在一个会话里完成 -->
33       <url-pattern>*.action</url-pattern>
34       <!--  <url-pattern>*.jsp</url-pattern> -->
35   </filter-mapping>
36   
37   <!-- 监听器,获得spring配置文件的信息,创建容器 -->
38   <listener>
39       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
40   </listener>
41   
42   <!-- 启动时加载上下文 -->
43   <context-param>
44       <param-name>contextConfigLocation</param-name>
45       <param-value>classpath:applicationContext.xml</param-value>
46   </context-param>
47   
48 </web-app>
web.xml

11. 学生列表显示页即添加信息页

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@ taglib uri="/struts-tags"  prefix="s"%>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 
 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 9 <html>
10   <head>
11     <base href="<%=basePath%>">
12     
13     <title>My JSP 'index.jsp' starting page</title>
14     <meta http-equiv="pragma" content="no-cache">
15     <meta http-equiv="cache-control" content="no-cache">
16     <meta http-equiv="expires" content="0">    
17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
18     <meta http-equiv="description" content="This is my page">
19     <!--
20     <link rel="stylesheet" type="text/css" href="styles.css">
21     -->
22   </head>
23   
24   <body>
25     stulist page. <br>
26     <a href="stuAddPage.action">添加学生</a>
27     <table border="1">
28         <s:iterator value="stus" var="stu">
29             <tr>
30                 <td><s:property value="#stu.id"/> </td>
31                 <td><s:property value="#stu.name"/> </td>
32                 <td><s:property value="#stu.age"/> </td>
33                 <td><s:property value="#stu.gender"/> </td>
34                 <td><s:property value="#stu.telephone"/> </td>
35                 <td><s:property value="#stu.email"/> </td>
36             </tr>
37         </s:iterator>
38     </table>
39   </body>
40 </html>
index.jsp
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@ taglib uri="/struts-tags" prefix="s"%>
 3 <%
 4     String path = request.getContextPath();
 5     String basePath = request.getScheme() + "://"
 6             + request.getServerName() + ":" + request.getServerPort()
 7             + path + "/";
 8 %>
 9 
10 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
11 <html>
12     <head>
13         <base href="<%=basePath%>">
14 
15         <title>My JSP 'index.jsp' starting page</title>
16         <meta http-equiv="pragma" content="no-cache">
17         <meta http-equiv="cache-control" content="no-cache">
18         <meta http-equiv="expires" content="0">
19         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
20         <meta http-equiv="description" content="This is my page">
21         <!--
22     <link rel="stylesheet" type="text/css" href="styles.css">
23     -->
24     </head>
25 
26     <body>
27         add page.
28         <br>
29         <s:form action="addStu.action" method="post">
30             <s:textfield label="姓名" name="student.name"></s:textfield>
31             <s:textfield label="年龄" name="student.age"></s:textfield>
32             <s:textfield label="性别" name="student.gender"></s:textfield>
33             <s:textfield label="电话" name="student.telephone"></s:textfield>
34             <s:textfield label="邮箱" name="student.email"></s:textfield>
35             <s:select label="年级" name="student.classes.id" list="classes"
36                 headerValue="请选择" headerKey="0" listKey="id" listValue="name">
37             </s:select>
38             <s:submit value="提交"></s:submit>
39         </s:form>
40     </body>
41 </html>
addPage.jsp

 根据struts配置文件中配置的请求访问路径,访问 http://localhost:8080/StuManagementSSH/stuListPage.action

添加页面:(添加完成,要继续返回到列表显示页,因此添加完成后,应该重定向到请求列表页显示的那个服务)

删除功能未做

原文地址:https://www.cnblogs.com/enjoyjava/p/8886777.html