ModelAndView
设置ModelAndView,根据View的名称和视图解析器,跳转到指定的页面。
页面:{视图解析器前缀} + 视图名称 + {视图解析器后缀}
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp" />
</bean>
对应的Controller
package indi.stitch.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 只要实现了Controller接口的类,说明就是一个控制器了
public class ControllerTest1 implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg", "ControllerTest1");
mv.setViewName("test");
return mv;
}
}
ServletAPI
通过设置ServletAPI,不需要视图解析器。
1、通过HttpServletResponse进行输出
2、通过HttpServletResponse实现重定向
3、通过HttpServletResponse实现转发
package indi.stitch.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@Controller
public class ModelTest1 {
@RequestMapping("/m1/t1")
public String test(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
System.out.println(session.getId());
return "test";
}
@RequestMapping("/m1/t2")
public void test2(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 重定向
response.sendRedirect("/index.jsp");
}
@RequestMapping("/m1/t3")
public void test3(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 转发
request.setAttribute("msg", "/m1/t3");
request.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(request, response);
}
}
SpringMVC
使用SpringMVC来实现转发和重定向,无需视图解析器。
测试前,需要将视图解析器注掉。
package indi.stitch.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ModelTest1 {
@RequestMapping("/m1/t1")
public String test(Model model) {
model.addAttribute("msg", "ModelTest1");
return "/WEB-INF/jsp/test.jsp";
}
@RequestMapping("/m1/t2")
public String test2(Model model) {
// 重定向
return "forward:/index.jsp";
}
@RequestMapping("/m1/t3")
public String test3(Model model) {
// 转发
return "redirect:/index.jsp";
}
}
使用SpringMVC实现重定向和转发,有视图解析器
重定向不需要视图解析器,本身就是重新访问一个新地址, 需要注意路径问题,可以重定向到另一个请求实现。
package indi.stitch.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ModelTest1 {
@RequestMapping("/m1/t1")
public String test(Model model) {
return "test";
}
@RequestMapping("/m1/t2")
public String test2(Model model) {
// 重定向
return "redirect:/index.jsp";
}
}