?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文件視圖)
* ......?