3、SpringMVC:响应处理

231 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

0、前言

以下内容皆未在项目中应用,前后端分离的情况下,一个String走天下。

1、响应处理

1.1 使用默认内置视图解析器(ViewResolver)

<!--默认视图解析器 -  配上前缀和后缀  简化逻辑视图名称-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" name="viewResolver" >
    <property name="prefix" value="/WEB-INF/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>

为防止浏览器对 jsp文件的直接访问,通常会把jsp文件放置在WEB-INF目录下。此时,添加如上配置,就可以访问WEB-INF目录下的所有jsp文件了。

1.2 使用视图控制器 (view-controller)

如果我们有些请求只是想跳转页面,不需要来后台处理什么逻辑,我们无法在Action中写 一个空方法来跳转,直接在中配置一个如下的视图跳转控制器即可(不经过Action,直接跳 转页面)

<mvc:view‐controller path="/" view‐name="index" />

1.3 使用Model,Map,ModelMapModelAndView等传输数据到页面

服务器接受用户的请求并响应,在SpringMVC中除了可以使用原生servlet的对象传递数据之外,还可以在方法的参数上传入Model,ModelMap,Map类型,此时都能够将数据传送回页面

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Map;

@Controller
public class OutputController {
    @RequestMapping("model")
    public String output1(Model model){
        model.addAttribute("msg","hello,model");
        return "output";
    }
    
    @RequestMapping("modelMap")
    public String output2(ModelMap model){
        model.addAttribute("msg","hello,modelMap");
        return "output";
    }
    
    @RequestMapping("map")
    public String output1(Map map){
        map.put("msg","hello,map");
        return "output";
    }
}

可以看到,这三种方式大相径庭,那么它们之间有什么关系呢,一图观之。绕来绕去,无非还是Map。

image.png 除此之外,还可以使用ModelAndView对象传输数据到页面。 当使用modelAndView对象的时候,返回值的类型也是此对象,可以将要跳转的页面设置成view的名称,来完成跳转的功能,同时数据也是放到request作用中

@Controller
public class OutputController {
    @RequestMapping("mv")
    public ModelAndView mv(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("output");
        mv.addObject("msg","hello.modelAndView");
        return mv;//返回mv对象,其实就是返回 output.jsp
    }
}

其余还可以通过session向页面传输数据,通过@ModelAttribute获取请求中的数据。只因目前项目皆不使用,这里仅做了解。