hualinux springMVC 5.4:@RequestMapping 映射请求

目录

3.1 @RequestMapping 映射请求

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

3.3 params和headers

3.4 Ant风格

3.5 @PathVariable 映射 URL 绑定的占位符

3.6 REST风格

3.6.1 配置web.xml

3.6.2 Rest风格的URL


@RequestMapping 映射请求,直白点来说就是你输入一个路径后,系统会找这个路径对应的类或函数处理这个路径请求。

那么怎么查找这个路径对应的函数呢?就需要先绑定,这个@RequestMapping就是绑定的功能。

文章代码是基于《hualinux springMVC 5.3:建立学习的springMVC项目》所建立的项目基础上进行操行的

 

3.1 @RequestMapping 映射请求

在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,修改代码如下:

package com.hualinux.srpingmvc.handers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


//@Controller表示要使用模板,如果用@RestController则表示直接把数据返回给浏览器
@Controller
public class SpringMVCTest {
    /*
     * 1. @RequestMapping除了修饰方法,还可以修饰类
     * 2.
     * 1) 类定义处:提供初步的请求映射信息。相对于WEB应用的根目录
     * 2) 方法处:提供进一步的细分映射信息。
     *   相对于类定义的URL。若类定义处未标注 @RequestMapping,则方法处标记的URL相对于WEB应用的根目录
     * */
    @RequestMapping("/springmvc/testRequestMapping")
    public String testRequestMapping(){
        System.out.println("testRequestMapping");
        return "ok";
    }
    
}

web/index.jsp页面的<body></body>标签中添加如下代码

<p><a href="springmvc/testRequestMapping">testRequestMapping</a></p>

运行tomcat,idea会自动打开主页点,下面链接

 

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

在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:

    /*
     * 使用method属性来指定请求方式
     * */
    @RequestMapping(value = "springmvc/testMethod",method = RequestMethod.POST)
    public String testMethod(){
        System.out.println("testMethod");
        return "ok";
    }

web/index.jsp页面的<body></body>标签中添加如下代码:

<p>
<form action="springmvc/testMethod" method="post">
  <input type="submit" value="testMethod">
</form>
</p>

运行tomcat,idea会自动打开主页点,下面链接

 

3.3 params和headers

在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:


    /**了解:可以使用params和headers来更加精确的映射请求。params和headers 支持简单的表达式串
     *@return
     */
    @RequestMapping(value="testParamsAndHeaders",
            params={" username", "age 1=10"}, headers={"Accept-Language=en-Us ,zh;q=0.8"})
    public String testParamsAndHeaders(){
        System.out.println("testParamsAndHeaders");
        return "ok";
    }

web/index.jsp页面的<body></body>标签中添加如下代码:

<p><a href="springmvc/testParamsAndHeaders?username='hua'&age=20">testParamsAndHeaders?username='hua'&age=20</a></p>

 运行tomcat,idea会自动打开主页点,下面链接

上面如果age=10呢

<p><a href="springmvc/testParamsAndHeaders?username='hua'&age=10">testParamsAndHeaders?username='hua'&age=10</a></p>

重启tomcat,运行效果如下

 

3.4 Ant风格

 使用@RequestMapping映射请求

●Ant风格资源地址支持3种匹配符:
- ? :匹配文件名中的一个字符
- * :匹配文件名中的任意字符
- ** : **匹配多层路径

●@RequestMapping还支持Ant风格的URL :
- /user/*/createUser: 匹配/user/aaa/createUser.
/user/bbb/createUser 等URL
- /user/**/createUser: 匹配/user/createUser.
/user/aaa/bbb/createUser等 URL
- /user/createUser??: 匹配/user/createUseraa、
/user/createUserbb 等URL

 在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:

   //注:只要符合 /springmvc/testAntPath/*/abc格式就行  
   @RequestMapping("/springmvc/testAntPath/*/abc")
   public String testAntPath(){
        System.out.println("testAntPath");
        return "ok";
    }

 

web/index.jsp页面的<body></body>标签中添加如下代码:

<p><a href="springmvc/testAntPath/hua/abc">testAntPath</a></p>

运行tomcat,idea会自动打开主页点,下面链接

 

3.5 @PathVariable 映射 URL 绑定的占位符

