设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面。
页面 : {视图解析器前缀} + viewName +{视图解析器后缀}
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
bean>
对应的controller类
public class ControllerTest1 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
// 返回一个模型视图对象
ModelAndView mv = new ModelAndView();
mv.addObject("msg","ControllerTest1");
mv.setViewName("test");
return mv;
}
}
使用这种原生的方式,我们就需要将ControllerTest1进行注册。
<bean id="/test" class="com.xxc.controller.ControllerTest1"/>
同时使用这种方式关于注解的一些配置就没必要使用了。
通过设置ServletAPI , 不需要视图解析器。
@Controller
public class ControllerTest2 {
@RequestMapping("/result/t1")
public void test1(HttpServletRequest req, HttpServletResponse rsp)
throws IOException {
// 通过HttpServletResponse进行输出
rsp.getWriter().println("Hello,Spring BY servlet API");
}
@RequestMapping("/result/t2")
public void test2(HttpServletRequest req, HttpServletResponse rsp)
throws IOException {
// 通过HttpServletResponse实现重定向
rsp.sendRedirect("/index.jsp");
}
@RequestMapping("/result/t3")
public void test3(HttpServletRequest req, HttpServletResponse rsp)
throws Exception {
// 通过HttpServletResponse实现转发
req.setAttribute("msg","/result/t3");
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,rsp);
}
}
这种方法没必要使用视图解析器,但是要注意视图要写全路径,也不需要注册bean,但是要开启注解驱动。如下。
<context:component-scan base-package="com.xxc.controller"/>
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
通过SpringMVC来实现转发和重定向 - 无需视图解析器;要注意视图要写全路径,需要开启注解驱动。
@Controller
public class ControllerTest3 {
@RequestMapping("/rsm/t1")
public String test1(Model model){
//转发
model.addAttribute("msg","/rsm/t1");
return "/WEB-INF/jsp/test.jsp"; // 默认就是转发
}
@RequestMapping("/rsm/t2")
public String test2(Model model){
//转发二
model.addAttribute("msg","/rsm/t2");
return "forward:/WEB-INF/jsp/test.jsp"; // 使用forward实现转发
}
@RequestMapping("/rsm/t3")
public String test3(Model model){
//重定向
model.addAttribute("msg","/rsm/t3");
return "redirect:/index.jsp";
}
}
通过SpringMVC来实现转发和重定向 - 有视图解析器;
重定向 , 不需要视图解析器 , 本质就是重新请求一个新地方嘛 , 所以注意路径问题。
可以重定向到另外一个请求实现
@Controller
public class ControllerTest4 {
@RequestMapping("/rsm2/t1")
public String test1(Model model){
model.addAttribute("msg","/rsm2/t1");
//转发
return "test";
}
@RequestMapping("/rsm2/t2")
public String test2(Model model){
model.addAttribute("msg","/rsm2/t2");
//重定向
return "redirect:/index.jsp";
//return "redirect:hello.do"; //hello.do为另一个请求/
}
}
对于以上的几种方式,我们需要重点理解SpringMVC有视图解析器的部分。视图解析器,就是将我们试图资源的前缀和后缀提取出来,不用在代码里写,跳转时通过视图解析器自动添加。相反没有试图解析器的时候,我们要写试图的全路径名。
转发和重定向:
转发是当前路径不变。
重定向会改变当前路径,跳转到新的路径上。
备注:index.jsp为web应用默认的。test.jsp为
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
${msg}