从0到1的Spring MVC过程-续集②

1. 前言

今天以整理知识点的角度来梳理下整个SpringMVC的过程。 以及过程中的注意点

2. 合适人群

  • 初学Spring MVC的人
  • 有基于Spring MVC短期做需求的人

3. 开始

3.1 @RequestMapping

RequestMapping一般指的是请求映射路径,其实就是我们所说的接口地址,其实这个注解可以修饰类 以及方法

在这里插入图片描述

  • 注意点:
    • 如果没有修饰类,只修饰了方法的话,方法名前的/ 可以任意添加
    • 但是如果类,方法两者都修饰了的话,方法名前面必须添加/

3.1.1 种类

public class TestRequestController {

    @RequestMapping("/testReq")
    public void testReq() {

    }

    @GetMapping("/testGet")
    public void testGet() {

    }

    @PostMapping("/postMapping")
    public void testPost() {

    }

    @DeleteMapping
    public void testDel() {

    }

    @PutMapping
    public void testPut() {

    }
}
  • 上述的代码中是大致的Mapping分类,只有第一个请求没有指定请求方式,其余的方法都指定了请求方式

3.1.2 其他

  • 除了可以修饰请求方式,其实还可以修饰params 以及headers
    • param:表示请求中必须包含名为param的参数
    • !param:表示请求中不能包含名为param的参数
    • param = value 表示请求中包含名为param的参数,但是值必须是value
    • param != value 表示请求中包含名为param的参数,但是值不能是value
    • {“param1”,“param2=value”},可以将对于多个参数的要求写入数组
@RequestMapping( value = "/***" ,params = {"username!=root","password"})
@RequestMapping( value = "/***",headers = {"Accept-Encoding=gzip, deflate"})

3.1.2 REST风格

那一般我们遇到restful风格的路径,怎么获取路径中的值呢,下面给大家列举两个实例

    @RequestMapping(value = "/test/rest01/{name}")
    public void testRest01(@PathVariable String name) {
        System.out.println(name);
    }

    @RequestMapping(value = "/test/rest02/{name}/{id}")
    public void testRest02(@PathVariable(value = "name") String pname, @PathVariable String id) {
        System.out.println(pname);
        System.out.println(id);
    }
  • 上述中的注解@PathVariable 目的就是将路径中内容映射到指定的参数中
  • 原则上参数名称必须相同,如果不同的话,需要使用value来指定

3.2 请求参数

3.2.1 参数注入的两种方式

@RestController
public class TestDataController {
    /*紧耦合方式参数注入
    * 使用传统的HttpServletRequest对象获取参数  javax.servlet
    * */
    @RequestMapping("/getParamByRequest.do")
    public String getParam1(HttpServletRequest req, HttpServletResponse resp){
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("username:"+username+"   password:"+password);
        return "getParamSuccess";
    }
    /*解耦合方式参数注入
    * HttpServletRequest对象获取参数 通过SpringMVC框架功能,自动转换参数
    * 处理单元参数列表中参数名必须和请求中的参数名一致
                                        * 如不一致,可以通过@RequestParma注解进行转换
    * */
    @RequestMapping("/getParamByArgName.do")
    public String getParam2(String username,@RequestParam("pwd") int password){
        System.out.println("username:"+username+"   password:"+password);
        return "getParamSuccess";
    }
}
  • 上述代码是两种可以获取参数的方式,第一种是紧耦合的方式,第二种是松耦合的方式。但是我们还是比较推荐第二种
  • 第二种的主要实现方式就是通过处理器适配器来映射同名字段的值。如果名称不能一致的话,必须用@RequestParam 来设置映射

3.2.2 日期类型转换的注意点

如果请求的字段是一个数字字符串,但是接受值是一个日期类型, 那么适配器就无法进行转换了,会报错。所以需要以下设置

在这里插入图片描述

在这里插入图片描述

3.3 响应处理

在这里插入图片描述

3.3.1 转发和重定向ServletAPI 实现

   @RequestMapping("demo1")
    public void testDemo1(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 请求转发
request.getRequestDispatcher("/forward.jsp").forward(request,response);
    }
   @RequestMapping("demo1")
    public void testDemo1(HttpServletRequest request, HttpServletResponse response) throws Exception {

    response.sendRedirect(request.getContextPath()+"/redirect.jsp");
    }

3.3.2 使用forward关键字完成响应

    /*
    * 返回字符串告诉DispatcherServlet跳转的路径
    * 在路径之前放上一个forward: 关键字,就是请求转发
    * 如果路径前的关键字是forward,那么可以省略不写
    * */
    @RequestMapping("demo2")
    public String testDemo2() throws Exception {
        //return "forward:/forwardPage.jsp";
        return "/forwardPage.jsp";
    }

3.3.3 使用redirect关键字完成响应

    /*
     * 返回字符串告诉DispatcherServlet跳转的路径
     * 在路径之前放上一个redirect: 关键字,就是重定向
     * 如果路径前的关键字是redirect,那么不可以省略
     * /表示当前项目下.这里不需要项目的上下文路径
     * */
    @RequestMapping("demo3")
    public String testDemo3() throws Exception {
        return "redirect:/redirectPage.jsp";
    }

4. 结束

通过上述的描述,需要积累的细节就这么多了。如果大家觉得不够的话,还可以在留言区跟我评论,我会及时添加,同时希望大家可以收藏,关注。 下一个章节会讲讲从0到1 搭建一个mvc项目。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值