SSH项目整合基本步骤
一、项目简介
该项目是由Spring4、Struts2 以及 Hibernate4 整合搭建的 web 项目,把Action分开编写,便于查看,使用JSTL、EL标签。
二、项目目录
三、项目所需Jar包
①Spring:
aopalliance-1.0.jar
aspectjweaver.jar
spring-aop-4.3.0.RELEASE.jar
spring-aspects-4.3.0.RELEASE.jar
spring-beans-4.3.0.RELEASE.jar
spring-context-4.3.0.RELEASE.jar
spring-core-4.3.0.RELEASE.jar
spring-expression-4.3.0.RELEASE.jar
spring-jdbc-4.3.0.RELEASE.jar
spring-orm-4.3.0.RELEASE.jar
spring-tx-4.3.0.RELEASE.jar
spring-web-4.3.0.RELEASE.jar
②Struts2:
asm-5.0.2.jar
asm-commons-5.0.2.jar
asm-tree-5.0.2.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
freemarker-2.3.19.jar
ognl-3.0.6.jar
struts2-core-2.3.20.jar
struts2-spring-plugin-2.3.20.jar
xwork-core-2.3.20.jar
③Hibernate:
antlr-2.7.7.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-core-4.3.11.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-1.1.0.Final.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
④C3P0:
c3p0-0.9.5.1.jar
mchange-commons-java-0.2.10.jar
mysql-connector-java-5.1.8-bin.jar
⑤JSTL:
taglibs-standard-compat-1.2.5.jar
taglibs-standard-impl-1.2.5.jar
taglibs-standard-jstlel-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
⑥log4j:
log4j-1.2.17.jar
四、项目源码
1、db.properties
1 db.username=root 2 db.password=root 3 db.driverClass=com.mysql.jdbc.Driver 4 db.jdbcUrl=jdbc:mysql://localhost:3306/ssh_01 5 db.initialPoolSize=2 6 db.maxPoolSize=20
2、log4j.properties
1 # Global logging configuration 2 log4j.rootLogger=ERROR, stdout 3 # MyBatis logging configuration... 4 log4j.logger.org.mybatis.example.BlogMapper=TRACE 5 # Console output... 6 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 7 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 8 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n 9 # Start logging 10 log4j.logger.cn.com.zfc.model.UserMapper=TRACE
3、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:aop="http://www.springframework.org/schema/aop" 4 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd 8 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> 9 10 <!-- 注册数据库链接文件 --> 11 <context:property-placeholder location="classpath:db.properties" /> 12 13 <!-- 注册C3P0 数据源 --> 14 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 15 <property name="user" value="${db.username}"></property> 16 <property name="password" value="${db.password}"></property> 17 <property name="driverClass" value="${db.driverClass}"></property> 18 <property name="jdbcUrl" value="${db.jdbcUrl}"></property> 19 <property name="initialPoolSize" value="${db.initialPoolSize}"></property> 20 <property name="maxPoolSize" value="${db.maxPoolSize}"></property> 21 </bean> 22 23 <!-- 注册 LocalSessionFactoryBean,这种配置可以省略 Hibernate 的主配置文件 --> 24 <bean id="sessionFactory" 25 class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 26 <property name="dataSource" ref="dataSource"></property> 27 <property name="hibernateProperties"> 28 <props> 29 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> 30 <prop key="hibernate.show_sql">true</prop> 31 <prop key="hibernate.format_sql">true</prop> 32 <prop key="hibernate.hbm2ddl.auto">update</prop> 33 </props> 34 </property> 35 <!-- 配置 hibernate 映射文件的位置及名称,可以直接写目录 --> 36 <property name="mappingDirectoryLocations"> 37 <list> 38 <value>classpath:cn/com/zfc/ssh/entity</value> 39 </list> 40 </property> 41 </bean> 42 43 <!-- 注册事务管理器 --> 44 <bean id="transactionManager" 45 class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 46 <property name="sessionFactory" ref="sessionFactory"></property> 47 </bean> 48 49 <!-- 注册通知,是对 Service 层的方法起作用 --> 50 <tx:advice transaction-manager="transactionManager" id="txadvice"> 51 <tx:attributes> 52 <tx:method name="add*" propagation="REQUIRED" /> 53 <tx:method name="remove*" propagation="REQUIRED" /> 54 <tx:method name="modify*" propagation="REQUIRED" /> 55 <tx:method name="find*" read-only="true" /> 56 <tx:method name="*" read-only="true" /> 57 </tx:attributes> 58 </tx:advice> 59 60 <!-- 注册切面 --> 61 <aop:config> 62 <!-- Service 层 --> 63 <aop:pointcut expression="execution(* *..service.*.*(..))" 64 id="txPoint" /> 65 <aop:advisor advice-ref="txadvice" pointcut-ref="txPoint" /> 66 </aop:config> 67 68 <!-- 注册 User --> 69 <!-- Dao --> 70 <bean id="userDao" class="cn.com.zfc.ssh.dao.impl.UserDaoImpl"> 71 <property name="sessionFactory" ref="sessionFactory"></property> 72 </bean> 73 74 <!-- Service --> 75 <bean id="userService" class="cn.com.zfc.ssh.service.impl.UserServiceImpl"> 76 <property name="userDao" ref="userDao"></property> 77 </bean> 78 79 <!-- Action --> 80 <!-- 跳转到 User 添加的视图的Action --> 81 <bean id="userAddViewAction" class="cn.com.zfc.ssh.action.UserAddViewAction"></bean> 82 83 <!-- User 添加的 Action --> 84 <bean id="userAddAction" class="cn.com.zfc.ssh.action.UserAddAction"> 85 <property name="userService" ref="userService"></property> 86 </bean> 87 88 <!-- User 查询全部的 Action --> 89 <bean id="usersFindAction" class="cn.com.zfc.ssh.action.UsersFindAction"> 90 <property name="userService" ref="userService"></property> 91 </bean> 92 93 <!-- User 删除的 Action --> 94 <bean id="userRemoveAction" class="cn.com.zfc.ssh.action.UserRemoveAction"> 95 <property name="userService" ref="userService"></property> 96 </bean> 97 98 99 <!-- 跳转到 User 修改视图的 Action --> 100 <bean id="userModifyViewAction" class="cn.com.zfc.ssh.action.UserModifyViewAction"> 101 <property name="userService" ref="userService"></property> 102 </bean> 103 104 <!-- User 修改的 Action --> 105 <bean id="userModifyAction" class="cn.com.zfc.ssh.action.UserModifyAction"> 106 <property name="userService" ref="userService"></property> 107 </bean> 108 109 110 </beans>
4、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 <!-- 声明对象是由 Spring 创建的 --> 8 <constant name="struts.objectFactory" value="spring"></constant> 9 10 <!-- 定义包,有关 User 的配置 --> 11 <package name="userPackage" extends="struts-default" namespace="/"> 12 <!-- User 添加 --> 13 <action name="userAddViewAction" class="userAddViewAction" 14 method="userAddView"> 15 <result>/user_add.jsp</result> 16 </action> 17 18 <!-- 添加页面 --> 19 <action name="userAddAction" class="userAddAction" method="addUser"> 20 <!-- 直接跳转到查询全部 User 的Action --> 21 <result type="redirectAction">/usersFindAction</result> 22 </action> 23 24 <!-- Users 查询 --> 25 <action name="usersFindAction" class="usersFindAction" method="findUsers"> 26 <result>/users_query.jsp</result> 27 </action> 28 29 <!-- User 删除 --> 30 <action name="userRemoveAction" class="userRemoveAction" 31 method="removeUser"> 32 <result type="redirectAction">/usersFindAction</result> 33 </action> 34 <!-- User 修改页面 --> 35 <action name="userModifyViewAction" class="userModifyViewAction" 36 method="modifyUserView"> 37 <result>/user-modify.jsp</result> 38 </action> 39 40 <!-- User 修改 --> 41 <action name="userModifyAction" class="userModifyAction" 42 method="modifyUser"> 43 <result type="redirectAction">/usersFindAction</result> 44 </action> 45 46 </package> 47 </struts>
5、web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 3 <display-name>SSH</display-name> 4 <welcome-file-list> 5 <welcome-file>index.jsp</welcome-file> 6 </welcome-file-list> 7 <context-param> 8 <param-name>contextConfigLocation</param-name> 9 <param-value>classpath:applicationContext.xml</param-value> 10 </context-param> 11 <listener> 12 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 13 </listener> 14 <filter> 15 <filter-name>encodingFilter</filter-name> 16 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 17 <async-supported>true</async-supported> 18 <init-param> 19 <param-name>encoding</param-name> 20 <param-value>UTF-8</param-value> 21 </init-param> 22 </filter> 23 <filter-mapping> 24 <filter-name>encodingFilter</filter-name> 25 <url-pattern>/*</url-pattern> 26 </filter-mapping> 27 <filter> 28 <filter-name>struts2</filter-name> 29 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 30 </filter> 31 <filter-mapping> 32 <filter-name>struts2</filter-name> 33 <url-pattern>/*</url-pattern> 34 </filter-mapping> 35 </web-app>
6、User.java
1 package cn.com.zfc.ssh.entity; 2 3 public class User { 4 private Integer id; 5 private String userName; 6 private int userAge; 7 8 public User() { 9 super(); 10 } 11 12 public Integer getId() { 13 return id; 14 } 15 16 public void setId(Integer id) { 17 this.id = id; 18 } 19 20 public String getUserName() { 21 return userName; 22 } 23 24 public void setUserName(String userName) { 25 this.userName = userName; 26 } 27 28 public int getUserAge() { 29 return userAge; 30 } 31 32 public void setUserAge(int userAge) { 33 this.userAge = userAge; 34 } 35 36 @Override 37 public String toString() { 38 return "User [id=" + id + ", userName=" + userName + ", userAge=" + userAge + "]"; 39 } 40 41 }
7、User.hbm.xml
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2017-6-9 23:41:28 by Hibernate Tools 3.5.0.Final --> 5 <hibernate-mapping package="cn.com.zfc.ssh.entity"> 6 <class name="User" table="USER_INFO"> 7 <id name="id" type="java.lang.Integer"> 8 <column name="ID" /> 9 <!-- 主键生成策略 --> 10 <generator class="native" /> 11 </id> 12 <property name="userName" type="java.lang.String"> 13 <column name="USER_NAME" /> 14 </property> 15 <property name="userAge" type="int"> 16 <column name="USER_AGE" /> 17 </property> 18 </class> 19 </hibernate-mapping>
8、UserDao.java
1 package cn.com.zfc.ssh.dao; 2 3 import java.util.List; 4 5 import cn.com.zfc.ssh.entity.User; 6 7 public interface UserDao { 8 void insertUser(User user); 9 10 void deleteUser(int id); 11 12 void updateUser(User user); 13 14 User queryUserById(int id); 15 16 List<User> queryUsers(); 17 }
9、UserDaoImpl.java
1 package cn.com.zfc.ssh.dao.impl; 2 3 import java.util.List; 4 5 import org.hibernate.SessionFactory; 6 7 import cn.com.zfc.ssh.dao.UserDao; 8 import cn.com.zfc.ssh.entity.User; 9 /** 10 * 11 * @title UserDaoImpl 12 * @describe User 相关的 Dao 层操作,Session 要与当前线程绑定 13 * @author zfc 14 * @date 2017年6月10日下午3:31:49 15 */ 16 public class UserDaoImpl implements UserDao { 17 18 private SessionFactory sessionFactory; 19 20 public void setSessionFactory(SessionFactory sessionFactory) { 21 this.sessionFactory = sessionFactory; 22 } 23 24 @Override 25 public void insertUser(User user) { 26 sessionFactory.getCurrentSession().save(user); 27 } 28 29 @Override 30 public void deleteUser(int id) { 31 User user = (User) sessionFactory.getCurrentSession().get(User.class, id); 32 sessionFactory.getCurrentSession().delete(user); 33 34 } 35 36 @Override 37 public void updateUser(User user) { 38 sessionFactory.getCurrentSession().update(user); 39 40 } 41 42 @Override 43 public List<User> queryUsers() { 44 String hql = "From User"; 45 return sessionFactory.getCurrentSession().createQuery(hql).list(); 46 } 47 48 @Override 49 public User queryUserById(int id) { 50 return (User) sessionFactory.getCurrentSession().get(User.class, id); 51 } 52 }
10、UserService.java
1 package cn.com.zfc.ssh.service; 2 3 import java.util.List; 4 5 import cn.com.zfc.ssh.entity.User; 6 7 public interface UserService { 8 void addUser(User user); 9 10 void removeUser(int id); 11 12 void modifyUser(User user); 13 14 List<User> findUsers(); 15 16 User findUserById(int id); 17 }
11、UserServiceImpl.java
1 package cn.com.zfc.ssh.service.impl; 2 3 import java.util.List; 4 5 import cn.com.zfc.ssh.dao.UserDao; 6 import cn.com.zfc.ssh.entity.User; 7 import cn.com.zfc.ssh.service.UserService; 8 /** 9 * 10 * @title UserServiceImpl 11 * @describe 业务逻辑实现 12 * @author zfc 13 * @date 2017年6月11日下午8:16:50 14 */ 15 public class UserServiceImpl implements UserService { 16 17 private UserDao userDao; 18 19 public void setUserDao(UserDao userDao) { 20 this.userDao = userDao; 21 } 22 23 @Override 24 public void addUser(User user) { 25 userDao.insertUser(user); 26 27 } 28 29 @Override 30 public void removeUser(int id) { 31 userDao.deleteUser(id); 32 33 } 34 35 @Override 36 public void modifyUser(User user) { 37 userDao.updateUser(user); 38 39 } 40 41 @Override 42 public List<User> findUsers() { 43 return userDao.queryUsers(); 44 } 45 46 @Override 47 public User findUserById(int id) { 48 return userDao.queryUserById(id); 49 } 50 51 }
12、UserAddViewAction.java
1 package cn.com.zfc.ssh.action; 2 /** 3 * 4 * @title UserAddViewAction 5 * @describe User 添加的视图的 Action 6 * @author zfc 7 * @date 2017年6月10日下午3:29:15 8 */ 9 public class UserAddViewAction { 10 11 public String userAddView() { 12 return "success"; 13 } 14 }
13、UserAddAction.java
1 package cn.com.zfc.ssh.action; 2 3 import cn.com.zfc.ssh.entity.User; 4 import cn.com.zfc.ssh.service.UserService; 5 /** 6 * 7 * @title UserAddAction 8 * @describe User 添加的Action 9 * @author zfc 10 * @date 2017年6月10日下午3:28:57 11 */ 12 public class UserAddAction { 13 14 private UserService userService; 15 private User user; 16 17 public User getUser() { 18 return user; 19 } 20 21 public void setUser(User user) { 22 this.user = user; 23 } 24 25 public void setUserService(UserService userService) { 26 this.userService = userService; 27 } 28 29 public String addUser() { 30 // System.out.println("user:" + user); 31 userService.addUser(user); 32 return "success"; 33 } 34 35 }
14、UsersFindAction.java
1 package cn.com.zfc.ssh.action; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import org.apache.struts2.interceptor.RequestAware; 7 8 import cn.com.zfc.ssh.entity.User; 9 import cn.com.zfc.ssh.service.UserService; 10 /** 11 * 12 * @title UsersFindAction 13 * @describe User 查询全部的 Action 14 * @author zfc 15 * @date 2017年6月10日下午3:31:07 16 */ 17 public class UsersFindAction implements RequestAware { 18 19 private UserService userService; 20 private Map<String, Object> request; 21 22 public void setUserService(UserService userService) { 23 this.userService = userService; 24 } 25 26 @Override 27 public void setRequest(Map<String, Object> request) { 28 this.request = request; 29 } 30 31 public String findUsers() { 32 // System.out.println("查询全部Users Action"); 33 List<User> users = userService.findUsers(); 34 request.put("users", users); 35 // System.out.println(userService.findUsers()); 36 return "success"; 37 } 38 39 }
15、UserRemoveAction.java
1 package cn.com.zfc.ssh.action; 2 3 import cn.com.zfc.ssh.service.UserService; 4 /** 5 * 6 * @title UserRemoveAction 7 * @describe User 删除的 Action 8 * @author zfc 9 * @date 2017年6月10日下午3:30:50 10 */ 11 public class UserRemoveAction { 12 private Integer id; 13 14 private UserService userService; 15 16 public UserService getUserService() { 17 return userService; 18 } 19 20 public void setUserService(UserService userService) { 21 this.userService = userService; 22 } 23 24 public Integer getId() { 25 return id; 26 } 27 28 public void setId(Integer id) { 29 this.id = id; 30 } 31 32 public String removeUser() { 33 userService.removeUser(id); 34 return "success"; 35 } 36 }
16、UserModifyViewAction.java
1 package cn.com.zfc.ssh.action; 2 3 import java.util.Map; 4 5 import org.apache.struts2.interceptor.RequestAware; 6 7 import cn.com.zfc.ssh.entity.User; 8 import cn.com.zfc.ssh.service.UserService; 9 10 /** 11 * 12 * @title UserModifyViewAction 13 * @describe 跳转 User 修改视图的 Action 14 * @author zfc 15 * @date 2017年6月10日下午3:29:56 16 */ 17 public class UserModifyViewAction implements RequestAware { 18 19 private Map<String, Object> request; 20 private UserService userService; 21 private Integer id; 22 23 public void setId(Integer id) { 24 this.id = id; 25 } 26 27 public void setUserService(UserService userService) { 28 this.userService = userService; 29 } 30 31 @Override 32 public void setRequest(Map<String, Object> request) { 33 this.request = request; 34 } 35 36 public String modifyUserView() { 37 User user = userService.findUserById(id); 38 // System.out.println(user); 39 request.put("user", user); 40 return "success"; 41 } 42 43 }
17、UserModifyAction.java
1 package cn.com.zfc.ssh.action; 2 import cn.com.zfc.ssh.entity.User; 3 import cn.com.zfc.ssh.service.UserService; 4 /** 5 * 6 * @title UserModifyAction 7 * @describe User 修改的Action 8 * @author zfc 9 * @date 2017年6月10日下午3:29:40 10 */ 11 public class UserModifyAction { 12 13 private User user; 14 private UserService userService; 15 16 public User getUser() { 17 return user; 18 } 19 20 public void setUser(User user) { 21 this.user = user; 22 } 23 24 public UserService getUserService() { 25 return userService; 26 } 27 28 public void setUserService(UserService userService) { 29 this.userService = userService; 30 } 31 32 public String modifyUser() { 33 System.out.println(user); 34 userService.modifyUser(user); 35 return "success"; 36 } 37 38 }
18、index.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>SSH_01</title> 8 </head> 9 <body> 10 <a href="usersFindAction">Users Query</a> 11 <hr /> 12 <a href="userAddViewAction">User Add</a> 13 </body> 14 </html>
19、user_add.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>用户添加</title> 9 </head> 10 <body> 11 <form action="userAddAction" method="post"> 12 UserName:<input type="text" name="user.userName"> 13 <hr /> 14 UserAge:<input type="text" name="user.userAge"> 15 <hr /> 16 <input type="submit" value="ADD" /> 17 </form> 18 <hr /> 19 <a href="usersFindAction">Users Query</a> 20 </body> 21 </html>
20、users_query.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>用户查询</title> 9 </head> 10 <body> 11 <table cellspacing="0" cellpadding="0" border="1" width="50%"> 12 <thead> 13 <tr> 14 <th>ID</th> 15 <th>UserName</th> 16 <th>UserAge</th> 17 <th>Operate</th> 18 </tr> 19 </thead> 20 <tbody> 21 <c:forEach items="${users}" var="user"> 22 <tr> 23 <td>${user.id}</td> 24 <td>${user.userName}</td> 25 <td>${user.userAge}</td> 26 <td><a href="userModifyViewAction?id=${user.id}">Update</a>&<a 27 href="userRemoveAction?id=${user.id}">Remove</a></td> 28 </tr> 29 </c:forEach> 30 </tbody> 31 </table> 32 <hr /> 33 <a href="userAddViewAction">User Add</a> 34 </body> 35 </html>
21、user_modify.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 <form action="userModifyAction" method="post"> 12 ${user} 13 <!-- 隐藏域,用来保存当前 User 的 id --> 14 <input type="hidden" name="user.id" value="${user.id}" /> 15 <hr /> 16 UserName:<input type="text" name="user.userName" value="${user.userName}"> 17 <hr /> 18 UserAge:<input type="text" name="user.userAge" value="${user.userAge}"> 19 <hr /> 20 <input type="submit" value="Modify" /> 21 </form> 22 <hr /> 23 <a href="usersFindAction">Users Query</a> 24 </body> 25 </html>
五、数据库
六、程序运行效果图