13.SpringMVC请求转发与重定向

13. SpringMVC请求转发与重定向

1、概述

SpringMVC默认响应时使用请求转发方式,返回值可以是ModelAndView,String

控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。
• 添加模型数据: addObject(String attributeName, Object attributeValue)
• 设置视图: void setViewName(String viewName)

如果返回String,可以将数据封装到一个Model对象中,直返返回字符串格式的视图名即可.

2、标签解释

@Controller

Spring 配置中指定了自动扫描的basepackage后,Spring会扫描这些包以及子包中的使用了@Controller标识的类,然后将类加入到Spring IOC容器中,注入依赖。需要注意的是这个bean在spring IOC容器中是单例的,每次请求到来的时候,使用的是同一个bean对象。

@RequestMapping

它的作用就是与请求相匹配,如果匹配上了,所修饰的方法才会被执行。这里我们只需要关注两个属性:

value :请求的路径,这个路径相对于应用的上下文,它是path的别名。类型是一个String[] ,也就是说它可以匹配多个请求路径

method: 请求的方法。我们知道HTTP协议的请求方式有 GET和POST.

或者使用@GetMapping, @PostMapping

当前的请求只有与@RequestMapping上指定的属性都匹配的时候,才会执行它标注的方法。下面分析几个例子,假设应用的上下文路径为 “http://localhost:9090/”

@RequestMapping("/users") 请求的路径为 “http://localhost:9090/users” ,请求方式没有限制,即可以是GET也可以是POST,还能是其它的几个

@RequestMapping(value="/users", method= RequestMethod.GET) 请求路径为"http://localhost:9090/users", 请求方式只能是GET。

@RequestMapping(value="/users", method={ RequestMethod.GET , RequestMethod.POST}) 请求路径为“http://localhost:9090/users”, 请求方式只能是GET或者POST。

@RequestMapping({"/home","/index","/",""}) 可以匹配的路径有4个,“http://localhost:9090/home” , “http://localhost:9090/index” , “http://localhost:9090/” , “http://localhost:9090” ,而请求方式没有限制

3、请求转发

@RequestMapping

value/path 指定请求方法的映射地址 可以为多个。
method 指定哪些请求方式可以访问此方法 ,如果没有定义,get/post均可访问。

    @RequestMapping(value = "/first", method = RequestMethod.GET)
    public ModelAndView findUserList() {
        //创建ModelAndView对象,设置视图名(jsp的地址),数据,视图名就是请求转发的地址
        ModelAndView mv = new ModelAndView("user/userList");
        mv.addObject("userName", "jim");
        return mv;
    }

4、获取请求头部信息

(1)@RequestHeader(“User-Agent”) String userAgent
把请求头中参数值 绑定给 指定的变量

(2)@RequestParam(“account”) String acc
把请求中(表单)中的参数 绑定给指定的变量

    @RequestMapping(value = "/second")
    public ModelAndView second(@RequestHeader("User-Agent") String agent){
        //创建ModelAndView对象,设置视图名(jsp的地址),数据
        ModelAndView mv = new ModelAndView("user/userList");
        System.out.println(agent);
        return mv;
    }

5、接收请求参数

5.1 方法一:请求参数与形参对应

    @RequestMapping(value = "/third")
    public ModelAndView third(@RequestHeader("userName") String userName,@RequestHeader("passWord") String passWord){
        //创建ModelAndView对象,设置视图名(jsp的地址),数据
        ModelAndView mv = new ModelAndView("user/userList");
        System.out.println(userName);
        System.out.println(passWord);
        return mv;
    }

5.2 方法二:省略请求参数

可以把形参设置和请求参数一致,这样SpringMVC就会自动匹配。

    /*
    获取参数方式1:
    @RequestHeader("userName") String userName
    请求参数与形参对应
     */
    @RequestMapping(value = "/four")
    public ModelAndView four(String userName,String passWord){
        //创建ModelAndView对象,设置视图名(jsp的地址),数据
        ModelAndView mv = new ModelAndView("user/userList");
        System.out.println(userName);
        System.out.println(passWord);
        return mv;
    }

5.3 方法三:利用对象自动封装

可以把形参设置为接收对象,但是对象的属性名应该和请求参数一致,这样SpringMVC就会自动匹配。

    @RequestMapping(value = "/four")
    public ModelAndView four(User user){
        //创建ModelAndView对象,设置视图名(jsp的地址),数据
        ModelAndView mv = new ModelAndView("user/userList");
        System.out.println(user.getUserName());
        System.out.println(user.getPassword());
        return mv;
    }

6、获取servlet 内置对象

可以直接将servlet内置对象作为形参创建,SpringMVC会自动匹配到内置对象进行赋值。

    @RequestMapping(value = "/userSave")
    public ModelAndView userSave(User user, HttpSession session){

        System.out.println(user.getUserName());
        System.out.println(user.getPassword());
        System.out.println(user.getRegTime());
        session.setAttribute("userInfo", user);
        ModelAndView mv = new ModelAndView("user/save");
        return mv;
    }

7、重定向

控制器方法返回字符串类型的值会被当成逻辑视图名处理,如果返回的字符串中带 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:将 redirect: 当成指示符,其后的字符串作为 URL 来处理

return “redirect:/page/student/update.jsp”;

    @RequestMapping(value="/save")
    public String saveUser(User user, String mark, HttpServletRequest req){
        //调用数据访问层
        //userService.saveUser(user);
        //把数据封装到HttpServletRequest对象中
        req.setAttribute("userName","jim");
        req.setAttribute("userAge",23);
        System.out.println("12311");
        //return "redirect:/test.jsp";
        //字符串以redirect开头,进行重定向处理,不能访问web-inf下面的jsp
        return "redirect:/index.jsp";
    }
展开阅读全文

Windows版YOLOv4目标检测实战:训练自己的数据集

04-26
©️2020 CSDN 皮肤主题: 1024 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值