视图解析器
什么是视图解析器
- SpringMVC视图解析器主要的作用是将 物理视图 转换成 逻辑视图
- 返回jsp return "/pages/list.jsp" 称为物理视图
- 把相同的前缀和后缀抽取出来 拼接在一起
配置视图解析器
WebMvcConfigurer配置类其实是Spring内部的一种配置方式 采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制
- 实现WebMvcConfigurer接口
- 重写configureViewResolvers方法
- registry.jsp(“前缀”,“后缀”);配置视图前缀和后缀
@Configuration @ComponentScan(basePackages="com.czxy.mvc.controller") @EnableWebMvc public class MvcConfiguration implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/pages/",".jsp"); } }
Controller的使用
返回逻辑视图名
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/selectAll2") public String selectAll2() { return "list"; } }
绕过视图解析器
如果需要绕过视图解析器 有两种方法 使用请求转发或重定向
@Controller @RequestMapping("/user") public class UserController { /** * 最终访问路径 /user/selectAll.action * @return */ @RequestMapping("/selectAll") public String selectAll() { return "forward:/pages/list.jsp"; } }
方法返回值
默认返回值ModelAndView
- Controller功能的方法 默认返回值是ModelAndView
@Controller @RequestMapping("/demo03") public class Demo03BookController { @RequestMapping("/list") public ModelAndView list() { //1 创建对象 ModelAndView modelAndView = new ModelAndView(); //2 设置视图 modelAndView.setViewName("book"); //之前 return "book"; //3 设置模型数据 key-value modelAndView.addObject("username","jack"); return modelAndView; } }
返回字符串
- 返回字符串 有两种情况 一种是 请求转发 一种是 重定向
请求转发
public String list() { return "forward:物理视图"; //jsp路径 }
重定向
public String list() { return "redirect:物理视图"; //jsp路径 }
返回void
场景1:返回void 没有其他操作
- Controller返回void
@RequestMapping("/void1") public void void1() { System.out.println("void1 执行了 "); }
场景2:请求调度器
- 使用servlet请求调度器完成 请求转发/请求包含 操作
@RequestMapping("/void2") public void void2(HttpServletRequest request , HttpServletResponse response) throws Exception { request.setAttribute("username","void2"); // 请求转发 request.getRequestDispatcher("/WEB-INF/pages/book.jsp").forward(request, response); // 请求包含 //request.getRequestDispatcher("/WEB-INF/pages/book.jsp").include(request, response); }
场景3:response响应数据
- response以流的方式 向浏览器响应数据
@RequestMapping("/void3") public void void3(HttpServletRequest request , HttpServletResponse response) throws Exception { response.getWriter().print("void3"); }
场景4:响应JSON
- 响应JSON数据的时候 必须加@ResponseBody注解 标明响应JSO
@RequestMapping("/void4") @ResponseBody public void void4() throws Exception { System.out.println("哈哈"); }