2. 配置视图解析器

空~2022年9月15日
  • SpringMVC
大约 2 分钟

2. 配置视图解析器

对视图文件添加保护措施, 将视图文件添加到 WEB-INF 目录下, 使得用户无法直接访问

在不配置视图解析器的情况下可以使用过滤器进行过滤或者手动指定视图文件的路径

mv.setViewName("/WEB-INF/view/show.jsp");

mv.setViewName("/WEB-INF/view/other.jsp");

这种方式过于繁琐

  1. 在 springmvc.xml 中添加:
<!--声明 springmvc框架中的视图解析器, 帮助开发人员设置视图文件的路径-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <!--前缀:视图文件的路径-->
  <property name="prefix" value="/WEB-INF/view/"/>
  <!--后缀:视图文件的扩展名-->
  <property name="suffix" value=".jsp"/>
</bean>

修改 MyController.java:

@Controller
public class MyController {
    @RequestMapping(value = {"/some.do"})
    public ModelAndView doSome() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "欢迎使用springmvc做web开发");
        mv.addObject("fun", "执行的是doSome方法");
        // mv.setViewName("/show.jsp");
        // 当配置了视图解析器后,可以使用逻辑名称(文件名),指定视图
        // 框架会使用视图解析器的前缀 + 逻辑名称 + 后缀 组成完成路径, 这里就是字符连接操作
        /// WEB-INF/view/ + show + .jsp
        mv.setViewName("show");
        // 返回mv
        return mv;
    }
}

一个控制器(处理器)类可以有多个方法, 每个方法处理不同的请求, 一个方法也可以同时处理多个请求:

@Controller
public class MyController {
    // value的不同值均可以访问到该方法
    @RequestMapping(value = {"/some.do","/first.do"})
    public ModelAndView doSome(){
        ModelAndView mv  = new ModelAndView();
        mv.addObject("msg","欢迎使用springmvc做web开发");
        mv.addObject("fun","执行的是doSome方法");
        mv.setViewName("show");
        //返回mv
        return mv;
    }

    @RequestMapping(value = {"/other.do","/second.do"})
    public ModelAndView doOther(){
        ModelAndView mv  = new ModelAndView();
        mv.addObject("msg","====欢迎使用springmvc做web开发====");
        mv.addObject("fun","执行的是doOther方法");
        mv.setViewName("other");
        return mv;
    }
}

@RequestMapping放到类上面, 可以提取公共部分, 这个公共部分叫做模块名称

/**
 * @RequestMapping:
 *    value : 所有请求地址的公共部分,叫做模块名称
 *    位置: 放在类的上面
 */
@RequestMapping("/test")
@Controller
public class MyController {
    @RequestMapping(value = "/some.do")
    public ModelAndView doSome() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "欢迎使用springmvc做web开发");
        mv.addObject("fun", "执行的是doSome方法");
        mv.setViewName("show");
        // 返回mv
        return mv;
    }
}

有模块名称后需要修改请求访问的链接

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  <html>
    <head>
      <title>$Title$</title>
    </head>
    <body>
      <p>第一个springmvc项目</p>
      <p><a href="test/some.do">发起some.do请求</a></p>
    </body>
  </html>