浙江工业大学logo-文字.png

JavaEE实验八
2021/2022(1)
浙江工业大学logo.png

  1. 实验八 spring-proj1

学生姓名 张坤
学生学号 201906061726
学生班级 软件工程1903
任课教师 韩珊珊
提交日期 2021年10月30日

计算机科学与技术学院

一、基础实验——Spring 框架搭建

实验内容及步骤

创建普通的maven项目

image.png
pom.xml中导入maven包

  1. <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
  2. <dependency>
  3. <groupId>org.springframework</groupId>
  4. <artifactId>spring-core</artifactId>
  5. <version>5.3.8</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework</groupId>
  9. <artifactId>spring-context</artifactId>
  10. <version>5.3.8</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework</groupId>
  14. <artifactId>spring-beans</artifactId>
  15. <version>5.3.8</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework</groupId>
  19. <artifactId>spring-expression</artifactId>
  20. <version>5.3.8</version>
  21. </dependency>

spring架构搭建

在spring-prj1 中新建cn.edu.zjut.dao 包,并在其中创建ICustomerDAO 接口定义数据持久层的操作,以及实现类CustomerDAO 实现数据持久层的操作,具体代码如下

  1. package cn.edu.zjut.dao;
  2. public interface ICustomerDAO {
  3. public void save();
  4. }
  1. package cn.edu.zjut.dao;
  2. public class CustomerDAO implements ICustomerDAO{
  3. public CustomerDAO(){
  4. System.out.println("create CustomerDao.");
  5. }
  6. @Override
  7. public void save() {
  8. System.out.println("execute --save()-- method.");
  9. }
  10. }

在spring-prj1 中的resource文件夹下创建Spring 配置文件applicationContext.xml,并在其中配置CustomerDAO 实例,具体代码如下:

  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:p="http://www.springframework.org/schema/p"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
  7. <bean id="userDAO" class="cn.edu.zjut.dao.CustomerDAO" />
  8. </beans>

image.png
在spring-prj1 中新建cn.edu.zjut.app 包,并在其中创建测试类SpringEnvTest,调用CustomerDAO 实例的save()方法,具体代码如下:

  1. package cn.edu.zjut.app;
  2. import cn.edu.zjut.dao.ICustomerDAO;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5. /**
  6. * @Author: 张坤
  7. * @DateTime: 2021/11/22 10:12
  8. * @Description: 该类用于 TODO
  9. */
  10. public class SpringEnvTest {
  11. public static void main(String[] args) {
  12. //创建Spring 容器
  13. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  14. //获取CustomerDAO 实例
  15. ICustomerDAO userDao = (ICustomerDAO) ctx.getBean("userDAO");
  16. userDao.save();
  17. }
  18. }

输出如下
image.png

注册逻辑实现

在spring-prj1 中新建cn.edu.zjut.service 包,并在其中创建IUserService 接口定义注册逻辑,以及实现类UserService 实现注册逻辑,具体代码如下

  1. package cn.edu.zjut.service;
  2. public interface IUserService {
  3. public void register();
  4. }
  1. package cn.edu.zjut.service;
  2. public class UserService implements IUserService{
  3. private ICustomerDAO customerDAO = null;
  4. public UserService(){
  5. System.out.println("create UserService.");
  6. }
  7. public void setCustomerDAO(ICustomerDAO customerDAO) {
  8. System.out.println("--setCustomerDAO--");
  9. this.customerDAO = customerDAO;
  10. }
  11. public void register() {
  12. System.out.println("execute --register()-- method.");
  13. customerDAO.save();
  14. }
  15. }

修改Spring 配置文件applicationContext.xml,在其中增加UserService 实例的配置,具体代码如下:

  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:p="http://www.springframework.org/schema/p"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
  7. <bean id="userDAO" class="cn.edu.zjut.dao.CustomerDAO" />
  8. <bean id="userService" class="cn.edu.zjut.service.UserService">
  9. <property name="customerDAO" ref="userDAO" />
  10. </bean>
  11. </beans>

修改测试类SpringEnvTest,调用UserService 实例的register()方法,具体代码如下:

  1. public class SpringEnvTest {
  2. public static void main(String[] args) {
  3. //创建Spring 容器
  4. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  5. //获取UserService 实例
  6. IUserService userService =
  7. (IUserService) ctx.getBean("userService");
  8. userService.register();
  9. }
  10. }

运行如下
image.png

