zoukankan      html  css  js  c++  java
  • JavaEE——SpringMVC(1)--@RequestMapping

    1. @RequestMapping 除了修饰方法, 还可来修饰

    2. 1). 类定义处: 提供初步的请求映射信息。相对于 WEB 应用的根目录
        2). 方法处: 提供进一步的细分映射信息。 相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录

    常用: 使用 method 属性来指定请求方式

    @RequestMapping(value = "/testMethod", method = RequestMethod.POST)
    	public String testMethod() {
    		System.out.println("testMethod");
    		return SUCCESS;
    	}
    

      

    了解: 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式.

    @RequestMapping(value = "testParamsAndHeaders", params = { "username",
    			"age!=10" }, headers = { "Accept-Language=en-US,zh;q=0.8" })
    	public String testParamsAndHeaders() {
    		System.out.println("testParamsAndHeaders");
    		return SUCCESS;
    	}
    

      @PathVariable 可以来映射 URL 中的占位符到目标方法的参数中.

    @RequestMapping("/testPathVariable/{id}")
    	public String testPathVariable(@PathVariable("id") Integer id) {
    		System.out.println("testPathVariable: " + id);
    		return SUCCESS;
    	}
    

      

      支持 Ant 风格的 URL:
        – ?:匹配文件名中的一个字符
        – *:匹配文件名中的任意字符
        – **:** 匹配多层路径

    @RequestMapping("/testAntPath/*/abc")
    	public String testAntPath() {
    		System.out.println("testAntPath");
    		return SUCCESS;
    	}

    REST:即 Representational State Transfer。(资源)表现层状态转化
      HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:

        POST 用来新增资源:     /order POST

        PUT 用来更新资源:     /order/1 PUT     update?id=1

        GET 用来获取资源:     /order/1 GET     get?id=1

        DELETE 用来删除资源:   /order/1 DELETE   delete?id=1

      HiddenHttpMethodFilter:浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,

    Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求

    * 如何发送 PUT 请求和 DELETE 请求呢 ?

       1. 需要配置 HiddenHttpMethodFilter

       2. 需要发送 POST 请求
      3. 需要在发送 POST 请求时携带一个 name="_method" 的隐藏域, 值为 DELETE 或 PUT

    * 在 SpringMVC 的目标方法中如何得到 id 呢? 使用 @PathVariable 注解

    1.在xml文件中配置HiddenHttpMethodFilter

     <!--配置HiddenHttpMethodFilter-->
        <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>

    2.在jsp中设置请求的响应

    3.在.java中发出请求

    ①GET请求

    @RequestMapping(value="/testRest/{id}", method = RequestMethod.GET)
        public String testRest(@PathVariable Integer id){
            System.out.println("testRest GET " + id);
            return SUCCESS;
        }

      GET的响应

    <a href="HelloWorld/testRest/1">Test REST GET</a>
    

      ②POST请求

    @RequestMapping(value="/testRest", method = RequestMethod.POST)
        public String testRest(){
            System.out.println("testRest POST ");
            return SUCCESS;
        }

    POST的响应

    <form action="HelloWorld/testRest" method="post">
        <input type="submit" value="Test REST POST"/>
      </form>

    ③DELETE请求

    @RequestMapping(value="/testRest/{id}", method = RequestMethod.DELETE)
        public String testRestDelete(@PathVariable Integer id){
            System.out.println("testRest Delete " + id);
            return SUCCESS;
        }

    DELETE的响应

    <form action="HelloWorld/testRest/1" method="post">
        <input type="hidden" name="_method" value="DELETE"/>
        <input type="submit" value="Test REST DELETE"/>
      </form>

    ④PUT请求

    @RequestMapping(value="/testRest/{id}", method = RequestMethod.PUT)
        public String testRestPut(@PathVariable Integer id){
            System.out.println("testRest Put " + id);
            return SUCCESS;
        } 

    PUT的响应

    <form action="HelloWorld/testRest/1" method="post">
        <input type="hidden" name="_method" value="PUT"/>
        <input type="submit" value="Test REST PUT"/>
      </form>
    

      

    映射请求参数 & 请求参数
      @PathVariable、  @RequestParam、@RequestHeader
      @RequestParam 可以把请求参数传递给请求方法
      – value:参数名
      – required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常

        – defaultValue:请求参数的默认值

        @RequestMapping(value = "/testRequestParam")
        public String testRequestParam(
                @RequestParam(value="username") String username,
                @RequestParam(value="age") Integer age){
            System.out.println("testRequestParam username: " + username + "age:" + age);
            return SUCCESS;
        }
    

      注:这里的age若为int型,则应该如下指定

    @RequestParam(value = "age", required = false, defaultValue = "0") int age
    

      响应

    <a href="HelloWorld/testRequestParam?username=skye&age=12">test RequestParam</a>
    

      @RequestHeader   了解: 映射请求头信息 用法同 @RequestParam

    @RequestMapping("/testRequestHeader")
    	public String testRequestHeader(
    			@RequestHeader(value = "Accept-Language") String al) {
    		System.out.println("testRequestHeader, Accept-Language: " + al);
    		return SUCCESS;
    	}
    

      

    <a href="springmvc/testRequestHeader">Test RequestHeader</a>
    

      @CookieValue: 映射一个 Cookie 值. 属性同 @RequestParam

    @RequestMapping("/testCookieValue")
    	public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
    		System.out.println("testCookieValue: sessionId: " + sessionId);
    		return SUCCESS;
    	}
    

      

    <a href="springmvc/testCookieValue">Test CookieValue</a>
    

      ** Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性

        如:dept.deptId、dept.address.tel 等

    <form action="HelloWorld/testPojo" method="post">
        username: <input type="text" name="name"/>
        <br>
        password: <input type="password" name="password"/>
        <br>
        email: <input type="text" name="email"/>
        <br>
        age: <input type="text" name="age"/>
        <br>
        sex: <input type="text" name="sex"/>
        <br>
        province: <input type="text" name="address.province"/>
        <br>
        city: <input type="text" name="address.city"/>
        <br>
        <input type="submit" value="Submit"/>
      </form>
    

      响应   其中Address是User的一个属性

    @RequestMapping(value="/testPojo")
        public String testPojo(User user){
            System.out.println("testPojo User: " + user);
            return SUCCESS;
        }
    

      可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型

      * HttpServletRequest
      * HttpServletResponse
      * HttpSession
      * java.security.Principal
      * Locale 

      *InputStream 
      * OutputStream
      * Reader
      * Writer

    @RequestMapping("/testServletAPI")
    	public void testServletAPI(HttpServletRequest request,
    			HttpServletResponse response, Writer out) throws IOException {
    		System.out.println("testServletAPI, " + request + ", " + response);
    		out.write("hello springmvc");
    //		return SUCCESS;
    	}
    

      

    <a href="springmvc/testServletAPI">Test ServletAPI</a>
    

      

  • 相关阅读:
    JVM学习记录-垃圾收集器
    JVM学习记录-垃圾回收算法
    Java设计模式学习记录-策略模式
    【转】Java方向如何准备技术面试答案(汇总版)
    Java设计模式学习记录-代理模式
    JVM之ParNew收集器
    JVM之CMS收集器
    动态代理:cgib、jdk、java javassist
    JVM之Class文件结构
    JAVA之直接内存(DirectMemory)
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8313506.html
Copyright © 2011-2022 走看看