1. 请求转发和重定向简介
参考该链接第9点
2. forward
返回下一个资源路径,请求转发固定格式:return "forward:资源路径"如 return "forward:/b" 此时为一次请求返回逻辑视图名称 返回逻辑视图不指定方式时都会默认使用请求转发
index.html
<body><a th:href="@{/a}">A页面</a> <br><a th:href="@{/b}">B页面</a> <br><a th:href="@{/test}">test</a>
</body>
Controller层
@Controller
public class IndexController {@RequestMapping(value = {"/"})public String toIndex() {return "index";}
@RequestMapping("/a")public String toA() {return "forward:/b";}
@RequestMapping("/b")public String toB() {return "b";}
3. redirect
返回要响应重定向的资源路径,响应重定向固定格式:return "redirect:资源路径" 重定向如果要跨域要写全路径如:return "redirect:http:localhost:8080/springmvc/a/b/c" 此时让客户端重新发送请求请求
@RequestMapping("/a")public String toA() {return "redirect:/b";}
4. 简化配置
<!--该代码表示访问/test资源时自动向test逻辑视图进行跳转--><mvc:view-controller path="/test" view-name="test"></mvc:view-controller><!--当配置了上面的代码所有@Controller注解会失效,需要配置以下信息开启注解--><mvc:annotation-driven></mvc:annotation-driven>
<!--如果只是单纯进行页面跳转没有任何业务逻辑处理,只需要配置以下信息即可 以上代码效果等同于 @RequestMapping("/test") public String toTest() {return "test"; } -->
5. 访问静态资源
关于静态资源的访问:假设我们在webapp目录下创建static目录,下面存放img.png图片资源我们可以通过地址栏http://localhost:8080/springmvc/static/img.png进行访问么?答案是不行,因为会走DispatcherServlet,之后会从控制器中走相应方法最后通过逻辑视图寻找对应资源而此时在控制器中找不到对应逻辑视图,即资源不存在会报404错误
方案一
在springmvc.xml文件中配置 <mvc:default-servlet-handler></mvc:default-servlet-handler> <mvc:annotation-driven></mvc:annotation-driven> 即手动开启DefaultServlet 当访问http://localhost:8080/springmvc/static/img.png会默认先走DispatcherServlet, 当报404错误时会走DefaultServlet,然后DefaultServlet会帮你定位到静态资源 DefaultServlet默认是关闭的,需要手动开启
<!--该代码表示访问/test资源时自动向test逻辑视图进行跳转--><mvc:view-controller path="/test" view-name="test"></mvc:view-controller><!--当配置了上面的代码所有@Controller注解会失效,需要配置以下信息开启注解--><mvc:annotation-driven></mvc:annotation-driven>
方案二
使用 mvc:resources 标签配置静态资源 <mvc:annotation-driven></mvc:annotation-driven> <mvc:resources mapping="/static/**" location="/static/" /> 即static路径下的任意资源都可以访问 注意:要想使用 `<mvc:resources>` 配置,必须开启注解驱动 `<mvc:annotation-driven />`
<!--开启默认Servlet处理--><mvc:default-servlet-handler></mvc:default-servlet-handler><!-- 配置静态资源处理 --><mvc:resources mapping="/static/**" location="/static/" />
视图原理描述
假设我们SpringMVC中使用了Thymeleaf作为视图。
第一步:浏览器发送请求给web服务器
第二步:Spring MVC中的DispatcherServlet接收到请求
第三步:DispatcherServlet根据请求路径分发到对应的Controller
第四步:DispatcherServlet调用Controller的方法
第五步:Controller的方法处理业务并返回一个`逻辑视图名`给DispatcherServlet
第六步:DispatcherServlet调用ThymeleafViewResolver的resolveViewName方法,将`逻辑视图名`转换为`物理视图名`,并创建ThymeleafView对象返回给DispatcherServlet
第七步:DispatcherServlet再调用ThymeleafView的render方法,render方法将模板语言转换为HTML代码,响应给浏览器,完成最终的渲染。
常见视图
* InternalResourceView:内部资源视图(Spring MVC框架内置的,专门为`JSP模板语法`准备的)
* RedirectView:重定向视图(Spring MVC框架内置的,用来完成重定向效果)
* ThymeleafView:Thymeleaf视图(第三方的,为`Thymeleaf模板语法`准备的)
* FreeMarkerView:FreeMarker视图(第三方的,为`FreeMarker模板语法`准备的)
* VelocityView:Velocity视图(第三方的,为`Velocity模板语法`准备的)
* PDFView:PDF视图(第三方的,专门用来生成pdf文件视图)
* ExcelView:Excel视图(第三方的,专门用来生成excel文件视图)
* ......