实验总结

  1. 运行结果截图;
  2. 根据实验过程,观察运行后的控制台输出,查找相关资料,总结Spring 容器管理Bean 组件的过程(如:何时加载、何时调用Bean 实例中的方法等)以及进行依赖注入的过程,并记录下来;
  • 加载过程:
    1. 利用 EncodedResource 二次包装资源文件
    2. 获取资源输入流,并构造 InputSource 对象
    3. 获取 XML 文件的实体解析器和验证模式
    4. 加载 XML 文件,获取对应的 Document 对象
    5. 由 Document 对象解析并注册 bean
  • 实例化:
    当spring容器实例化的时候,把容器中对象全部完成实例化
  • 依赖注入过程:
    依赖注入的过程是“用户第一次向IoC容器索要Bean时触发的”。BeanFactory进行索要,索要的方法就BeanFactory定义的getBean()接口。调用这个接口,就等于触发依赖注入了
  1. 根据实验步骤4、8,查找相关资料,总结Spring 配置文件中bean 元素及其属性、子元素的作用,并记录下来;

一、bean标签的属性
1)scope:用来配置spring bean的作用域
2)singleton:表示bean为单例的
3)abstract:设置为true,将该bean仅仅作为模板使用,应用程序上下文不会试图预先初始化它
4)lazy-init:设为true,延迟加载,该bean不会在ApplicationContext启动时提前被实例化,而是第一次向容器通过getBean索取bean时实例化
注:只对singleton的bean起作用
5)autowire:自动装配
6)dependency-check:依赖检查
7)depends-on:表示一个bean的实例化依靠另一个bean先实例化
8)autowire-candidate:设为false,容器在查找自动装配对象时,将不考虑该bean,即它不会被考虑作为其他bean自动装配的候选者,但是该bean本身可以使用自动装配来注入其他bean
9)primary:该bean优先被注入
10)init-method:初始化bean时调用的方法
11)destory-method:容器销毁之前所调用的方法
12)factory-method:当调用factory-method所指向的方法时,才开始实例化bean
13)factory-bean:调用静态工厂方法的方式创建bean
二、bean的子元素
1)meta:元数据,当需要使用里面的信息时可以通过key获取
2)lookup-method:获取器注入,是把一个方法声明为返回某种类型的bean但实际要返回的bean是在配置文件里面配置的
3)replaced-method:可以在运行时调用新的方法替换现有的方法,还能动态的更新原有方法的逻辑
4)constructor-arg:对bean自动寻找对应的构造函数,并在初始化的时候将设置的参数传入进去
5)property:基本数据类型赋值
6)qualifier:通过Qualifier指定注入bean的名称

  1. 根据实验步骤5、9,查找相关资料,总结控制反转模式下两个Java 实例的依赖关系与传统的程序设计过程体现出的依赖关系由什么区别,控制反转的优点是什么,并记录下来;
  • 依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。
  • 优点:便于更换子类
  1. 碰到的问题及解决方案或思考;
  2. 实验收获及总结。

    二、提高实验——Spring 与Hibernate 的整合

    实验内容及步骤

    数据库创建

    ```sql create table customer ( customerID int not null
    1. primary key,
    Account varchar(20) null, Password varchar(20) null, Name varchar(20) null, Sex tinyint null, Birthday date null, Phone varchar(20) null, Email varchar(100) null, Address varchar(200) null, Zipcode varchar(10) null, Fax varchar(20) null );

INSERT INTO hibernatedb.customer (customerID, Account, Password, Name, Sex, Birthday, Phone, Email, Address, Zipcode, Fax) VALUES (1, ‘zjut’, ‘Zjut’, null, null, null, null, null, null, null, null); INSERT INTO hibernatedb.customer (customerID, Account, Password, Name, Sex, Birthday, Phone, Email, Address, Zipcode, Fax) VALUES (2, ‘admin’, ‘Admin’, null, null, null, null, null, null, null, null); INSERT INTO hibernatedb.customer (customerID, Account, Password, Name, Sex, Birthday, Phone, Email, Address, Zipcode, Fax) VALUES (3, ‘temp’, ‘Temp’, null, null, null, null, null, null, null, null);

  1. <a name="FyaAV"></a>
  2. ### maven包导入
  3. ```xml
  4. <dependency>
  5. <groupId>org.springframework</groupId>
  6. <artifactId>spring-jdbc</artifactId>
  7. <version>5.3.8</version>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.springframework</groupId>
  11. <artifactId>spring-orm</artifactId>
  12. <version>5.3.8</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.springframework</groupId>
  16. <artifactId>spring-tx</artifactId>
  17. <version>5.3.8</version>
  18. </dependency>
  19. <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
  20. <dependency>
  21. <groupId>org.hibernate</groupId>
  22. <artifactId>hibernate-core</artifactId>
  23. <version>5.4.32.Final</version>
  24. </dependency>
  25. <!-- mysql驱动包-->
  26. <dependency>
  27. <groupId>mysql</groupId>
  28. <artifactId>mysql-connector-java</artifactId>
  29. <version>8.0.26</version>
  30. </dependency>

