如何将SpringMVC视图组件与RESTful风格结合应用?

摘要:常见的视图组件 Spring MVC支持的常见视图包括:InternalResourceView:内部资源视图(Spring MVC内置的,专门为jsp模板语法准备的)、RedirectView(重定向视图(Spring MVC内置的,用来
常见的视图组件 Spring MVC支持的常见视图包括:InternalResourceView:内部资源视图(Spring MVC内置的,专门为jsp模板语法准备的)、RedirectView(重定向视图(Spring MVC内置的,用来完成重定向效果)、ThymeleafView(第三方,专门为ThymeleafView模板语法准备的)...... 实现视图机制的核心类和核心接口 DispatcherServlet:前端控制器 负责接收前端请求 根据请求路径找到对应的处理器方法 执行处理器方法 最终返回ModelAndView对象 ViewResolver:视图解析器接口 ​ 这个接口的作用是将逻辑视图名称转换为物理视图名称。并最终返回一个view接口对象。 View:视图接口 ​ 这个接口负责将模板语法的字符串转换成HTML代码,并且将HTML代码响应给浏览器进行渲染。 转发与重定向的区别 转发 重定向 一次请求,浏览器地址栏不会发生变化 两次请求,浏览器地址栏会发生变化 转发代码:request.getRequestDispatcher("/index").forward(request,response); 重定向代码:response.sendRedirect("/webapp/index"); 服务器内部资源跳转,由服务器控制,不可实现跨域访问 可以完成内部资源跳转,也可以完成跨域访问 可以访问WEB-INF目录下受保护的资源 无法访问WEB-INF目录下受保护的资源。(因为重定向相当于浏览器重新发送了一次请求,浏览器发送的请求无法访问被保护的资源) springMVC实现转发forward @RequestMapping("/a") public String toA(){ // 采用springmvc的视图转发机制,跳转到/b // 格式:forward:下一个资源的路径,这里的b不是逻辑视图名称,是一个资源路径 return "forward:/b"; } @RequestMapping("/b") public String toB(){ return "b"; } springMVC实现重定向 @RequestMapping("/a") public String toA(){ // 采用springmvc的视图重定向机制,跳转到/b // 格式:redirect:下一个资源的路径 // 如果要实现跨域,需要写全路径,比如:https://baidu.com return "redirect:b"; } @RequestMapping("/b") public String toB(){ return "b"; } mvc:view-controller 这个配置用于将某个请求映射到特定的视图上,即指定某一个URL请求到一个视图资源的映射。使得这个视图资源可以被访问。相当于一个独立的处理程序,不需要编写Controller,只需要指定URL和视图名称就可以了。 一般用来配置首页、错误页等。 在springmvc-servlet.xml文件中添加如下配置: <!-- 配置视图控制器,必须开启注解驱动才能生效--> <!-- path="/ok"表示访问路径,view-name="ok"表示视图名称。 访问http://localhost:8080/springmvc-04/ok时, 会直接返回ok.html页面,不需要经过控制器方法的处理--> <mvc:view-controller path="/ok" view-name="ok" /> <!-- 开启注解驱动,支持@RequestMapping等注解--> <mvc:annotation-driven /> 访问静态资源 使用默认Servlet处理静态资源 在springmvc-servlet.xml文件中添加如下配置: <!-- 开启默认的servlet处理器,允许静态资源(如CSS、JavaScript、图片等)通过默认的servlet进行处理,而不是被Spring MVC拦截。 这对于提供静态资源非常重要,否则这些资源可能无法正确加载。 当请求的URL没有匹配到任何控制器方法时,默认的servlet处理器会尝试查找对应的静态资源并返回给客户端。
阅读全文