栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【SpringMVC从入门到精通】05-RESTful 案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【SpringMVC从入门到精通】05-RESTful 案例

笔记来源:【尚硅谷】SpringMVC教程丨一套快速上手spring mvc

文章目录

RESTful 案例

1、准备工作

Step1、创建工程Step2、完善 POMStep3、web.xmlStep4、SpringMVC 配置文件Step5、创建 Controller、Dao、Bean 2、功能清单3、访问首页4、列表功能5、删除功能6、添加功能7、修改功能注意点

RESTful 案例 1、准备工作 Step1、创建工程

File-New-Project,默认Next

填写项目工程基本信息,点击FINISH

Step2、完善 POM

修改打包方式为war,并引入相关依赖



    4.0.0

    com.vectorx
    SpringMVC_RESTful
    1.0-SNAPSHOT
    war

    
        8
        8
    

    
        
            org.springframework
            spring-webmvc
            5.3.16
        
        
            ch.qos.logback
            logback-classic
            1.2.11
            test
        
        
            javax.servlet
            javax.servlet-api
            4.0.1
            provided
        
        
            org.thymeleaf
            thymeleaf-spring5
            3.0.15.RELEASE
        
    

Step3、web.xml

File-Project Structure-Modules,在Deployment Descriptors中点击+号添加Deployment Descriptor Location,默认路径中不带srcmainwebapp,需要手动添加

在web.xml中添加两个过滤器和一个前端控制器:

编码过滤器:CharacterEncodingFilter(注意顺序)处理PUT和DELETE的请求过滤器:HiddenHttpMethodFilter前端控制器:DispatcherServlet



    
    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceResponseEncoding
            true
        
    
    
        CharacterEncodingFilter
        
    void save(Employee employee);

    
    void deleteById(Integer id);

    
    List getAll();

    
    Employee getById(Integer id);
}

EmployeeDaoImpl

@Repository
public class EmployeeDaoImpl implements EmployeeDao {
    private static Map employeeMap;
    private static Integer initId = 1000;

    static {
        employeeMap = new HashMap<>();
        employeeMap.put(++initId, new Employee(initId, "张三", "zhangsan@qq.com", 1));
        employeeMap.put(++initId, new Employee(initId, "李四", "lisi@qq.com", 0));
        employeeMap.put(++initId, new Employee(initId, "王五", "wangwu@qq.com", 0));
        employeeMap.put(++initId, new Employee(initId, "赵六", "zhaoliu@qq.com", 1));
    }

    @Override
    public void save(Employee employee) {
        if (employee.getId() == null) {
            employee.setId(++initId);
        }
        employeeMap.put(employee.getId(), employee);
    }

    @Override
    public void deleteById(Integer id) {
        employeeMap.remove(id);
    }

    @Override
    public List getAll() {
        return new ArrayList<>(employeeMap.values());
    }

    @Override
    public Employee getById(Integer id) {
        return employeeMap.get(id);
    }
}

Employee

public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private Integer gender;

    public Employee() {
    }

    public Employee(Integer id, String lastName, String email, Integer gender) {
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = 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;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + ''' +
                ", email='" + email + ''' +
                ", gender='" + gender + ''' +
                '}';
    }
}
2、功能清单
功能URL路径请求方式
访问首页/GET
查询所有员工/employeeGET
删除员工/employee/1DELETE
跳转到添加员工页面/toAddGET
添加员工/employeePOST
跳转到修改员工页面/employee/2GET
修改员工/employeePUT
3、访问首页

index.html




    
    首页


首页

查看员工信息

测试

4、列表功能

EmployeeController.java

@GetMapping("/employee")
public String getAllEmployee(Model model) {
    List employeeList = employeeDao.getAll();
    model.addAttribute("employeeList", employeeList);
    return "employeelist";
}

employeelist.html



    
        
        员工信息
        
    
    
        
员工信息
ID 姓名 邮箱 性别 操作
修改 删除

效果

5、删除功能

在webapp下新建static/css和static/js,用来放置css文件和js文件

引入static/js/vue.jsstatic/css/employeelist.css作为外部样式文件static/js/employeelist.js作为外部js文件

employeelist.html



    
        
        员工信息
        
    
    
        
员工信息
ID 姓名 邮箱 性别 操作
修改 删除

employeelist.css

table {
    width: 50%;
    border: 1px black solid;
    border-collapse: collapse;
    
    vertical-align: middle;
    text-align: center;
}


tbody tr:nth-child(odd) {
    background-color: rgb(211, 216, 188);
}

th, td {
    border: 1px black solid;
}

employeelist.js

var vue = new Vue({
    el: "#employeeTable",
    methods: {
        deleteEmployee: function (event) {
            if (/confirm/i('确认删除吗?')) {
                var deleteForm = document.getElementById("deleteForm");
                deleteForm.action = event.target.href;
                deleteForm.submit();
            }
            event.preventDefault();
        }
    }
});

SpringMVC 配置文件


效果

6、添加功能

employeelist.html


    ID
    姓名
    邮箱
    性别
    操作 添加

employeeadd.html



    
        
        添加员工
    
    
        

添加员工

姓名:
邮箱:
性别:

EmployeeController.java

@GetMapping("/toAdd")
public String toAdd() {
    return "employeeadd";
}

@PostMapping("/employee")
public String addEmployee(Employee employee) {
    employeeDao.save(employee);
    return "redirect:/employeeController/employee";
}

效果

7、修改功能

employeelist.html

修改

employeeedit.html



    
        
        修改员工
    
    
        

修改员工

姓名:
邮箱:
性别:

EmployeeController.java

@GetMapping("/employee/{id}")
public String getEmployeeById(@PathVariable("id") Integer id, Model model) {
    Employee employee = employeeDao.getById(id);
    model.addAttribute("employee", employee);
    return "employeeedit";
}

@PutMapping("/employee")
public String editEmployee(Employee employee) {
    employeeDao.save(employee);
    return "redirect:/employeeController/employee";
}

效果

注意点

当前 SpringMVC 配置文件中存在这样几个配置








各个配置的作用

view-controller:简化页面跳转实现default-servlet-handler:开放静态资源访问annotation-driven:这里主要有 2 个作用

1)解决因配置视图控制器导致其他请求失效(404)的问题2)解决因配置静态资源访问导致其他请求失效(404)的问题

回忆:在 04-SpringMVC 视图 - 5、视图控制器 view-controller 中有介绍过“MVC 注解驱动”功能作用

annotation-driven需要与view-controller、default-servlet-handler配合使用

annotation-driven与view-controller的关系

当配置了view-controller而不配置annotation-driven,那么除了视图控制器中配置的请求,其他控制器方法将无法访问,即其他请求失效(404)当配置了view-controller也配置了annotation-driven,那么视图控制器中配置的请求和其他控制器方法都能够正常访问

annotation-driven与default-servlet-handler的关系

当配置了default-servlet-handler而不配置annotation-driven,那么所有请求都将交给DefaultServlet处理,DispatcherServlet将失效当配置了default-servlet-handler也配置了annotation-driven,那么所有请求将先交给DispatcherServlet处理,处理不了再交给DefaultServlet处理

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782215.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号