搭建hibernate框架

在/recourse 中新建配置文件hibernate.cfg.xml,具体代码可参照“实验五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. <hibernate-configuration>
  6. <session-factory name="HibernateSessionFactory">
  7. <property name="hibernate.connection.driver_class">
  8. com.mysql.jdbc.Driver</property>
  9. <property name="hibernate.connection.url">
  10. jdbc:mysql://localhost:3306/hibernatedb</property>
  11. <property name="hibernate.connection.username">
  12. zhangkun</property>
  13. <property name="hibernate.connection.password">
  14. zhangkun
  15. </property>
  16. <property name="hibernate.dialect">
  17. org.hibernate.dialect.MySQLDialect</property>
  18. </session-factory>
  19. </hibernate-configuration>

在hibernate-prj2 中新建cn.edu.zjut.po 包, 并在其中创建持久化类Customer.java 以及Hibernate 映射文件Customer.hbm.xml,具体代码可参照“实验五Hibernate 基础应用”中基础实验里的内容;

  1. @Data
  2. public class Customer implements java.io.Serializable{
  3. private int customerId;
  4. private String account; private String password;
  5. private String name; private Boolean sex;
  6. private Date birthday; private String phone;
  7. private String email; private String address;
  8. private String zipcode; private String fax;
  9. }
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
  3. 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <class name="cn.edu.zjut.po.Customer" table="customer"
  7. catalog="hibernatedb">
  8. <id name="customerId" type="int">
  9. <column name="customerID" />
  10. <generator class="increment" />
  11. </id>
  12. <property name="account" type="string">
  13. <column name="account" length="20" unique="true" />
  14. </property>
  15. <property name="password" type="string">
  16. <column name="password" length="20" />
  17. </property>
  18. <property name="name" type="string">
  19. <column name="name" length="20" />
  20. </property>
  21. <property name="sex" type="java.lang.Boolean">
  22. <column name="sex" />
  23. </property>
  24. <property name="birthday" type="date">
  25. <column name="birthday" length="10" />
  26. </property>
  27. <property name="phone" type="string">
  28. <column name="phone" length="20" />
  29. </property>
  30. <property name="email" type="string">
  31. <column name="email" length="100" />
  32. </property>
  33. <property name="address" type="string">
  34. <column name="address" length="200" />
  35. </property>
  36. <property name="zipcode" type="string">
  37. <column name="zipcode" length="10" />
  38. </property>
  39. <property name="fax" type="string">
  40. <column name="fax" length="20" />
  41. </property>
  42. </class>
  43. </hibernate-mapping>

修改配置文件hibernate.cfg.xml,增加Customer.hbm.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. <hibernate-configuration>
  6. <session-factory name="HibernateSessionFactory">
  7. ......
  8. <mapping resource="/Customer.hbm.xml" />
  9. </session-factory>
  10. </hibernate-configuration>

在cn.edu.zjut.dao 包中创建数据库操作基础类BaseHibernateDAO.java,具体代码如下

  1. package cn.edu.zjut.dao;
  2. public class BaseHibernateDAO {
  3. private SessionFactory sessionFactory;
  4. public Session getSession(){
  5. return sessionFactory.openSession();
  6. }
  7. public void setSessionFactory(SessionFactory sessionFactory) {
  8. this.sessionFactory = sessionFactory;
  9. }
  10. }

修改cn.edu.zjut.dao 包中的ICustomerDAO 接口和CustomerDAO 实现类,为save()方法增加一个Customer 类型的输入参数,并使CustomerDAO 继承数据库操作基础类BaseHibernateDAO,具体代码如下:

  1. package cn.edu.zjut.dao;
  2. import cn.edu.zjut.po.Customer;
  3. import org.hibernate.Session;
  4. import org.hibernate.Transaction;
  5. public class CustomerDAO extends BaseHibernateDAO implements ICustomerDAO{
  6. public CustomerDAO(){
  7. System.out.println("create CustomerDao.");
  8. }
  9. @Override
  10. public void save(Customer transientInstance) {
  11. Transaction tran = null;
  12. Session session = null;
  13. try {
  14. session = getSession();
  15. tran = session.beginTransaction();
  16. session.save(transientInstance);
  17. tran.commit();
  18. } catch (RuntimeException re) {
  19. if(tran != null) {
  20. tran.rollback();
  21. }
  22. throw re;
  23. } finally {
  24. session.close();
  25. }
  26. }
  27. }

