Spring MVC响应处理

2022年05月15日 阅读数:6
这篇文章主要向大家介绍Spring MVC响应处理,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

你们好,我是郭尕~
在这里插入图片描述html

1. 内置视图解析器

Spring MVC 中的视图解析器负责解析视图,能够经过在配置文件中定义一个ViewResolver来配置视图解析器,配置以下:java

<!--默认的内置视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--设置前缀-->
    <property name="prefix" value="/WEB-INF/templates"/>
    <!--设置后缀-->
    <property name="suffix" value=".html"/>
</bean>

定义了一个id为viewResolver的视图解析器,并设置了前缀后缀,这样设置的好处就是简化方法中定义的路径。在访问视图解析器是就会自动的增长前缀和后缀。web

2. 使用原生servlet的对象传递数据

HttpServletRequest:经过request对象获取请求信息spring

控制器方法:session

//使用servlet传递数据
@RequestMapping("/testServlet")
public String testRequestByServletAPI(HttpServletRequest request){
   
   
    request.setAttribute("test","hello,servlet");
    return "success";
}

3. 使用ModelAndView对象传输数据

当使用modelAndView对象的时候,返回值的类型也必须是ModelAndView,能够将要跳转的页面设置成view的名称,来完成跳转的功能,同时数据也是放到request域中。app

使用方式:svg

  • 建立ModelAndView对象
  • 向模型对象中添加数据
  • 设置逻辑视图名
  • 返回ModelAndView对象

控制器方法:spa

 @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
   
   
        //建立ModelAndView对象
        ModelAndView mav = new ModelAndView();
        //处理模型数据,即向请求域request共享数据
        mav.addObject("test","Hello ModelAndView");
        //设置视图名称
        mav.setViewName("success");
        return mav;
    }

ModelAndView对象的做用:
将控制器方法中处理的结果数据传递到结果页面,也就是把在结果页面上须要的数据放到ModelAndView对象中便可,其做用相似于request对象的setAttribute方法的做用,用来在一个请求过程当中传递处理的数据。3d

4. 使用Model、Map、ModelMap传输数据

在SpringMVC中除了可使用原生servlet的对象传递数据以外,还有什么其余的方式呢?
能够在方法的参数上传入Model,ModelMap,Map类型,此时都可以将数据传送回页面。code

控制器方法:

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

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

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

若是方法的入参为Map,Model和ModelMap类型,Spring MVC会将隐含模型的引用传递给这些入参。在方法体内,开发者能够经过这个入参对象访问到模型中的全部数据,也能够向模型中添加新的属性数据,做用相似于request对象的setAttribute方法的做用: 用来在一个请求过程当中传递处理的数据。

三者之间的关系:

  • Map为原生的储存键值的对象,里面不少的方法可使用;
  • Model 只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操做和理解;
  • ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,一样的继承 LinkedMap 的方法和特性;
  • Map、Model、ModelMap的底层都是使用BindingAwareModelMap。
  • Map、Model和ModelMap返回的是地址路径
    在这里插入图片描述

5. 使用session传输数据

HttpSession:经过session对象获得session中存储的对象

控制器方法

//向session域共享数据
@RequestMapping("/testSession")
 public String testSession(HttpSession httpSession){
   
   
     httpSession.setAttribute("testSessionScope","hello session");
     return "success";
 }

 //向application域共享数据
 @RequestMapping("/testApplication")
 public String testApplication(HttpSession session){
   
   
     ServletContext servletContext = session.getServletContext();
     servletContext.setAttribute("testApplicationScope","hello application");
     return "success";
 }
上一篇: 初识SpringMVC框架
下一篇: @RequestMapping详解