• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

(续)SSM整合:springmvc笔记(RESTful:RESTful案例)P148-153

武飞扬头像
姜小白程序
帮助1

目录

RESTful案例

一  . 准备工作

1 . 准备实体类

2 .准备dao模拟数据

3.  创建控制层EmployeeController

二  功能清单

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

①控制器方法

②创建employee_list.html

 ③ index.html

④  测试

 ⑤  处理静态资源   样式

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

①配置view-controller

②创建employee_add.html  

③ employee_list.html

 ④ 测试

编辑 ⑤  写控制层

 ⑥ 测试

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

①修改超链接

 ②控制器方法

 ③创建employee_update.html

④ 测试

六 .具体功能:执行更新

①控制器方法

② 测试

七   具体功能:删除

 ①employee_list.html

②  控制器方法  

③ 测试


RESTful案例

一  . 准备工作

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

1 . 准备实体类

  1.  
    package com.atguigu.pojo;
  2.  
    public class Employee {
  3.  
     
  4.  
    private Integer id;
  5.  
    private String lastName;
  6.  
     
  7.  
    private String email;
  8.  
    //1 male, 0 female
  9.  
    private Integer gender;
  10.  
     
  11.  
    public Integer getId() {
  12.  
    return id;
  13.  
    }
  14.  
     
  15.  
    public void setId(Integer id) {
  16.  
    this.id = id;
  17.  
    }
  18.  
     
  19.  
    public String getLastName() {
  20.  
    return lastName;
  21.  
    }
  22.  
     
  23.  
    public void setLastName(String lastName) {
  24.  
    this.lastName = lastName;
  25.  
    }
  26.  
     
  27.  
    public String getEmail() {
  28.  
    return email;
  29.  
    }
  30.  
     
  31.  
    public void setEmail(String email) {
  32.  
    this.email = email;
  33.  
    }
  34.  
     
  35.  
    public Integer getGender() {
  36.  
    return gender;
  37.  
    }
  38.  
     
  39.  
    public void setGender(Integer gender) {
  40.  
    this.gender = gender;
  41.  
    }
  42.  
     
  43.  
    public Employee(Integer id, String lastName, String email, Integer gender) {
  44.  
    super();
  45.  
    this.id = id;
  46.  
    this.lastName = lastName;
  47.  
    this.email = email;
  48.  
    this.gender = gender;
  49.  
    }
  50.  
     
  51.  
    public Employee() {
  52.  
    }
  53.  
     
  54.  
    }
学新通

2 .准备dao模拟数据

  1.  
    package com.atguigu.dao;
  2.  
     
  3.  
    import com.atguigu.pojo.Employee;
  4.  
    import org.springframework.stereotype.Repository;
  5.  
     
  6.  
    import java.util.Collection;
  7.  
    import java.util.HashMap;
  8.  
    import java.util.Map;
  9.  
     
  10.  
    @Repository
  11.  
    public class EmployeeDao {
  12.  
     
  13.  
    private static Map<Integer, Employee> employees = null;
  14.  
     
  15.  
    static{
  16.  
    employees = new HashMap<Integer, Employee>();
  17.  
     
  18.  
    employees.put(1001, new Employee(1001, "E-AA", "aa@163.com", 1));
  19.  
    employees.put(1002, new Employee(1002, "E-BB", "bb@163.com", 1));
  20.  
    employees.put(1003, new Employee(1003, "E-CC", "cc@163.com", 0));
  21.  
    employees.put(1004, new Employee(1004, "E-DD", "dd@163.com", 0));
  22.  
    employees.put(1005, new Employee(1005, "E-EE", "ee@163.com", 1));
  23.  
    }
  24.  
     
  25.  
    private static Integer initId = 1006;
  26.  
     
  27.  
    public void save(Employee employee){
  28.  
    if(employee.getId() == null){
  29.  
    employee.setId(initId );
  30.  
    }
  31.  
    employees.put(employee.getId(), employee);
  32.  
    }
  33.  
     
  34.  
    public Collection<Employee> getAll(){
  35.  
    return employees.values();
  36.  
    }
  37.  
     
  38.  
    public Employee get(Integer id){
  39.  
    return employees.get(id);
  40.  
    }
  41.  
     
  42.  
    public void delete(Integer id){
  43.  
    employees.remove(id);
  44.  
    }
  45.  
     
  46.  
    }
