SpringMVC之RESTful案例

本文介绍了一个使用SpringMVC框架实现的员工信息管理系统,包括员工信息的增删改查功能。通过配置视图控制器、实体类、DAO层以及前端页面,实现了基本的CRUD操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作

和传统 CRUD 一样,实现对员工信息的增删改查。

先搭建环境再准备实体类:

SpringMVC.xml:

<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://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/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--扫描控制层组件-->
    <context:component-scan base-package="com.atguigu"></context:component-scan>

    <!-- 配置Thymeleaf视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

    <!--
        配置默认的servlet处理静态资源
        当前工程的web.xml配置的前端控制器DispatcherServlet的url-pattern是/
        tomcat的web.xml配置的DefaultServlet的url-pattern也是/
        此时,浏览器发送的请求会优先被DispatcherServlet进行处理,但是DispatcherServlet无法处理静态资源
        若配置了<mvc:default-servlet-handler />,此时浏览器发送的所有请求都会被DefaultServlet处理
        若配置了<mvc:default-servlet-handler />和<mvc:annotation-driven />
        浏览器发送的请求会先被DispatcherServlet处理,无法处理在交给DefaultServlet处理
    -->
    <mvc:default-servlet-handler />

    <!--开启mvc的注解驱动-->
    <mvc:annotation-driven />

    <!--配置视图控制器-->
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>
    <mvc:view-controller path="/to/add" view-name="employee_add"></mvc:view-controller>

</beans>

实体类: 

package com.atguigu.mvc.bean;
public class Employee {
 private Integer id;
 private String lastName;
 private String email;
 //1 male, 0 female
 private Integer gender;
 public Integer getId() {
   return id;
 }
 public void setId(Integer id) {
   this.id = id;
 }
 public String getLastName() {
   return lastName;
 }
 public void setLastName(String lastName) {
   this.lastName = lastName;
 }
 public String getEmail() {
   return email;
 }
 public void setEmail(String email) {
   this.email = email;
}
 public Integer getGender() {
   return gender;
 }
 public void setGender(Integer gender) {
   this.gender = gender;
 }
 public Employee(Integer id, String lastName, String email, Integer
gender) {
   super();
   this.id = id;
   this.lastName = lastName;
   this.email = email;
   this.gender = gender;
 }
 public Employee() {
 }
}

准备dao模拟访问数据库:

package com.atguigu.mvc.dao;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import com.atguigu.mvc.bean.Employee;
import org.springframework.stereotype.Repository;
@Repository
public class EmployeeDao {
 private static Map<Integer, Employee> employees = null;
 static{
   employees = new HashMap<Integer, Employee>();
   employees.put(1001, new Employee(1001, "E-AA", "aa@163.com", 1));
   employees.put(1002, new Employee(1002, "E-BB", "bb@163.com", 1));
   employees.put(1003, new Employee(1003, "E-CC", "cc@163.com", 0));
   employees.put(1004, new Employee(1004, "E-DD", "dd@163.com", 0));
   employees.put(1005, new Employee(1005, "E-EE", "ee@163.com", 1));
 }
 private static Integer initId = 1006;
 public void save(Employee employee){
   if(employee.getId() == null){
    employee.setId(initId++);
  }
   employees.put(employee.getId(), employee);
}
 public Collection<Employee> getAll(){
   return employees.values();
 }
 public Employee get(Integer id){
   return employees.get(id);
 }
 public void delete(Integer id){
   employees.remove(id);
 }
}

 功能清单

 具体功能:访问首页

 ①配置view-controller

<mvc:view-controller path="/" view-name="index"/>

②创建页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8" >
  <title>Title</title>
</head>
<body>
<h1>首页</h1>
<a th:href="@{/employee}">访问员工信息</a>
</body>
</html>

具体功能:查询所有员工数据 

①控制器方法

@RequestMapping(value = "/employee", method = RequestMethod.GET)
public String getEmployeeList(Model model){
  Collection<Employee> employeeList = employeeDao.getAll();
  model.addAttribute("employeeList", employeeList);
  return "employee_list";
}

②创建employee_list.html

 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>Employee Info</title>
  <script type="text/javascript" th:src="@{/static/js/vue.js}"></script>
</head>
<body>
  <table border="1" cellpadding="0" cellspacing="0" style="text-align:
