SpringMVC(三):转发和重定型
1.如果使用配置xml的方式,我们把页面名称封装到ModeAndView中就可以实现跳转
ModelAndView mv = new ModelAndView(); mv.addObject("msg","ControllerTest1"); mv.setViewName("test");
2.如果使用注解的方式,我们直接返回要页面的名称,就可以实现跳转。
@Controller public class ControllerTest2 { @RequestMapping("/hello2") public String test1(Model model){ model.addAttribute("msg","ControllerTest2"); return "test"; } }
前两种都是视图解析器帮我们做了页面路径解析:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
3.也可以使用ServletAPI
-
SpringMVC的Dispatcher Servlet就是继承了Servlet
-
虽然使用SpringMVC的过程中我们没有取得Request和Response对象,但是其实也可以使用
@Controller public class ModelTest { @RequestMapping("/m1") public String test1(HttpServletRequest req, HttpServletResponse resp){ HttpSession session = req.getSession(); System.out.println(session.getId()); return "test"; } }
测试:
-
我们一样获得了session的id。
-
我们可以和Servlet一样使用Response实现重定向和Request的转发。这种情况下不需要配置视图解析器。但是不推荐使用。
@Controller public class ResultGo { @RequestMapping("/result/t1") public void test1(HttpServletRequest req, HttpServletResponse rsp) throws IOException { rsp.getWriter().println("Hello,Spring BY servlet API"); } @RequestMapping("/result/t2") public void test2(HttpServletRequest req, HttpServletResponse rsp) throws IOException { rsp.sendRedirect("/index.jsp"); } @RequestMapping("/result/t3") public void test3(HttpServletRequest req, HttpServletResponse rsp) throws Exception { //转发 req.setAttribute("msg","/result/t3"); req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,rsp); }
4.通过SpringMVC实现--不使用视图解析器
-
直接return全限定名--转发
//直接return全限定名 @Controller public class ModelTest { @RequestMapping("/m1") public String test1(Model model){ model.addAttribute("msg","ModelTest1"); return "/WEB-INF/jsp/test.jsp"; //也可以用这种写法 //return "forward:/WEB-INF/jsp/test.jsp"; } }
测试结果:可以看出URI没有变化,是转发。
-
-
这个方法在配置视图解析器的时候也能使用,也就是说配置了视图解析器如果要重定向,就是用这个写法。
@Controller public class ModelTest { @RequestMapping("/m1") public String test1(Model model){ model.addAttribute("msg","ModelTest1"); return "redirect:/index.jsp"; } }