@RequestMapping---多个路径匹配----窄化路径-----限定请求方法-----Controller方法的返回值

@RequestMapping

这个的作用是上面呢?????
作用就是设定访问路由,我们可以更具指定的访问路由访问我们制定的方法(Servlet) ,就相当于原生Servlet和前端相连的部分一样

~~
~~
~~
~~
~~
~~

多个路径匹配

意思就是我们的z注解@RequestMapping她不止能匹配一个路径还能匹配很多的路径,就是可以通过很多种匹配路径和来访问这个方法这个Servlet 写在方法上面的。
多个路径匹配格式:中间用逗号隔开

@RequestMapping(path = {"/test10","/test11"})

~~
~~
~~
~~
~~
~~

窄化路径

如果说我们呢所有的@RequestMapping都需要写全部的路由是不是就显得太麻烦了
如果我们有没有一种方法把相同的提取出来,那么我们就不用i写全部的路由,找到指定的路径
这时候我们就需要使用-----窄化路径方法----用到注解 @RequestMapping 不过这个注解是写在类上面的
写在类上面的@RequestMapping 就有窄化路径作用
窄化路径代码

@Controller
@RequestMapping("/role") // 窄化路径,写在Controller控制类上面
public class RoleController { // 一个pojo就是一个模块

写了之后我们后面方法上用到的@RequestMapping中的路由就能省略掉,因为把查询范围降低了
~~
~~
~~
~~
~~
~~

限定请求方法

我们知道表单提交过来的数据到Servlety里面都有两种方法来限接收
那么我们不使用Servlet的时候我们要如何来指定接受的方法呢???
我们这里使用到的方法就是method属性 ,类型是RequestMethod
一般来说都是使用GET或者POST其中之一的方法
这个是直接写在了我们写在方法上面的@RequestMapping里面的
限定此方法是使用的什么请求方法

 // 测试  POST方法
    @RequestMapping(path = "/testArrays.action",method = RequestMethod.POST)
    public ModelAndView testArrays2(String[] hobby) {


// 测试  GET方法
@RequestMapping(path = "/testArrays.action",method = RequestMethod.GET)
public ModelAndView testArrays(String[] hobby) {

~~
~~
~~
~~
~~
~~

Controller方法返回值

在SperingMVC中我们经常会使用到的三个返回值

  • ModelAndView
  • void空返回值
  • String字符串返回值

ModelAndView

返回数据和视图,内部封装数据的实现原理其实就是保存在了request域对象之中,可以使用addObject()来传输数据,使用setViewName()方法来指定视图的地址

// 构建获取所有的角色信息的服务
@RequestMapping("/role/listRoles.action")
public ModelAndView getAllRoles() {
    // 先构建ModelAndView 模型视图组件
    ModelAndView mav = new ModelAndView();
    // 获取service层中的结果值
    List<Role> roles = roleService.getAllRoles();
    // 把roles数据存进model模型组件中,并设定一个名字便于调用
    mav.addObject("list", roles);
    // 指定视图地址,我们数据要传到哪一个视图里面去
    mav.setViewName("/role/roleList");
    return mav;
}

void空返回值

如果我们的返回值是void,也就是说不需要指定视图的地址,无序跳转页面
虽然可以使用原生的方式HttpServletRequest (内部转发) HttpServletResponse(重定向)实现页面的跳转,
但是那样就没有用到SpringMVC所以一般来说是不建议使用原生的方式的.
void空返回值主要是用于Ajax,因为Ajax只需要返回数据不需要指定视图

response.getWriter(data) ----->ajax   success:function(data)  dataType:"json"

resp.setContentType("application/json;charset=UTF-8")

String字符串

如果方法返回值设定为String字符串类型,他主要的目的就是指定试图地址,就好像MavAndView返回值中得setViewName()方法来指定视图的地址.可以搭配水土解析器来使用(添加前后缀的),
代码演示

// String 字符串返回值 同时使用Model组件
@RequestMapping("/testStrView.action")
public String toView(Model model) {
    System.out.println("我加载进来了。。。。。。");
    List<Role> roles = roleService.getAllRoles();
    // 数据怎么传输  ModelAndView ×
    model.addAttribute("list", roles);
    return "/role/roleList";//这个就是返回的值,目的指定视图地址页面
}

~~
~~
~~
~~
~~
~~

原生的内部转发和原生的重定向

返回值是String的注意事项

  • 如果直接使用字符串,那么会被直接解析成视图,会自动添加视图解析器中的前后缀,跳转方式采用的是内部转发
  • 如果字符串前面有前缀,forward开头的,那么将不再加载试图解析器了,不再添加前后缀,跳转方式采用的内部转发,需要手动添加页面资源的路径
  • 如果字符串的前缀为redirect,那么将不再加载试图解析器了,不再添加前后缀,跳转的方式采用的是重定向,此时不用添加虚拟目录
  • 对于前缀为forward的字符串,可以 传输model中的数据,对于前缀为redirect,不可以传输model中的数据。
/**
         * 测试 SpringMV内置的前缀
         *  public static final String REDIRECT_URL_PREFIX = "redirect:";
         *  public static final String FORWARD_URL_PREFIX = "forward:";
         */

        @RequestMapping("/toAdminAndModel.action")
        public String toAdminAndModel(Model model) {

            List<Role> allRoles = roleServicel.getAllRoles();

            // 使用重定向 无法传输放进model中的数据  本质使用的是request对象
            model.addAttribute("message", "我是通过重定向方式访问该页面");

            return "redirect:/admin.jsp";
        }

        @RequestMapping("/toAddDepartmentView.action")
        public String toAddDepartmentView(Model model) {
            // 视图地址:/WEB-INF/view/department/addDepartment.jsp
            //return "forward:/WEB-INF/view/department/addDepartment.jsp";
            //return "redirect:/WEB-INF/view/department/addDepartment.jsp";
            model.addAttribute("message", "我是通过内部转发方式访问该页面");
            /**
             * 使用forward前缀 可以访问到WEB—INF下面的资源
             * 使用redirect前缀 不可以访问到WEB—INF下面的资源
             */
            return "forward:/WEB-INF/view/department/addDepartment.jsp";
        }

        // 内部转发是基于你的应用  虚拟目录是不需要添加的
        // 重定向是基于服务器的   虚拟目录是需要添加的  request.getContextPath();
        // 服务器中部署的应用是有虚拟目录的 名字为:/day71_SpringMVC
        @RequestMapping("/toAdmin2.action")
        public String toAdminView2(Model model) {
            // 此时我们想要跳转到admin.jsp页面中
            /**
             * 使用redirect前缀:无需添加虚拟目录
             */
            return "redirect:/admin.jsp";
        }

        @RequestMapping("/toAdmin.action")
        public String toAdminView(Model model) {
            // 此时我们想要跳转到admin.jsp页面中
            // 试图解析器此时不加载的
            return "forward:/admin.jsp";
        }
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值