文章目录
SpringMVC
创建项目
…
创建开发包
…
导入依赖
pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spring-mvc-version>5.2.6.RELEASE</spring-mvc-version>
</properties>
<dependencies>
<!--spring环境的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-mvc-version}</version>
</dependency>
<!--springmvc的依赖包 begin-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-mvc-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-mvc-version}</version>
</dependency>
<!--springmvc的依赖包 end-->
<!--打印日志的依赖包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--跟文件上传下载的IO包-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!--简化getter和setter的依赖包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!-- servlet相关的依赖包 begin-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- servlet相关的依赖包 end-->
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
创建SpringMVC的xml配置文件
application-context.xml
<!--
主要是配置两个内容
1.配置注解扫描,将对应包下的Bean给spring进行管理
2.配置视图解析器,能够合理的跳转到对应的文件中
-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--如果想要注解,那肯定需要被spring容器进行管理 component-scan 组件扫描-->
<!--配置注解扫描-->
<context:component-scan base-package="com.changan.controller"></context:component-scan>
<!--配置视图解析器 prefix pre前缀 fix合适,匹配 suffix后缀匹配-->
<!--/pages/index.jsp-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
配置web.xml
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 指定spring-mvc的配置文件-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
创建实体类
User.java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String userName;
private Integer age;
private String email;
private String address;
}
创建数据类
UserData.java
import java.util.ArrayList;
import java.util.List;
public class UserData {
public static List<User> userItems = new ArrayList<>();
static {
userItems.add(new User(1, "张三", 18, "82372837@qqcom", "湖南长沙开福"));
userItems.add(new User(2, "李四", 20, "82372837@qqcom", "湖南长沙岳麓"));
userItems.add(new User(3, "王武", 30, "82372837@qqcom", "湖南长沙天心"));
userItems.add(new User(4, "赵六", 23, "82372837@qqcom", "湖南长沙雨花"));
}
}
创建jsp的页面
index.jsp
<%--
Created by IntelliJ IDEA.
User: 13512
Date: 0028
Time: 15:10
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
Hello World
</body>
</html>
编写控制器类
UserController.java
package com.changan.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/*指定这是一个控制器的类*/
@Controller
public class UserController {
@RequestMapping(value = {"/","/index"})
public String index(){
/*/pages/index.jsp*/
return "index";
}
}
从页面中获取值
从Bootstrap官网中获取基本模板
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>Bootstrap 101 Template</title>
<!-- Bootstrap -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
</head>
<body>
<h1>你好,世界!</h1>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</body>
</html>
优化JSP页面
index.jsp
<%--
Created by IntelliJ IDEA.
User: 13512
Date: 0028
Time: 15:10
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>Bootstrap 101 Template</title>
<!-- Bootstrap -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
<style type="text/css">
.form-box{
width: 500px;
height: 500px;
border: 1px solid #DCDFE6;
border-radius: 20px;
margin: 80px auto;
padding: 20px 30px;
}
.form-box:hover{
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)
}
</style>
</head>
<body>
<div class="form-box">
<form action="/submit" method="post">
<div class="form-group">
<label for="id">编号</label>
<input type="number" class="form-control" id="id" name="id" placeholder="编号">
</div>
<div class="form-group">
<label for="userName">用户名</label>
<input type="text" class="form-control" id="userName" name="userName" placeholder="用户名">
</div>
<div class="form-group">
<label for="age">年龄</label>
<input type="number" class="form-control" id="age" name="age" placeholder="年龄">
</div>
<div class="form-group">
<label for="email">邮箱</label>
<input type="email" class="form-control" id="email" name="email" placeholder="邮箱">
</div>
<div class="form-group">
<label for="address">地址</label>
<input type="text" class="form-control" id="address" name="address" placeholder="地址">
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
</div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</body>
</html>
从页面传到Controller
UserController
package com.changan.controller;
import com.changan.entity.User;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
/*指定这是一个控制器的类*/
@Controller
public class UserController {
@RequestMapping(value = {"/","/index"})
public String index(){
/*/pages/index.jsp*/
return "index";
}
/*
springmvc传值的两种方式
1.通过指定jsp的name属性与控制器中方法中的属性同名即可达到传值的目的
2.可以使用实体类代替属性进行更加高效的传值
*/
/*@RequestMapping("/submit")
public String submit(Integer id,String userName,Integer age,String email,String address){
System.out.println(id);
System.out.println(userName);
System.out.println(age);
System.out.println(email);
System.out.println(address);
return "success";
}*/
@RequestMapping("/submit")
public String submit(User user){
System.out.println(user.toString());
return "success";
}
}
从控制器传到页面
UserController.java
package com.changan.controller;
import com.changan.data.UserData;
import com.changan.entity.User;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
/*指定这是一个控制器的类*/
@Controller
public class UserController {
@RequestMapping(value = {"/","/index"})
public String index(){
/*/pages/index.jsp*/
return "index";
}
/*@RequestMapping("/submit")
public String submit(Integer id,String userName,Integer age,String email,String address){
System.out.println(id);
System.out.println(userName);
System.out.println(age);
System.out.println(email);
System.out.println(address);
return "success";
}*/
@RequestMapping("/submit")
public String submit(User user){
System.out.println(user.toString());
return "success";
}
/*
* 1.使用ModelAndView
* 2.使用Model
* 3.使用Map
* 4.使用ModelMap
* */
/*@RequestMapping("/list")
public ModelAndView list(){
ModelAndView mav = new ModelAndView();
mav.addObject("users", UserData.userItems);
mav.setViewName("list");
return mav;
}*/
/*@RequestMapping("/list")
public String list(Model model){
model.addAttribute("users", UserData.userItems);
return "list";
}*/
/*@RequestMapping("/list")
public String list(HashMap<String,Object> map){
map.put("users", UserData.userItems);
return "list";
}*/
@RequestMapping("/list")
public String list(ModelMap map){
map.put("users", UserData.userItems);
return "list";
}
}
success.jsp
<%--
Created by IntelliJ IDEA.
User: 13512
Date: 0028
Time: 15:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
success
</body>
</html>
list.jsp
<%--
Created by IntelliJ IDEA.
User: 13512
Date: 0028
Time: 16:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>Bootstrap 101 Template</title>
<!-- Bootstrap -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
<style type="text/css">
.table-box{
width: 800px;
height: 500px;
border: 1px solid #DCDFE6;
border-radius: 20px;
margin: 80px auto;
padding: 20px 30px;
}
.table-box:hover{
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)
}
.table-title{
text-align: center;
padding-bottom: 20px;
}
.mybtn{
margin-bottom: 10px;
}
</style>
</head>
<body>
<div class="table-box">
<h1 class="table-title">用户列表</h1>
<button type="button" class="btn btn-primary mybtn">添 加</button>
<table class="table table-bordered">
<tr class="active">
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>邮箱</th>
<th>地址</th>
<th>操作</th>
</tr>
<c:forEach items="${users}" var="user">
<tr
<c:if test="${user.id%2==0}">
class="success"
</c:if>
<c:if test="${user.id%2!=0}">
class="danger"
</c:if>
>
<td>${user.id}</td>
<td>${user.userName}</td>
<td>${user.age}</td>
<td>${user.email}</td>
<td>${user.address}</td>
<td>
<a href=""><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></a>
<a href=""><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a>
</td>
</tr>
</c:forEach>
</table>
</div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</body>
</html>
实现CURD
UserController.java
package com.changan.controller;
import com.changan.data.UserData;
import com.changan.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
/*指定这是一个控制器的类*/
@Controller
public class UserController {
@RequestMapping(value = {"/","/index"})
public String index(){
/*/pages/index.jsp*/
return "index";
}
/*@RequestMapping("/submit")
public String submit(Integer id,String userName,Integer age,String email,String address){
System.out.println(id);
System.out.println(userName);
System.out.println(age);
System.out.println(email);
System.out.println(address);
return "success";
}*/
@RequestMapping("/submit")
public String submit(User user){
System.out.println(user.toString());
return "success";
}
/*
* 1.使用ModelAndView
* 2.使用Model
* 3.使用Map
* 4.使用ModelMap
* */
/*@RequestMapping("/list")
public ModelAndView list(){
ModelAndView mav = new ModelAndView();
mav.addObject("users", UserData.userItems);
mav.setViewName("list");
return mav;
}*/
/*@RequestMapping("/list")
public String list(Model model){
model.addAttribute("users", UserData.userItems);
return "list";
}*/
/*@RequestMapping("/list")
public String list(HashMap<String,Object> map){
map.put("users", UserData.userItems);
return "list";
}*/
@RequestMapping("/list")
public String list(ModelMap map){
map.put("users", UserData.userItems);
return "list";
}
//增加
@RequestMapping("/edit")
public String edit(Integer id,Model model){
if(id!=null){//修改
User u = null;
for(User user : UserData.userItems){
if(user.getId().equals(id)){
u = user;
break;
}
}
model.addAttribute("user",u);
}
//跳编辑的页面
return "index";
}
//删除
@RequestMapping("/del")
public String del(Integer id){
User u = null;
for(User user : UserData.userItems){
if(user.getId().equals(id)){
u = user;
break;
}
}
UserData.userItems.remove(u);
//删除之后要重新查询
//重定向到指定的控制器
return "redirect:/list";
}
@RequestMapping("/add")
public String add(User user){
UserData.userItems.add(user);
return "redirect:/list";
}
@RequestMapping("/upd")
public String upd(User user){
for(User u : UserData.userItems){
if(u.getId().equals(user.getId())){
BeanUtils.copyProperties(user,u);
break;
}
}
return "redirect:/list";
}
}
index.jsp
<%--
Created by IntelliJ IDEA.
User: 13512
Date: 0028
Time: 15:10
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>Bootstrap 101 Template</title>
<!-- Bootstrap -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
<style type="text/css">
.form-box{
width: 500px;
height: 500px;
border: 1px solid #DCDFE6;
border-radius: 20px;
margin: 80px auto;
padding: 20px 30px;
}
.form-box:hover{
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)
}
</style>
</head>
<body>
<div class="form-box">
<form action="${user==null?'/add':'/upd'}" method="post">
<div class="form-group">
<label for="id">编号</label>
<input type="number" class="form-control" id="id" name="id" placeholder="编号" value="${user.id}">
</div>
<div class="form-group">
<label for="userName">用户名</label>
<input type="text" class="form-control" id="userName" name="userName" placeholder="用户名" value="${user.userName}">
</div>
<div class="form-group">
<label for="age">年龄</label>
<input type="number" class="form-control" id="age" name="age" placeholder="年龄" value="${user.age}">
</div>
<div class="form-group">
<label for="email">邮箱</label>
<input type="email" class="form-control" id="email" name="email" placeholder="邮箱" value="${user.email}">
</div>
<div class="form-group">
<label for="address">地址</label>
<input type="text" class="form-control" id="address" name="address" placeholder="地址" value="${user.address}">
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
</div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</body>
</html>
list.jsp
<%--
Created by IntelliJ IDEA.
User: 13512
Date: 0028
Time: 16:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>Bootstrap 101 Template</title>
<!-- Bootstrap -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
<style type="text/css">
.table-box{
width: 800px;
height: 500px;
border: 1px solid #DCDFE6;
border-radius: 20px;
margin: 80px auto;
padding: 20px 30px;
}
.table-box:hover{
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)
}
.table-title{
text-align: center;
padding-bottom: 20px;
}
.mybtn{
margin-bottom: 10px;
}
</style>
</head>
<body>
<div class="table-box">
<h1 class="table-title">用户列表</h1>
<a href="/edit"><button type="button" class="btn btn-primary mybtn">添 加</button></a>
<table class="table table-bordered">
<tr class="active">
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>邮箱</th>
<th>地址</th>
<th>操作</th>
</tr>
<c:forEach items="${users}" var="user">
<tr
<c:if test="${user.id%2==0}">
class="success"
</c:if>
<c:if test="${user.id%2!=0}">
class="danger"
</c:if>
>
<td>${user.id}</td>
<td>${user.userName}</td>
<td>${user.age}</td>
<td>${user.email}</td>
<td>${user.address}</td>
<td>
<a href="/del?id=${user.id}"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></a>
<a href="/edit?id=${user.id}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a>
</td>
</tr>
</c:forEach>
</table>
</div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</body>
</html>
扩展知识
在Controller中加上@RequestMapping
@Controller
@RequestMapping("user")
public class UserController {
/*RequestMapping对应的请求路径是不能重复的*/
@RequestMapping(value = {"/","/index"})
public String index(){
return "index";
}
}
目的是可能会出现同名的RequestMapping路径,这样避免了出现路径相同的错误,建议以后控制器中都加上这么一个注解
@RequestParam()
当页面中的属性和控制器方法中的属性不一致的时候,可以使用@RequestParam()指定一致
用法:
/*index.jsp中的name="id"*/
@RequestMapping("/add")
public String add(@RequestParam("id")Integer uid,String userName){
System.out.println(uid);
System.out.println(userName);
return "success";
}
控制器中传递参数
@RequestMapping("/findById")
public String findById(Integer id){
User u = null;
if(id!=null){//修改
for(User user : UserData.userItems){
if(user.getId().equals(id)){
u = user;
break;
}
}
}
System.out.println(u.toString());
return "success";
}
/*
* 通过路径去拿到ID
* 如果path的id和方法参数的id一致,则可以省略
不一致的时候,一定是@RequestMapping("/findUserById/{uid}")和@PathVariable("uid")一致,而不是和方法的参数名称一致
* */
@RequestMapping("/findUserById/{uid}")
public String findUserById(@PathVariable("uid") Integer id){
User u = null;
if(id!=null){//修改
for(User user : UserData.userItems){
if(user.getId().equals(id)){
u = user;
break;
}
}
}
System.out.println(u.toString());
return "success";
}
/*访问的地址:http://localhost:8080/findById?id=1*/
@RestController
/*以Json数据的方式返回方法中的内容*/
@RestController
public class MyUserController {
@RequestMapping("findAll")
public List<User> findAll(){
List<User> userItems = UserData.userItems;
for(User user : userItems){
System.out.println(user.toString());
}
return userItems;
}
}
@ResponseBody
/*相当于 @RestController=@ResponseBody+@Controller*/