ModelAndView 对象中既可以封装真实视图路径名,也可以封装视图路径的逻辑名:
1、ModelAndView 封装真实视图路径名:
Action 类中的代码:
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws Exception {
System.out.println("HelloAction::handleRequest()");
// ModelAndView 用于向视图封装数据和路径
ModelAndView modelAndView = new ModelAndView();
// 封装数据
modelAndView.addObject("message", "hello springmvc");
// 封装路径(真实视图路径名)
modelAndView.setViewName("/index.jsp");
return modelAndView;
}
springmvc.xml 中对视图解析器的配置:
<!-- 配置视图解析器
InternalResourceViewResolver:表示通过 ModelAndView 对象中封装的视图名找到真正的页面(默认配置,不写也行);
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
最终跳转到的视图为 webroot 下的 index.jsp 文件:
2、ModelAndView 封装视图路径的逻辑名:
Action 类中的代码:
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws Exception {
System.out.println("HelloAction::handleRequest()");
// ModelAndView 用于向视图封装数据和路径
ModelAndView modelAndView = new ModelAndView();
// 封装数据
modelAndView.addObject("message", "hello springmvc");
// 封装路径(视图路径的 逻辑名)
modelAndView.setViewName("success");
return modelAndView;
}
springmvc.xml 中对视图解析器的配置:
<!-- 配置视图解析器
InternalResourceViewResolver:表示通过 ModelAndView 对象中封装的视图名找到真正的页面;
如果 action 中封装的是 视图路径的逻辑名称,那么视图解析器就必须要配置;
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置视图路径的前缀 -->
<property name="prefix" value="/jsp/"/>
<!-- 配置视图路径的后缀 -->
<property name="suffix" value=".jsp"/>
<!-- 前缀 + 视图逻辑名 + 后缀 = 真实路径 -->
</bean>
最终跳转到的视图为 webroot 下的 jsp/success.jsp 文件: