原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處
之前講過@RequestBod注解,該注解主要是返回給前端一個json格式的字符串。如果我們不加這個注解則會包一個404的錯,404的錯主要就是說頁面找不到或者方法找不到,很顯然,在這應該是頁面找不到的意思,怎么找到這個頁面呢?這就是今天要講的頁面(也就是MVC中的V)的渲染。
還是在之前的工程,我們需要做點改動:
在spring-servlet.xml文件中加入以下內容:
<!--開啟對靜態資源的訪問 -->
<mvc:default-servlet-handler/>
<!-- 對轉向頁面的路徑解析。prefix:前綴, suffix:后綴 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/pages/" p:suffix=".html" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
我是主頁
</body>
</html>
然后新建個controller:PageControlerP,內容如下:
@Controller
@RequestMapping("/page")
public class PageController {
@RequestMapping("/index")
public String index(){
return "index";
}
}
然后啟動項目訪問/page/index路徑:
看到的結果是成功訪問了這個html頁面,說明訪問成功了。接下來就可以自己給html修改樣式修改內容什么的了。
這么做的原理是什么呢?
首先,這個html文件是靜態資源,比如css,js,圖片等等都是靜態資源文件,一般放在WEB-INF下,我們從外部訪問WEB-INF是沒有權限的,畢竟這里放了配置文件。但是這部分文件我們需要訪問,于是我們使用<mvc:default-servlet-handler/>開啟了訪問權限,這是spring3.0.4提供的,在這之前更麻煩。開啟了之后我們就需要渲染頁面了。
頁面一般是由org.springframework.web.servlet.view.InternalResourceViewResolver這個Resolver來渲染的,p:prefix參數是用來設置靜態資源的文件, p:suffix參數用來設置靜態資源的后綴,當我們普通的Controller返回一個String類型字符串的時候,InternalResourceViewResolver就會自動根據這個字符串,路徑和后綴幫我們拼接一個地址(/WEB-INF/pages/字符串.html)然后去判斷,如果存在就交給前端進行訪問,如果不存在就返回404.當然,我們也可以將路徑定義到別的地方,比如什么/WEB-INF/view,甚至是resource下都行,前提是定義好之后文件必須建在這,后綴也是一樣,可以是靜態頁面html,還可以是動態頁面jsp等等。動態頁面只不過是后端執行之后生成的html給前端進行訪問,原理是一樣,對數據的操作和servlet差不多。
另外源碼還是更新在github上上次的代碼中,https://github.com/YaoguaiDa/SpringMVC_Demo.git