如何将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处理器会尝试查找对应的静态资源并返回给客户端。
