SSM笔记-SpringMVC REST风格初识、RequestMapping/PathVariable/RequestParam/RequestHeader/CookieValue基本使用方法

1、REST初识
(1)REST是无状态的,即当前操作跟上一个操作的状态无关
(2)以url形式发生请求
(3)根据GET/POST/PUT/DELETE来区分操作
(4)SpringMVC通过使用@RequestMapping修饰方法的时候,对@RequestMapping的method属性值进行设置来实现第三点的效果
(5)注意事项
①GET:

1、get请求多用于查询操作
2、url后面带有参数,所以配置@RequestMapping时,需要带有请求参数的接收位置{str},如:@RequestMapping(value="/xx/{str}",method=RequestMethod.GET)
3、handler方法的入参中需要使用@PathVariable来接收参数值,如:public String testRestGET(@PathVariable String str)
4、其中@PathVariable 修饰的参数名必须跟@RequestMapping中value的{}里面的参数名一样

②POST:

1、post请求多用于提交操作
2、form中的method值为post
3、handler中的handler方法只需要配置@RequestMapping即可, 如:@RequestMapping(value="/xx",method=RequestMethod.POST)

③PUT:

1、put请求多用于更新操作
2、可以像GET请求一样url后面带参数(handler方法入参要用@PathVariable修饰),也可以像POST请求一样获取参数
3、html的form代码中需要使用隐藏域提交PUT标识, 如下:<input type="submit" name="submit" value="submit PUT">
4、form中的method值为post

④DELETE:

1、delete请求多用于删除操作
2、可以像GET请求一样url后面带参数(handler方法入参要用@PathVariable修饰),也可以像POST请求一样获取参数
3、html的form代码中需要使用隐藏域提交PUT标识, 如下:<input type="submit" name="submit" value="submit PUT">
4、form中的method值为post

2、@RequestParam,用于规定请求参数
(1)value:请求参数名
(2)required:参数是否必须传,默认true
(3)defaultValue:参数默认值
(4)注意:如果是数字,最好用Integer,因为如果用int的话,请求地址里面的参数值为空的时候会报错
(5)例子:id为非必传参数,初始值为0;name使用默认配置;number为非必传参数
public String testRequestParam(
@RequestParam(value="id",required=false,defaultValue="0") int id,
@RequestParam("name") String name,
@RequestParam(value="number",required=false) Integer number)

3、@RequestHeader,用于获取请求头
(1)在方法的参数里面使用@RequestHeader,设置header的参数名即可
(2)例子:使用@RequestHeader修饰获取Accept请求头中的数据
public String testRequestHeader(@RequestHeader(value="Accept") String header)

4、@CookieValue,用于获取cookie
(1)要保证@CookieValue里面对应key的值是存在 不然会报错
(2)例子:public String testCookieValue(@CookieValue(value="JSESSIONID") String cookieValue)

5、注意事项
(1)使用PUT/DELETE请求的时候需要到web.xml配置HiddenHttpMethodFilter

6、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>SpringMVC_2_REST</display-name>
  <filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-name>springDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

7、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 http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <!-- 配置自动扫描包 -->
    <context:component-scan base-package="com.test.springmvc"></context:component-scan>

    <!-- 配置视图解析器,把handler返回值解析为实际视图 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

8、Handler.java

package com.test.springmvc.handlers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@RequestMapping("/test")
@Controller
public class Handler {

    @RequestMapping(value="/testRest/{str}",method=RequestMethod.GET)
    public String testRestGET(@PathVariable String str){
        System.out.println("testRestGET:"+str);
        return "result";
    }
    @RequestMapping(value="/testRest",method=RequestMethod.POST)
    public String testRestPOST(){
        System.out.println("testRestPOST");
        return "result";
    }

    //通过设定@RequestMapping,测试规定请求的请求方法
    //请求的表单中需要用因参与传一个name="_method",值为DELETE或者PUT
    //DELETE和PUT的@PathVariable后面不用加括号,不然会报错“405 - Request method 'POST' not supported”
    //在结果页面的<%@ page %>里面要加上isErrorPage="true",不然会报错“JSPs only permit GET POST or HEAD”
    @RequestMapping(value="/testRest/{str}",method=RequestMethod.DELETE)
    public String testRestDELETE(@PathVariable String str){
        System.out.println("testRestDELETE:"+str);
        return "result";
    }
    @RequestMapping(value="/testRest/{str}",method=RequestMethod.PUT)
    public String testRestPUT(@PathVariable String str){
        System.out.println("testRestPUT:"+str);
        return "result";
    }

    //测试@RequestParam,用于规定请求参数
    //1、value:请求参数名
    //2、required:参数是否必须传,默认true
    //3、defaultValue:参数默认值
    //注意:如果是数字,最好用Integer,因为如果用int的话,请求地址里面的参数值为空的时候会报错
    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(value="id",required=false,defaultValue="0") int id,
                                   @RequestParam("name") String name,
                                   @RequestParam(value="number",required=false) Integer number){
        System.out.println("testRequestParam:"+"id="+id+",name:"+name+",number:"+number);
        return "result";
    }

    //测试@RequestHeader,用于获取请求头
    //在方法的参数里面使用@RequestHeader,设置header的参数名即可
    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value="Accept") String header){
        System.out.println("testRequestHeader:"+header);
        return "result";
    }

    //测试@CookieValue,用于获取cookie
    //要保证@CookieValue里面对应key的值是存在 不然会报错
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue(value="JSESSIONID") String cookieValue){
        System.out.println("testCookieValue cookievalue:"+cookieValue);
        return "result";
    }
}

9、index.jsp 发起请求的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href="test/testCookieValue">Test CookieValue</a>
    <br><br>
    <a href="test/testRequestHeader">Test RequestHeader</a>
    <br><br>
    <a href="test/testRequestParam?id=1&name=AA">Test RequestParam</a>
    <br><br>
    <a href="test/testRest/xxxx">Test Rest Get</a>
    <br><br>
    <form action="test/testRest" method="post">
        <input type="submit" name="submit" value="submit POST">
    </form>
    <br><br>
    <form action="test/testRest/xxxx" method="post">
        <input type="hidden" name="_method" value="DELETE">
        <input type="submit" name="submit" value="submit DELETE">
    </form>
    <br><br>
    <form action="test/testRest/xxxx" method="post">
        <input type="hidden" name="_method" value="PUT">
        <input type="submit" name="submit" value="submit PUT">
    </form>
    <br><br>
</body>
</html>

10、result.jsp 结果页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
result page
</body>
</html>

11、项目目录
这里写图片描述

12、demo
https://download.csdn.net/download/qq_22778717/10599044

猜你喜欢

转载自blog.csdn.net/qq_22778717/article/details/81608070