Spring MVC(三)域对象共享数据和SpringMVC的视图

域对象共享数据

使用ServletAPI向request域对象共享数据

@RequestMapping("/testRequestByServletAPI")
public String testRequestByServletAPI(HttpServletRequest request){
    request.setAttribute("testRequestScope","hello,servletAPI");
    return "success";
}

使用ModelAndView向request域对象共享数据

@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
    /**
     * ModelAndView有Model和View的功能
     * Model主要用于向请求域共享数据
     * View主要用于设置视图,实现页面跳转
    */
    ModelAndView mav = new ModelAndView();
    // 向请求域共享数据
    mav.addObject("testRequestScope","hello,ModelAndView");
    // 设置视图名称,实现页面跳转
    mav.setViewName("success");
    return mav;
}

使用Model向request域对象共享数据

@RequestMapping("/testModel")
public String testModel(Model model){
    model.addAttribute("testRequestScope","Hello,model");
    return "success";
}

使用map向request域对象共享数据

@RequestMapping("/testMap")
public String testMap(Map<String,Object> map){
    map.put("testRequestScope","hello,map");
    return "success";
}

使用ModelMap向request域对象共享数据

@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
    modelMap.addAttribute("testRequestScope","hello,modelMap");
    return "success";
}

Model、ModelMap、Map的关系

Model、ModelMap、Map类型的参数其实本质上都是BindingAwareModelMap类型。

向session域共享数据

@RequestMapping("/testSession")
public String testSession(HttpSession session){
    session.setAttribute("testSession","Hello,session");
    return "success";
}

向application域共享数据

@RequestMapping("/testApplication")
public String testApplication(HttpSession session){
    ServletContext application = session.getServletContext();
    application.setAttribute("testApplicationScope","hello,servletContext");
    return "success";
}

Spring MVC的视图

Spring MVC中的视图是View接口,视图的作用是渲染数据,将模型Model中的数据展示给用户。

Spring MVC视图的种类很多,默认有转发视图和重定向视图。

当工程引入jstl的依赖,转发视图会自动转换为jstlView。

若使用的视图技术为Thymeleaf,在Spring MVC的配置文件中配置了Thymeleaf的视图解析器,由此视图解析器解析之后所得到的是ThymeleafView。

ThymeleafView

当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置的视图解析器解析,视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转

@RequestMapping("/testThymeleafView")
public String testThymeleafView(){
    return "success";
}

转发视图

SpringMVC中默认的转发视图是InternalResourceView

SpringMVC中创建转发视图的情况:

当控制器方法中所设置的视图名称以:”forward:"为前缀时,创建InternalResourceView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"forward:"去掉,剩余部分作为最终路径通过转发的方式实现跳转。

@RequestMapping("/testForward")
public String testForward(){
    return "forward:/testThymeleafView";
}

重定向视图

Spring MVC中默认的重定向视图是RedirectView。

当控制器方法中所设置的视图名称以"redirect:"为前缀时,创建RedirectView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"redirect:"去掉,剩余部分作为最终路径通过重定向的方式实现跳转。

@RequestMapping("/testRedirect")
public String testRedirect(){
    return "redirect:/testThymeleafView";
}

需要注意的是,请求重定向不能访问WEB-INF下的资源,因此不能请求重定向到WEB-INF下的html页面,但是可以请求重定向至别的请求路径,通过该请求路径访问html页面,此时浏览器地址栏的地址是该请求路径的地址。

注:重定向视图在解析时,会先将redirect:前缀去掉,然后判断剩余部分是否以/开头,若是则会自动拼接上下文路径。

视图控制器view-controller

当控制器方法中,仅仅用来实现页面跳转,可以只需要设置视图名称,将处理器方法使用view-controller标签进行表示。

<!-- 
	path:设置处理的请求地址。
	view-name:设置请求地址所对应的视图名称
-->
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>

当Spring MVC中设置任何一个view-controller时,其他控制器中的请求映射将全部失败,此时需要在SpringMVC的核心配置文件中开启mvc注解驱动的标签:

<!--开启MVC的注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值