相应地修改cn.edu.zjut.service 包中的IUserService 接口和UserService 实现类,为register()方法增加一个Customer 类型的输入参数,代码如下

  1. package cn.edu.zjut.service;
  2. public interface IUserService {
  3. public void register(Customer transientInstance);
  4. }
  1. package cn.edu.zjut.service;
  2. public class UserService implements IUserService{
  3. private ICustomerDAO customerDAO = null;
  4. public UserService(){
  5. System.out.println("create UserService.");
  6. }
  7. public void setCustomerDAO(ICustomerDAO customerDAO) {
  8. System.out.println("--setCustomerDAO--");
  9. this.customerDAO = customerDAO;
  10. }
  11. @Override
  12. public void register(Customer transientInstance) {
  13. System.out.println("execute --register()-- method.");
  14. customerDAO.save(transientInstance);
  15. }
  16. }

修改Spring 配置文件applicationContext.xml,修改beans 元素的属性,并在其中增加数据源的配置;增加SessionFactory 实例,增加BaseHibernateDAO实例的配置并在其中注入sessionFactory,同时修改CustomerDAO 实例的配置属性的配置,,代码片段如下:

  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:p="http://www.springframework.org/schema/p"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
  7. <bean id="userService" class="cn.edu.zjut.service.UserService">
  8. <property name="customerDAO" ref="userDAO" />
  9. </bean>
  10. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  11. <property name="driverClassName"
  12. value="com.mysql.cj.jdbc.Driver"/>
  13. <property name="url"
  14. value="jdbc:mysql://localhost:3306/hibernatedb"/>
  15. <property name="username" value="zhangkun"/>
  16. <property name="password" value="zhangkun"/>
  17. </bean>
  18. <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
  19. <property name="dataSource" ref="dataSource" />
  20. <property name="hibernateProperties">
  21. <props>
  22. <prop key="hibernate.dialect">
  23. org.hibernate.dialect.MySQLDialect
  24. </prop>
  25. </props>
  26. </property>
  27. <property name="mappingResources">
  28. <list>
  29. <value>/Customer.hbm.xml</value>
  30. </list>
  31. </property>
  32. </bean>
  33. <bean id="baseDAO" class="cn.edu.zjut.dao.BaseHibernateDAO">
  34. <property name="sessionFactory" ref="sessionFactory" />
  35. </bean>
  36. <bean id="userDAO" class="cn.edu.zjut.dao.CustomerDAO"
  37. parent="baseDAO"/>
  38. </beans>

效果查看
image.pngimage.png

三、扩展实验——Spring、Struts 与Hibernate 的整合

实验内容及步骤

maven包导入

  1. <dependency>
  2. <groupId>org.apache.struts</groupId>
  3. <artifactId>struts2-core</artifactId>
  4. <version>2.3.15</version>
  5. </dependency>
  6. <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin -->
  7. <dependency>
  8. <groupId>org.apache.struts</groupId>
  9. <artifactId>struts2-spring-plugin</artifactId>
  10. <version>2.5.27</version>
  11. </dependency>
  12. <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
  13. <dependency>
  14. <groupId>org.springframework</groupId>
  15. <artifactId>spring-web</artifactId>
  16. <version>5.3.8</version>
  17. </dependency>

Struts框架搭建

在spring-prj1 中新建cn.edu.zjut.action 包,并在其中创建UserAction.java,用于调用用户注册逻辑,代码片段如下:

  1. package cn.edu.zjut.action;
  2. import cn.edu.zjut.po.Customer;
  3. import cn.edu.zjut.service.IUserService;
  4. import lombok.Data;
  5. /**
  6. * @Author: 张坤
  7. * @DateTime: 2021/11/23 19:32
  8. * @Description: 该类用于 TODO
  9. */
  10. @Data
  11. public class UserAction {
  12. private Customer loginUser;
  13. private IUserService userService = null;
  14. public String execute() {
  15. userService.register(loginUser);
  16. return "success";
  17. }
  18. }