学新通

3.  创建控制层EmployeeController

学新通

  1.  
    package com.atguigu.controller;
  2.  
    import org.springframework.stereotype.Controller;
  3.  
     
  4.  
    @Controller
  5.  
    public class EmployeeController {
  6.  
     
  7.  
     
  8.  
    }

二  功能清单

学新通

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

①控制器方法

  1.  
    package com.atguigu.controller;
  2.  
     
  3.  
    /**
  4.  
    * 查询所有的员工信息-->/employee-->get
  5.  
    * 跳转到添加页面-->/to/add-->get
  6.  
    * 新增员工信息-->/employee-->post
  7.  
    * 跳转到修改页面-->/employee/1-->get
  8.  
    * 修改员工信息-->/employee-->put
  9.  
    * 删除员工信息-->/employee/1-->delete
  10.  
    */
  11.  
    @Controller
  12.  
    public class EmployeeController {
  13.  
    @Autowired
  14.  
    private EmployeeDao employeeDao;
  15.  
     
  16.  
    @RequestMapping(value = "/employee", method = RequestMethod.GET)
  17.  
    public String getAllEmployee(Model model){
  18.  
    //获取所有的员工信息
  19.  
    Collection<Employee> allEmployee = employeeDao.getAll();
  20.  
    //将所有的员工信息在请求域中共享
  21.  
    model.addAttribute("allEmployee", allEmployee);
  22.  
    //跳转到列表页面
  23.  
    return "employee_list";
  24.  
    }
  25.  
     
  26.  
    }
学新通

②创建employee_list.html

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>employee list</title>
  6.  
    <link rel="stylesheet" th:href="@{/static/css/index_work.css}">
  7.  
    </head>
  8.  
    <body>
  9.  
    <table>
  10.  
    <tr>
  11.  
    <th colspan="5">employee list</th>
  12.  
    </tr>
  13.  
    <tr>
  14.  
    <th>id</th>
  15.  
    <th>lastName</th>
  16.  
    <th>email</th>
  17.  
    <th>gender</th>
  18.  
    <th>options</th>
  19.  
    </tr>
  20.  
    <tr th:each="employee : ${allEmployee}">
  21.  
    <td th:text="${employee.id}"></td>
  22.  
    <td th:text="${employee.lastName}"></td>
  23.  
    <td th:text="${employee.email}"></td>
  24.  
    <td th:text="${employee.gender}"></td>
  25.  
    <td>
  26.  
    <a href="">delete</a>
  27.  
    <a href="">update</a>
  28.  
    </td>
  29.  
    </tr>
  30.  
    </table>
  31.  
    </body>
  32.  
    </html>
学新通

学新通

如果这个报红 就把错误警告取消

学新通

 学新通

不过我们建议把它给选择上 因为如果不选择上  以后就算有错误 也不在提醒

学新通

 ③ index.html

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>首页</title>
  6.  
    </head>
  7.  
    <body>
  8.  
    <h1>index.html</h1>
  9.  
    <a th:href="@{/user}">查询所有的用户信息</a><br>
  10.  
    <a th:href="@{/user/1}">查询id为1的用户信息</a><br>
  11.  
    <form th:action="@{/user}" method="post">
  12.  
    <input type="submit" value="添加用户信息">
  13.  
    </form>
  14.  
    <form th:action="@{/user}" method="post">
  15.  
    <input type="hidden" name="_method" value="put">
  16.  
    <input type="submit" value="修改用户信息">
  17.  
    </form>
  18.  
    <form th:action="@{/user/5}" method="post">
  19.  
    <input type="hidden" name="_method" value="delete">
  20.  
    <input type="submit" value="删除用户信息">
  21.  
    </form>
  22.  
    <hr>
  23.  
    <a th:href="@{/employee}">查询所有的员工信息</a>
  24.  
    </body>
  25.  
    </html>
学新通

学新通

④  测试

 学新通

学新通

 ⑤  处理静态资源   样式

把静态资源复制过来  然后在clean一下  然后在重新打包

学新通

学新通