center;" id="dataTable">
    <tr>
      <th colspan="5">Employee Info</th>
    </tr>
    <tr>
      <th>id</th>
      <th>lastName</th>
      <th>email</th>
      <th>gender</th>
      <th>options(<a th:href="@{/toAdd}">add</a>)</th>
    </tr>
    <tr th:each="employee : ${employeeList}">
      <td th:text="${employee.id}"></td>
      <td th:text="${employee.lastName}"></td>
      <td th:text="${employee.email}"></td>
      <td th:text="${employee.gender}"></td>
      <td>
        <a class="deleteA" @click="deleteEmployee"
th:href="@{'/employee/'+${employee.id}}">delete</a>
        <a th:href="@{'/employee/'+${employee.id}}">update</a>
      </td>
    </tr>
  </table>
</body>
</html>

具体功能:删除 

①创建处理delete请求方式的表单

<!-- 作用:通过超链接控制表单的提交,将post请求转换为delete请求 -->
<form id="delete_form" method="post">
  <!-- HiddenHttpMethodFilter要求:必须传输_method请求参数,并且值为最终的请求方式 -->
  <input type="hidden" name="_method" value="delete"/>
</form>

引入vue.js

<script type="text/javascript" th:src="@{/static/js/vue.js}"></script>

删除超链接

<a class="deleteA" @click="deleteEmployee"
th:href="@{'/employee/'+${employee.id}}">delete</a>

通过vue处理点击事件

<script type="text/javascript">
  var vue = new Vue({
    el:"#dataTable",
    methods:{
      //event表示当前事件
      deleteEmployee:function (event) {
        //通过id获取表单标签
        var delete_form = document.getElementById("delete_form");
        //将触发事件的超链接的href属性为表单的action属性赋值
        delete_form.action = event.target.href;
        //提交表单
        delete_form.submit();
        //阻止超链接的默认跳转行为
        event.preventDefault();
     }
   }
 });
</script>

 ③控制器方法

@RequestMapping(value = "/employee/{id}", method = RequestMethod.DELETE)
public String deleteEmployee(@PathVariable("id") Integer id){
  employeeDao.delete(id);
  return "redirect:/employee";
}

 具体功能:跳转到添加数据页面

 ①配置view-controller

<mvc:view-controller path="/toAdd" view-name="employee_add"></mvc:view-
controller>

②创建employee_add.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>Add Employee</title>
</head>
<body>
<form th:action="@{/employee}" method="post">
 lastName:<input type="text" name="lastName"><br>
 email:<input type="text" name="email"><br>
 gender:<input type="radio" name="gender" value="1">male
  <input type="radio" name="gender" value="0">female<br>
  <input type="submit" value="add"><br>
</form>
</body>
</html>

 具体功能:执行保存

 ①控制器方法

@RequestMapping(value = "/employee", method = RequestMethod.POST)
public String addEmployee(Employee employee){
  employeeDao.save(employee);
  return "redirect:/employee";
}

具体功能:跳转到更新数据页面 

①修改超链接

<a th:href="@{'/employee/'+${employee.id}}">update</a>

②控制器方法

@RequestMapping(value = "/employee/{id}", method = RequestMethod.GET)
public String getEmployeeById(@PathVariable("id") Integer id, Model model){
  Employee employee = employeeDao.get(id);
  model.addAttribute("employee", employee);
  return "employee_update";
}

 ③创建employee_update.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>Update Employee</title>
</head>
<body>
<form th:action="@{/employee}" method="post">
  <input type="hidden" name="_method" value="put">
  <input type="hidden" name="id" th:value="${employee.id}">
 lastName:<input type="text" name="lastName" th:value="${employee.lastName}">
<br>
 email:<input type="text" name="email" th:value="${employee.email}"><br>
  <!--
    th:field="${employee.gender}"可用于单选框或复选框的回显
 若单选框的value和employee.gender的值一致,则添加checked="checked"属性
  -->
 gender:<input type="radio" name="gender" value="1"
th:field="${employee.gender}">male
  <input type="radio" name="gender" value="0"
th:field="${employee.gender}">female<br>
  <input type="submit" value="update"><br>
</form>
</body>
</html>

具体功能:执行更新

①控制器方法

@RequestMapping(value = "/employee", method = RequestMethod.PUT)
public String updateEmployee(Employee employee){
  employeeDao.save(employee);
  return "redirect:/employee";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值