Spring 是一個(gè)開(kāi)源框架, Spring 是于 2003 年興起的一個(gè)輕量級(jí)的 Java 開(kāi)發(fā)框架,由 Rod Johnson 在其著作 Expert One-On-One J2EE Development and Design 中闡述的部分理念和原型衍生而來(lái)。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。 Spring 使用基本的 JavaBean 來(lái)完成以前只可能由 EJB 完成的事情。然而, Spring 的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何 Java 應(yīng)用都可以從 Spring 中受益。 簡(jiǎn)單來(lái)說(shuō), Spring 是一個(gè)輕量級(jí)的控制反轉(zhuǎn)( IoC )和面向切面( AOP )的容器框架。
Spring MVC 屬于 SpringFrameWork 的后續(xù)產(chǎn)品,已經(jīng)融合在 Spring Web Flow 里面。 Spring MVC 分離了控制器、模型對(duì)象、分派器以及處理程序?qū)ο蟮慕巧?,這種分離讓它們更容易進(jìn)行定制。
MyBatis 本是 Apache 的一個(gè)開(kāi)源項(xiàng)目iBatis , 2010 年這個(gè)項(xiàng)目由 apache software foundation 遷移到了 google code ,并且改名為 MyBatis 。 MyBatis 是一個(gè)基于 Java 的 持久層框架。 iBATIS 提供的持久層框架包括 SQL Maps 和 Data Access Objects ( DAO ) MyBatis 消除了幾乎所有的 JDBC 代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。 MyBatis 使用簡(jiǎn)單的 XML 或注解用于配置和原始映射,將接口和 Java 的 POJOs ( Plain Old Java Objects ,普通的 Java 對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。
3、SSM項(xiàng)目結(jié)構(gòu)搭建
?、賁pring:
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-context-support-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-tx-4.3.0.RELEASE.jar
spring-web-4.3.0.RELEASE.jar
spring-webmvc-4.3.0.RELEASE.jar
spring-webmvc-portlet-4.3.0.RELEASE.jar
spring-websocket-4.3.0.RELEASE.jar
com.springsource.net.sf.cglib-2.2.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-logging-1.2.jar
③MyBatis:
mybatis-3.1.1.jar
log4j-1.2.16.jar
mybatis-spring-1.2.1.jar
?、芪募蟼?下載:
commons-fileupload-1.2.2.jar
commons-io-2.4.jar
?、軨3P0數(shù)據(jù)源:
c3p0-0.9.5.1.jar
mchange-commons-java-0.2.10.jar
classmate-0.8.0.jar
⑥MySQL:
mysql-connector-java-5.0.8-bin.jar
?、逬STL:
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
?、郕SON:
jackson-annotations-2.6.0.jar
jackson-core-2.6.0.jar
jackson-databind-2.6.0.jar
⑨Hibernate Validate:
hibernate-validator-4.3.0.Final.jar
validation-api-1.0.0.GA.jar
validation-api-1.1.0.CR1.jar
jboss-logging-3.1.0.CR2.jar
jboss-logging-3.1.1.GA.jar
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 id="WebApp_ID" version="3.1"> 6 <display-name>SSM_01</display-name> 7 <welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list>10 11 12 13 <!-- 1、配置 Spring 配置文件的名稱和位置 -->14 <context-param>15 <param-name>contextConfigLocation</param-name>16 <param-value>classpath:spring/applicationContext.xml</param-value>17 </context-param>18 <!-- ContextLoaderListener:監(jiān)聽(tīng)器 -->19 <!--當(dāng) web項(xiàng)目啟動(dòng)的時(shí)候,會(huì)把 Spring IOC 容器獲取到,并放入 application 域中 -->20 <listener>21 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>22 </listener>23 24 25 26 <!-- 2、配置 SpringMVC 的前端控制器(要過(guò)濾所有的請(qǐng)求) -->27 <servlet>28 <servlet-name>springDispatcherServlet</servlet-name>29 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>30 <!-- 配置 SpringMVC 配置文件的名稱和位置 -->31 <init-param>32 <param-name>contextConfigLocation</param-name>33 <param-value>classpath:springmvc/springMvc.xml</param-value>34 </init-param>35 <load-on-startup>1</load-on-startup>36 </servlet>37 38 39 40 <servlet-mapping>41 <servlet-name>springDispatcherServlet</servlet-name>42 <!-- SpringMVC 的前端控制器過(guò)濾所有的請(qǐng)求 -->43 <url-pattern>/</url-pattern>44 </servlet-mapping>45 46 47 48 <!-- 3、配置 CharacterEncodingFilter:映射出現(xiàn)亂碼 -->49 <filter>50 <filter-name>encodingFilter</filter-name>51 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>52 <async-supported>true</async-supported>53 <init-param>54 <param-name>encoding</param-name>55 <param-value>UTF-8</param-value>56 </init-param>57 </filter>58 <filter-mapping>59 <filter-name>encodingFilter</filter-name>60 <url-pattern>/*</url-pattern>61 </filter-mapping>62 63 64 65 <!-- 4、配置 HiddenHttpMethodFilter:支持 REST 風(fēng)格的 CRUD -->66 <filter>67 <filter-name>HiddenHttpMethodFilter</filter-name>68 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>69 </filter>70 71 72 73 <filter-mapping>74 <filter-name>HiddenHttpMethodFilter</filter-name>75 <url-pattern>/*</url-pattern>76 </filter-mapping>77 </web-app>
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:context="http://www.springframework.org/schema/context" 4 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/context http://www.springframework.org/schema/context/spring-context-4.3.xsd 7 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> 8 <!-- 1、配置自動(dòng)掃描的(Spring IOC 容器不掃描Controller) --> 9 <context:component-scan base-package="cn.com.zfc.ssm">10 <context:include-filter type="annotation"11 expression="org.springframework.stereotype.Component" />12 <context:include-filter type="annotation"13 expression="org.springframework.stereotype.Repository" />14 <context:include-filter type="annotation"15 expression="org.springframework.stereotype.Service" />16 </context:component-scan>17 18 <!-- 2.加載配數(shù)據(jù)源配置文件 db.properties -->19 <context:property-placeholder location="classpath:db.properties" />20 21 <!-- 3、配置 C3P0 數(shù)據(jù)源 -->22 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">23 <property name="user" value="${user}"></property>24 <property name="password" value="${password}"></property>25 <property name="jdbcUrl" value="${jdbcUrl}"></property>26 <property name="driverClass" value="${driverClass}"></property>27 </bean>28 29 <!-- 4.事務(wù)管理器 (JDBC) -->30 <bean id="transactionManager"31 class="org.springframework.jdbc.datasource.DataSourceTransactionManager">32 <property name="dataSource" ref="dataSource"></property>33 </bean>34 35 <!-- 5.啟動(dòng)聲明式事務(wù)驅(qū)動(dòng) -->36 <tx:annotation-driven transaction-manager="transactionManager" />37 38 <!-- MyBatis 整合 spring -->39 <!-- 1. spring 通過(guò) sqlSessionFactoryBean 獲取 sqlSessionFactory 工廠類(lèi) -->40 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">41 <property name="dataSource" ref="dataSource"></property>42 <!-- 使用mapper 時(shí)可以實(shí)用化別名(BeanName) -->43 <property name="typeAliasesPackage" value="cn.com.zfc.ssm.entity"></property>44 </bean>45 46 <!-- 2.打開(kāi) sqlSession 會(huì)話對(duì)象(掃描映射配置文件:XXXmapper.xml/XXXmapper.java) -->47 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">48 <property name="basePackage" value="cn.com.zfc.ssm.dao" />49 <!-- 注意使用 sqlSessionFactoryBeanName 避免出現(xiàn)spring 掃描組件失效問(wèn)題 -->50 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />51 </bean>52 53 </beans>
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:context="http://www.springframework.org/schema/context" 4 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" 5 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd 6 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> 9 10 11 <!-- 1、配置自動(dòng)掃描的包,SpringMVC IOC 容器只掃描Controller -->12 <context:component-scan base-package="cn.com.zfc.ssm">13 <context:include-filter type="annotation"14 expression="org.springframework.stereotype.Controller" />15 </context:component-scan>16 17 <!-- 2、配置視圖解析器 -->18 <bean id="internalResourceViewResolver"19 class="org.springframework.web.servlet.view.InternalResourceViewResolver">20 <property name="prefix" value="/WEB-INF/views/"></property>21 <property name="suffix" value=".jsp"></property>22 </bean>23 24 <!-- 3.處理靜態(tài)資源,默認(rèn) Servlet 處理 -->25 <mvc:default-servlet-handler />26 27 <!-- 4.啟動(dòng) MVC 注解驅(qū)動(dòng) -->28 <mvc:annotation-driven />29 30 <!--5、啟用AOP -->31 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>32 </beans>
1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE configuration3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"4 "http://mybatis.org/dtd/mybatis-3-config.dtd">5 <configuration>6 7 <!-- 可以寫(xiě)定義別名/掃描包(spring 管理) -->8 9 </configuration>
1 user=root2 password=root3 driverClass=com.mysql.jdbc.Driver4 jdbcUrl=jdbc:mysql://localhost:3306/ssm_01
1 # Global logging configuration 2 log4j.rootLogger=DEBUG, stdout 3 # Console output... 4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 6 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n 7 8 log4j.logger.java.sql.ResultSet=INFO 9 log4j.logger.org.apache=INFO 10 log4j.logger.java.sql.Connection=DEBUG 11 log4j.logger.java.sql.Statement=DEBUG 12 log4j.logger.java.sql.PreparedStatement=DEBUG
1 package cn.com.zfc.ssm.entity; 2 3 import org.springframework.stereotype.Component; 4 5 /** 6 * 定義實(shí)體類(lèi):如果實(shí)體類(lèi)的屬性名和數(shù)據(jù)表中的字段名不一致,則需要在 映射文件中配置 resultMap 7 * 8 * @author FuchangZhang 9 *10 */11 @Component12 public class User {13 private Integer id;14 private String userName;15 private String userSex;16 private Integer userAge;17 18 public User() {19 super();20 }21 22 public User(String userName, String userSex, Integer userAge) {23 super();24 this.userName = userName;25 this.userSex = userSex;26 this.userAge = userAge;27 }28 29 public User(Integer id, String userName, String userSex, Integer userAge) {30 super();31 this.id = id;32 this.userName = userName;33 this.userSex = userSex;34 this.userAge = userAge;35 }36 37 public Integer getId() {38 return id;39 }40 41 public void setId(Integer id) {42 this.id = id;43 }44 45 public String getUserName() {46 return userName;47 }48 49 public void setUserName(String userName) {50 this.userName = userName;51 }52 53 public String getUserSex() {54 return userSex;55 }56 57 public void setUserSex(String userSex) {58 this.userSex = userSex;59 }60 61 public Integer getUserAge() {62 return userAge;63 }64 65 public void setUserAge(Integer userAge) {66 this.userAge = userAge;67 }68 69 @Override70 public String toString() {71 return "User [id=" + id + ", userName=" + userName + ", userSex=" + userSex + ", userAge=" + userAge + "]";72 }73 74 }
3.10 UserMapper.java
1 package cn.com.zfc.ssm.dao; 2 3 import java.util.List; 4 5 import org.springframework.stereotype.Repository; 6 7 import cn.com.zfc.ssm.entity.User; 8 9 /**10 * 定義接口:方法名得和相應(yīng)的 mapper.xml 中的 id 保持一致11 * 12 * @author FuchangZhang13 *14 */15 @Repository16 public interface UserMapper {17 18 // 添加一條用戶信息19 public int save(User user);20 21 // 刪除一條用戶信息22 public int delete(int id);23 24 // 修改一條用戶信息25 public int update(User user);26 27 // 查詢一條用戶信息28 public User getUser(int id);29 30 // 查詢?nèi)坑脩粜畔?/span>31 public List<User> getUsers();32 33 }
3.11 UserMapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <mapper namespace="cn.com.zfc.ssm.dao.UserMapper"> 4 <!-- 結(jié)果集映射:映射實(shí)體類(lèi)屬性與數(shù)據(jù)表字段名 --> 5 <resultMap type="User" id="userResultMap"> 6 <id property="id" column="id" /> 7 <result property="userName" column="user_name" /> 8 <result property="userSex" column="user_sex" /> 9 <result property="userAge" column="user_age" />10 </resultMap>11 12 <!-- 參數(shù)映射:映射實(shí)體類(lèi)屬性與數(shù)據(jù)表字段名 -->13 <!-- resultMap:resultMap的id ,property:resultMap的property,即實(shí)體類(lèi)中的屬性 -->14 <parameterMap type="User" id="userParameterMap">15 <parameter property="id" resultMap="userResultMap" />16 <parameter property="userName" resultMap="userResultMap" />17 <parameter property="userSex" resultMap="userResultMap" />18 <parameter property="userAge" resultMap="userResultMap" />19 </parameterMap>20 21 <!-- 添加一個(gè)用戶信息 -->22 <insert id="save" parameterMap="userParameterMap">23 insert into user_info24 (user_name,user_sex,user_age)25 values26 (#{userName},#{userSex},#{userAge})27 </insert>28 <!-- 刪除一個(gè)用戶信息 -->29 <delete id="delete" parameterType="int">30 delete from user_info31 where32 id=#{id}33 </delete>34 35 <!-- 修改一個(gè)用戶信息 -->36 <update id="update" parameterMap="userParameterMap">37 update user_info38 set39 user_name=#{userName},user_sex=#{userSex},user_age=#{userAge}40 where41 id=#{id}42 </update>43 44 <!-- 查詢一個(gè)用戶信息 -->45 <select id="getUser" parameterType="int" resultMap="userResultMap">46 select * from47 user_info48 where49 id=#{id}50 </select>51 52 <!-- 查詢?nèi)坑脩粜畔?-->53 <select id="getUsers" resultMap="userResultMap">54 select * from user_info55 </select>56 </mapper>
3.12、UserService.java
1 package cn.com.zfc.ssm.service; 2 3 import java.util.List; 4 5 import org.springframework.stereotype.Repository; 6 7 import cn.com.zfc.ssm.entity.User; 8 9 @Repository10 public interface UserService {11 // 添加一條用戶信息12 public boolean add(User user);13 14 // 刪除一條用戶信息15 public boolean delete(int id);16 17 // 修改一條用戶信息18 public boolean update(User user);19 20 // 查詢一條用戶信息21 public User queryOne(int id);22 23 // 查詢?nèi)坑脩粜畔?/span>24 public List<User> queryAll();25 }
3.13、UserServiceImpl.java
1 package cn.com.zfc.ssm.service.impl; 2 3 import java.util.List; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Service; 7 8 import cn.com.zfc.ssm.dao.UserMapper; 9 import cn.com.zfc.ssm.entity.User;10 import cn.com.zfc.ssm.service.UserService;11 12 @Service("userService")13 public class UserServiceImpl implements UserService {14 15 @Autowired16 private UserMapper userMapper;17 private int result;18 19 @Override20 public boolean add(User user) {21 result = userMapper.save(user);22 if (result > 0) {23 return true;24 } else {25 return false;26 }27 }28 29 @Override30 public boolean delete(int id) {31 result = userMapper.delete(id);32 if (result > 0) {33 return true;34 } else {35 return false;36 }37 }38 39 @Override40 public boolean update(User user) {41 result = userMapper.update(user);42 if (result > 0) {43 return true;44 } else {45 return false;46 }47 }48 49 @Override50 public User queryOne(int id) {51 User user = userMapper.getUser(id);52 return user;53 }54 55 @Override56 public List<User> queryAll() {57 List<User> users = userMapper.getUsers();58 return users;59 }60 61 }
3.14、UserHandler.java
1 package cn.com.zfc.ssm.handler; 2 3 import java.util.Map; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Controller; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 9 import cn.com.zfc.ssm.entity.User;10 import cn.com.zfc.ssm.service.UserService;11 12 @Controller13 public class UserHandler {14 15 @Autowired16 private UserService userService;17 18 // 添加頁(yè)面19 @RequestMapping("/addView")20 public String addView(Map<String, Object> map) {21 map.put("user", new User());22 return "addUser";23 }24 25 // 保存操作26 @RequestMapping("/addUser")27 public String addUser(User user) {28 if (userService.add(user)) {29 return "success";30 } else {31 return "redirect:/queryAll";32 }33 }34 35 // 刪除操作36 @RequestMapping("/delete")37 public String delete(int id) {38 if (userService.delete(id)) {39 System.out.println("刪除成功");40 } else {41 System.out.println("刪除失敗");42 }43 return "redirect:/queryAll";44 }45 46 // 查詢一個(gè)操作47 @RequestMapping("/queryOne")48 public String queryOne(int id, Map<String, Object> map) {49 map.put("user", userService.queryOne(id));50 return "update";51 }52 53 // 修改操作54 @RequestMapping("/update")55 public String update(User user, Map<String, Object> map) {56 if (userService.update(user)) {57 System.out.println("修改成功");58 return "redirect:/queryAll";59 } else {60 System.out.println("修改失敗");61 map.put("user", userService.queryOne(user.getId()));62 return "update";63 }64 }65 66 // 查詢?nèi)坎僮?/span>67 @RequestMapping("/queryAll")68 public String queryAll(Map<String, Object> map) {69 map.put("users", userService.queryAll());70 return "queryAll";71 }72 }
3.15、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>Insert title here</title> 8 </head> 9 <body>10 <a href="${pageContext.request.contextPath}/addView">添加用戶</a>11 <hr />12 <a href="${pageContext.request.contextPath}/queryAll">查詢?nèi)?span style="color: #0000ff"></a>13 </body>14 </html>
3.16、addUser.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="java.util.*"%> 4 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7 <html> 8 <head> 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">10 <title>用戶添加</title>11 </head>12 <body>13 <h1>用戶添加</h1>14 <form:form action="addUser" method="post" modelAttribute="user">15 16 UserName:<form:input path="userName" />17 <hr />18 <%19 Map<String, Object> sexes = new HashMap<>();20 sexes.put("男", "男");21 sexes.put("女", "女");22 request.setAttribute("sexes", sexes);23 %>24 Sex:25 <form:radiobuttons path="userSex" items="${sexes}" />26 <hr />27 UserAge:<form:input path="userAge" />28 <hr />29 <input type="submit" value="添加" />30 </form:form>31 </body>32 </html>
3.17、success.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>Insert title here</title> 8 </head> 9 <body>10 <h1>Success Page!!!</h1>11 </body>12 </html>
3.18、queryAll.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 9 <title>Insert title here</title>10 <style type="text/css">11 table, tr, th, td {12 border: 1px solid black;13 }14 15 table {16 width: 80%;17 }18 </style>19 </head>20 <body>21 <table>22 <thead>23 <tr>24 <th>ID</th>25 <th>UserName</th>26 <th>UserSex</th>27 <th>UserAge</th>28 <th>Operator</th>29 </tr>30 </thead>31 <tbody>32 <c:choose>33 <c:when test="${requestScope.users.size()>0 }">34 <c:forEach items="${requestScope.users}" var="user">35 <tr>36 <td>${user.id }</td>37 <td>${user.userName }</td>38 <td>${user.userSex }</td>39 <td>${user.userAge }</td>40 <td><a41 href="${pageContext.request.contextPath}/delete?id=${user.id}">Delete</a>42 <a43 href="${pageContext.request.contextPath}/queryOne?id=${user.id}">Update</a>44 </td>45 </tr>46 </c:forEach>47 </c:when>48 <c:otherwise>沒(méi)有人</c:otherwise>49 </c:choose>50 </tbody>51 </table>52 53 </body>54 </html>
3.19、update.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="java.util.*"%> 4 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7 <html> 8 <head> 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">10 <title>Insert title here</title>11 </head>12 <body>13 <h1>用戶修改</h1>14 <form:form action="${pageContext.request.contextPath}/update"15 method="post" modelAttribute="user">16 <!-- 隱藏域:用來(lái)存儲(chǔ)要修改的 user 的 id -->17 <input type="hidden" name="id" value="${user.id}" />18 UserName:<form:input path="userName" />19 <hr />20 <%21 Map<String, Object> sexes = new HashMap<>();22 sexes.put("男", "男");23 sexes.put("女", "女");24 request.setAttribute("sexes", sexes);25 %>26 Sex:27 <form:radiobuttons path="userSex" items="${sexes}" />28 <hr />29 UserAge:<form:input path="userAge" />30 <hr />31 <input type="submit" value="修改" />32 </form:form>33 </body>34 </html>
四、數(shù)據(jù)庫(kù)ssm_01
數(shù)據(jù)表:user_info
id、user_name、user_sex、user_age
注:由于本人技術(shù)有限,此文章僅供參考
聯(lián)系客服