学新通

   <link rel="stylesheet" th:href="@{/static/css/index_work.css}">

 学新通

报404

解决办法 :配置默认的servlet处理静态资源

  1.  
    <!--
  2.  
    配置默认的servlet处理静态资源
  3.  
    当前工程的web.xml配置的前端控制器DispatcherServlet的url-pattern是/
  4.  
    tomcat的web.xml配置的DefaultServlet的url-pattern也是/
  5.  
    此时,浏览器发送的请求会优先被DispatcherServlet进行处理,但是DispatcherServlet无法处理静态资源
  6.  
    若配置了<mvc:default-servlet-handler />,此时浏览器发送的所有请求都会被DefaultServlet处理
  7.  
    若配置了<mvc:default-servlet-handler />和<mvc:annotation-driven />
  8.  
    浏览器发送的请求会先被DispatcherServlet处理,无法处理在交给DefaultServlet处理
  9.  
    -->
  10.  
    <mvc:default-servlet-handler />
  11.  
     
  12.  
    <!--开启mvc的注解驱动-->
  13.  
    <mvc:annotation-driven />

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

①配置view-controller

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

学新通

②创建employee_add.html  

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>add employee</title>
  6.  
    <link rel="stylesheet" th:href="@{/static/css/index_work.css}">
  7.  
    </head>
  8.  
    <body>
  9.  
    <form th:action="@{/employee}" method="post">
  10.  
    <table>
  11.  
    <tr>
  12.  
    <th colspan="2">add employee</th>
  13.  
    </tr>
  14.  
    <tr>
  15.  
    <td>lastName</td>
  16.  
    <td>
  17.  
    <input type="text" name="lastName">
  18.  
    </td>
  19.  
    </tr>
  20.  
    <tr>
  21.  
    <td>email</td>
  22.  
    <td>
  23.  
    <input type="text" name="email">
  24.  
    </td>
  25.  
    </tr>
  26.  
    <tr>
  27.  
    <td>gender</td>
  28.  
    <td>
  29.  
    <input type="radio" name="gender" value="1">male
  30.  
    <input type="radio" name="gender" value="0">female
  31.  
    </td>
  32.  
    </tr>
  33.  
    <tr>
  34.  
    <td colspan="2">
  35.  
    <input type="submit" value="add">
  36.  
    </td>
  37.  
    </tr>
  38.  
    </table>
  39.  
    </form>
  40.  
    </body>
  41.  
    </html>
学新通

③ employee_list.html

           <th>options(<a th:href="@{/to/add}">add</a>)</th>

学新通

 ④ 测试

学新通

学新通

学新通 ⑤  写控制层

  1.  
    @RequestMapping(value = "/employee", method = RequestMethod.POST)
  2.  
    public String addEmployee(Employee employee){
  3.  
    //保存员工信息
  4.  
    employeeDao.save(employee);
  5.  
    //重定向到列表功能:/employee
  6.  
    return "redirect:/employee";
  7.  
    }

学新通

 ⑥ 测试

学新通

学新通

学新通

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

①修改超链接

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

学新通

 ②控制器方法

  1.  
    @RequestMapping(value = "/employee/{id}", method = RequestMethod.GET)
  2.  
    public String toUpdate(@PathVariable("id") Integer id, Model model){
  3.  
    //根据id查询员工信息
  4.  
    Employee employee = employeeDao.get(id);
  5.  
    //将员工信息共享到请求域中
  6.  
    model.addAttribute("employee", employee);
  7.  
    //跳转到employee_update.html
  8.  
    return "employee_update";
  9.  
    }