springMVC很灵活,它可以获取URL地址中的值,然后当作变量来输出,这里要使用@PathVariable注解,故名思意,就是路径变量的意思,通常的话,@PathVariable要使用,是一定要与@RequestMapping一起使用的,下面给出代码示例:

在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:

    /*
     * @PathVariable可以来映射URL中的占位符到目标方法的参数中。
     * 正国为这样才支持REST风格的URL
     * */
    @RequestMapping("/springmvc/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") Integer id ) {
        System.out.println("testPathVariable:"+id);
        return "ok";
    }

web/index.jsp页面的<body></body>标签中添加如下代码:

<p><a href="springmvc/testPathVariable/1">testPathVariable</a></p>


运行tomcat,idea会自动打开主页点,下面链接

 

3.6 REST风格

3.6.1 配置web.xml

通常的话,表单有着post,与get提交方式,而rest风格的URL,则有着get,post,put,delete这四种请求方式,但是浏览器却是只支持getpost,所以我们可以使用springMVC,把它进行转换,我们要利用org.springframework.web.filter.HiddenHttpMethodFilter这个类,这是一个过滤器,我们首先要在web.xml中配置它,请配置在第一个位置,不然的话,可能会先进入其它的过滤器,配置代码如下:

web/WEB-INF/web.xml添加如下配置

    <!-- 配置 org.springframework.web.filter.HiddenHttpMethodFilter 可以把Post转为DELETE或PUT-->
    <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>

3.6.2 Rest风格的URL

/**
Rest风格的URL.
*以CRUD为例:
*新增: /order POST
*修改: /order/1 PUT       update?id=1
*获取: /order/1 GET       get?id=1
*删除: /order/1 DELETE    delete?id=1
*
*如何发送PUT 请求和DELETE 请求呢?
* 1.需要配置HiddenHttpMethodF ilter
* 2.需要发送 POST 请求
* 3.需要在发送POST请求时携带一个name="_ method" 的隐藏域,值为 DELETE 或 PUT
*
*在SpringMVC的目标方法中如何得到id呢?
*使用 @PathVariable 注解
*/
 

 在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:

 /* REST PUT方法,相当于数据库的更新*/
    @RequestMapping(value = "/springmvc/testRest/{id}",method = RequestMethod.PUT)
    @ResponseBody
    public String testRestPut(@PathVariable("id") Integer id){
        System.out.println("testRest PUT:"+id);
        return "ok";
    }

    /* REST delete方法,相当于数据库的删除*/
    @RequestMapping(value = "/springmvc/testRest/{id}",method = RequestMethod.DELETE)
    @ResponseBody
    public String testRestDelete(@PathVariable("id") Integer id){
        System.out.println("testRest DELETE:"+id);
        return "ok";
    }


    /* REST POST方法,相当于数据库的新增*/
    @RequestMapping(value = "/springmvc/testRest",method = RequestMethod.POST)
    public String testRest(){
        System.out.println("testRest POST");
        return "ok";
    }

    /* REST GET方法,相当于数据库的查询*/
    @RequestMapping(value = "/springmvc/testRest/{id}",method = RequestMethod.GET)
    public String testRest(@PathVariable("id") Integer id){
        System.out.println("testRest GET:"+id);
        return "ok";
    }

注:

  1. 在DELETET和PUT中要加入@ResponseBody,否则会报“JSPs only permit GET POST or HEAD”错误

如果你确实是要返回数据,比如json数据,在@RequestMapping标注下面标注添加@ResponseBody

  1. 在DELETET和PUT中用隐藏按钮,其中 name="_method"名字不能修改,因为是固定的 ,

value值可以是DELETE/PUT等

web/index.jsp页面的<body></body>标签中添加如下代码:

<p>
<form action="springmvc/testRest/1" method="post">
  <input type="hidden" name="_method" value="PUT" />
  <input type="submit" value="TestRest PUT"/>
</form>

<form action="springmvc/testRest/1" method="post">
  <input type="hidden" name="_method" value="DELETE"/>
  <input type="submit" value="TestRest DELETE"/>
</form>


<form action="springmvc/testRest" method="post">
  <input type="submit" value="testRest POST">
</form>
</p>
<p><a href="springmvc/testRest/1">test REST Get</a></p>

运行tomcat,idea会自动打开主页点,下面链接,分别点它们即可

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值