修改Spring 配置文件applicationContext.xml,增加对UserAction 实例的配置,代码片段如下:

  1. <bean id="userAction" class="cn.edu.zjut.action.UserAction"
  2. scope="prototype">
  3. <property name="userService" ref="userService" />
  4. </bean>

在项目的src/路径下创建Struts2 配置文件struts.xml,用于配置Action 并设置页面导航,具体代码如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts
  3. Configuration 2.1//EN"
  4. "http://struts.apache.org/dtds/struts-2.1.dtd">
  5. <struts>
  6. <package name="strutsBean" extends="struts-default"
  7. namespace="/">
  8. <action name="register" class="userAction">
  9. <result name="success">/regSuccess.jsp</result>
  10. <result name="fail">/regFail.jsp</result>
  11. </action>
  12. </package>
  13. </struts>

在spring-prj1 中新建webapp文件夹
image.png
在webapp下新建WEB-INF文件夹,该文件夹下新建web.xml文件编辑Web 应用的web.xml 文件,增加Struts2 核心Filter 的配置,并添加对Spring 监听器的配置,代码片段如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  6. <display-name>Archetype Created Web Application</display-name>
  7. <welcome-file-list>
  8. <welcome-file>login.jsp</welcome-file>
  9. </welcome-file-list>
  10. <!-- 定义Struts2 的核心Filter -->
  11. <filter>
  12. <filter-name>struts2</filter-name>
  13. <filter-class>
  14. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  15. </filter-class>
  16. </filter>
  17. <!-- 让Struts2 的核心Filter 拦截所有请求-->
  18. <filter-mapping>
  19. <filter-name>struts2</filter-name>
  20. <url-pattern>/*</url-pattern>
  21. </filter-mapping>
  22. <listener>
  23. <listener-class>
  24. org.springframework.web.context.ContextLoaderListener
  25. </listener-class>
  26. </listener>
  27. </web-app>

在webapp文件夹下新建register.jsp 页面, 作为用户注册视图, 新建regiSuccess.jsp 和regFail.jsp 页面,分别作为注册成功和失败的视图;

  1. register.jsp

    1. <%@ taglib prefix="s" uri="/struts-tags" %>
    2. <%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    4. <html>
    5. <head>
    6. <title>Title</title>
    7. <sx:head/>
    8. </head>
    9. <body>
    10. <s:form action="register" method="post">
    11. <s:textfield name="loginUser.account" label="请输入用户名"/>
    12. <s:textfield name="loginUser.name" label="请输入用户名"/>
    13. <s:password name="loginUser.password" label="请输入密码"/>
    14. <%-- <s:password name="loginUser.repassword" label="请再次输入密码"/>--%>
    15. <s:radio name="loginUser.sex" list="#{1 : '男', 0 : '女'}" label
    16. ="请输入性别"/>
    17. <sx:datetimepicker name="loginUser.birthday" displayFormat
    18. ="yyyy-MM-dd" label="请输入生日"/>
    19. <s:textfield name="loginUser.phone" label="请输入电话"/>
    20. <s:textfield name="loginUser.email" label="请输入邮箱"/>
    21. <s:textfield name="loginUser.address" label="请输入联系地址"/>
    22. <s:textfield name="loginUser.zipcode" label="请输入邮政编码"/>
    23. <s:textfield name="loginUser.fax" label="请输入传真号码"/>
    24. <s:submit value="注册"/>
    25. <s:reset value="重置"/>
    26. </s:form>
    27. </body>
    28. </html>
  2. regiSuccess.jsp

    1. <body>
    2. 注册成功
    3. </body>
  3. regFail.jsp

    1. <body>
    2. 修改个人信息和删除个人信息失败
    3. </body>

    查看效果

    点击链接http://localhost:8080/spring_prj1_war_exploded/register.jsp
    查看注册页面
    image.png
    点击注册
    image.png
    查看数据库效果
    image.png

    实验总结

  4. 运行结果截图;

  5. 结合实验过程,总结Spring 整合Struts2 框架的关键步骤,并记录下来;
  6. 根据实验步骤7,总结本实验中的UserAction 与以往实验中的写法关键区别,并记录下来;
  7. 根据实验步骤9,查找相关资料,总结配置文件applicationContext.xml 中bean 元素的prototype 属性及其取值的含义,并记录下来;
  8. 根据实验步骤11,查找相关资料,总结web.xml 文件中添加监听器的目的,并记录下来;
  9. 碰到的问题及解决方案或思考;
  10. 实验收获及总结。