学新通

 ③创建employee_update.html

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>update employee</title>
  6.  
    <link rel="stylesheet" th:href="@{/static/css/index_work.css}">
  7.  
    </head>
  8.  
    <body>
  9.  
    <form th:action="@{/employee}" method="post">
  10.  
    <input type="hidden" name="_method" value="put">
  11.  
    <input type="hidden" name="id" th:value="${employee.id}">
  12.  
    <table>
  13.  
    <tr>
  14.  
    <th colspan="2">update employee</th>
  15.  
    </tr>
  16.  
    <tr>
  17.  
    <td>lastName</td>
  18.  
    <td>
  19.  
    <input type="text" name="lastName" th:value="${employee.lastName}">
  20.  
    </td>
  21.  
    </tr>
  22.  
    <tr>
  23.  
    <td>email</td>
  24.  
    <td>
  25.  
    <input type="text" name="email" th:value="${employee.email}">
  26.  
    </td>
  27.  
    </tr>
  28.  
    <tr>
  29.  
    <td>gender</td>
  30.  
    <td>
  31.  
    <input type="radio" name="gender" value="1" th:field="${employee.gender}">male
  32.  
    <input type="radio" name="gender" value="0" th:field="${employee.gender}">female
  33.  
    </td>
  34.  
    </tr>
  35.  
    <tr>
  36.  
    <td colspan="2">
  37.  
    <input type="submit" value="update">
  38.  
    </td>
  39.  
    </tr>
  40.  
    </table>
  41.  
    </form>
  42.  
    </body>
  43.  
    </html>
学新通

④ 测试

学新通

学新通 

学新通 

六 .具体功能:执行更新

①控制器方法

  1.  
    @RequestMapping(value = "/employee", method = RequestMethod.PUT)
  2.  
    public String updateEmployee(Employee employee){
  3.  
    //修改员工信息
  4.  
    employeeDao.save(employee);
  5.  
    //重定向到列表功能:/employee
  6.  
    return "redirect:/employee";
  7.  
    }

学新通

② 测试

学新通

学新通 

学新通 

学新通 

学新通 

七   具体功能:删除

 employee_list.html

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>employee list</title>
  6.  
    <link rel="stylesheet" th:href="@{/static/css/index_work.css}">
  7.  
    </head>
  8.  
    <body>
  9.  
    <div id="app">
  10.  
    <table>
  11.  
    <tr>
  12.  
    <th colspan="5">employee list</th>
  13.  
    </tr>
  14.  
    <tr>
  15.  
    <th>id</th>
  16.  
    <th>lastName</th>
  17.  
    <th>email</th>
  18.  
    <th>gender</th>
  19.  
    <th>options(<a th:href="@{/to/add}">add</a></th>
  20.  
    </tr>
  21.  
    <tr th:each="employee : ${allEmployee}">
  22.  
    <td th:text="${employee.id}"></td>
  23.  
    <td th:text="${employee.lastName}"></td>
  24.  
    <td th:text="${employee.email}"></td>
  25.  
    <td th:text="${employee.gender}"></td>
  26.  
    <td>
  27.  
    <a @click="deleteEmployee()" th:href="@{'/employee/' ${employee.id}}">delete</a>
  28.  
    <a th:href="@{'/employee/' ${employee.id}}">update</a>
  29.  
    </td>
  30.  
    </tr>
  31.  
    </table>
  32.  
    <form method="post">
  33.  
    <input type="hidden" name="_method" value="delete">
  34.  
    </form>
  35.  
    </div>
  36.  
     
  37.  
    <script type="text/javascript" th:src="@{/static/js/vue.js}"></script>
  38.  
    <script type="text/javascript">
  39.  
    var vue = new Vue({
  40.  
    el:"#app",
  41.  
    methods:{
  42.  
    deleteEmployee(){
  43.  
    //获取form表单
  44.  
    var form = document.getElementsByTagName("form")[0];
  45.  
    //将超链接的href属性值赋值给form表单的action属性
  46.  
    //event.target表示当前触发事件的标签
  47.  
    form.action = event.target.href;
  48.  
    //表单提交
  49.  
    form.submit();
  50.  
    //阻止超链接的默认行为
  51.  
    event.preventDefault();
  52.  
    }
  53.  
    }
  54.  
    });
  55.  
    </script>
  56.  
    </body>
  57.  
    </html>
学新通

学新通

②  控制器方法  

  1.  
    @RequestMapping(value = "/employee/{id}", method = RequestMethod.DELETE)
  2.  
    public String deleteEmployee(@PathVariable("id") Integer id){
  3.  
    //删除员工信息
  4.  
    employeeDao.delete(id);
  5.  
    //重定向到列表功能:/employee
  6.  
    return "redirect:/employee";
  7.  
    }

学新通

③ 测试

学新通

学新通 

学新通 

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgehjhf
系列文章
更多 icon
同类精品
更多 icon
继续加载