springMVC restful风格

RESTful简介

1.REST架构是一个抽象的概念,目前主要是基于HTTP协议实现,其目的是为了提高系统的可伸缩性,降低应用之间的耦合度,便于框架分布式处理程序。

2.REST主要对以下两方面进行了规范

-定位资源的URL风格,例如

 http://baidu.com/admin/1234

 http://baidu.com/admin/1234/10/11

-如何对资源操作

 采用HTTP协议规定的GET、POST、PUT、DELETE动作处理资源的增删该查操作

 
springMVC restful风格_第1张图片

3.什么是RESTful?

 -符合REST约束风格和原则的应用程序或设计就是RESTful.

 eg:  /emp/1  HTTP GET      查询id=1的emp

       /emp/1  HTTP DELETE    删除id=1的emp,实验中直接删除会报405错误,但是采用$.ajax异步删除就没问题

       /emp/1  HTTP PUT    更新emp

       /emp/add  HTTP POST     新增emp

4.Spring对RESTful的支持

- Spring MVC 对 RESTful应用提供了以下支持

- 利用@RequestMapping 指定要处理请求的URI模板和HTTP请求的动作类型

- 利用@PathVariable讲URI请求模板中的变量映射到处理方法参数上

- 利用Ajax,在客户端发出PUT、DELETE动作的请求

具体例子

浏览器 form 表单只支持 GET 与 POST 请求,(官网:www.fhadmin.org) 而DELETE、PUT 等 method 并不支 持,Spring3.0  添加了一个过滤器----HiddenHttpMethodFilter,

可以将这些请求转换 为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求。

在web.xml中配置

 
  
      HiddenHttpMethodFilter
      org.springframework.web.filter.HiddenHttpMethodFilter
  
  
      HiddenHttpMethodFilter
      /*
  

 

查询

先在index.jsp上放上两个超链接, 用于获取所有员工数据, 访问emps是通过get请求

  
    list all employees 

应控制器的方法如下,@RequestMapping 默认的请求方式是get, 所以method参数可以不用写

    @RequestMapping("/emps", method=RequestMethod.GET)
    public String list(Map map){
        map.put("employees", employeeDao.getAll());
        return "list";
    }

用map数据模型存储员工信息 然后带入到list.jsp页面上,在WEB-INF/view目录下创建list.jsp




<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>






    
没有员工信息
ID lastName email gender department edit delete
${emp.id } ${emp.lastName } ${emp.email } ${emp.gender == 0 ? 'Female' : 'Male' } ${emp.department.departmentName } Edit Delete

显示如下: 
这里写图片描述

删除

接着做删除,给list.jsp添加删除请求的地址: 
Delete

开始的时候说了restful风格 用来删除资源的请求是DELETE,DELETE请求是由POST改造成的, 而现在是GET请求,现在要做的是把这get请求改成post请求 ,然后在改造成delete请求, 操作方法是当点击删除链接时, 通过jquery提交一个我们从新生成的form表单,在这个form表单上添加隐藏域标识这个表单是由post改成delete请求,给web.xml中配置的HiddenHttpMethodFilter类处理。

在list.jsp中创建一个新的表单, action先不写, 等会通过jquery进行修改, 添加隐藏域, name和value的值必须正确填写(固定的)

        

js如下: 获取请求地址并提交

    $(function(){
        $(".delete").click(function(){
            var href = $(this).attr("href");
            $("form").attr("action", href).submit();
            return false;
        })
    })

对应控制器的方法如下, 指定method为DELETE, 这样删除的请求才会找到这个方法

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

新增

完成了删除在来写新增, 在index.jsp 添加进入新增界面的入口

  
    list all employees 
add new employees

请求emp对应的控制器方法;

    @RequestMapping(value="/emp", method=RequestMethod.GET)
    public String input(Map map){
        map.put("departments", departmentDao.getDepartments());
        map.put("employee", new Employee()); 
        return "input";
    }

接着在views目录下创建input.jsp, 这个界面作为新增和修改同时使用, 当id存在时, 表示是修改操作,添加隐藏域将表单标记为PUT。 当id不存时, 是新增操作,保持post提交



<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>




    
lastName:
email:
<% Map genders = new HashMap(); genders.put("1", "male"); genders.put("0", "female"); request.setAttribute("genders",genders); //必须放在域对象中,才可以被${}访问到 %> gender:
department:

emp对应的新增方法,post请求, 新增完成后重定向到员工列表

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

修改

完成了新增操作, 再到list.jsp中, 将编辑链接添加请求地址 

修改请求的方法, 如下, 将值带到input.jsp界面

    @RequestMapping(value="/emp/{id}", method=RequestMethod.GET)
    public String input(@PathVariable("id") Integer id ,Map map){
        map.put("departments", departmentDao.getDepartments());
        map.put("employee", employeeDao.get(id));
        return "input";
    }

此时进入了input.jsp页面, 其中的

            
                
                
            

条件成立, 当提交表单时, 将以PUT的方式请求 , 对应控制器方法如下

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

你可能感兴趣的:(springMVC)