1.視圖解析的流程
從上面的流程圖可以看出,視圖解析的過程主要有兩個類在起主要作用,View視圖類,以及ViewResolver視圖解析類
1.2. 視圖接口以及其實現類
雖然視圖接口有許多的實現類,但是究竟返回那種視圖還是由視圖解析類來決定的
1.3. 視圖解析器接口及其實現類
請求內容爲web項目目錄下的內容(如Jsp頁面)時使用InternalResourceViewResolver
實現自定義視圖時,使用BeanNameViewResolver
2. 視圖解析器優先級
在進行視圖解析時,我們發現會遍歷視圖解析器列表,前面的視圖解析器先被用來解析視圖,如果視圖不爲空,那麼後面的解析器就不在被使用,所以配製視圖解析器時有個order參數,order越小,越先被遍歷。其中InternalResourceViewResolver的order默認爲最大值,所以它是最後一個被使用的解析器
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="10"></property>
</bean>
3.自定義視圖
3.1 新建HelloView類並實現接口View,並加入Spring容器
package com.njupt.web;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View;
@Component
public class HelloView implements View{
@Override
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
throws Exception {
//通過response對返回的頁面屬性進行設置
// response.setCharacterEncoding(charset);
response.setContentType("text/html");
response.getWriter().print("Hello View");
}
}
3.2 配製視圖解析器BeanNameViewResolver
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="10"></property>
</bean>
3.3 增加註解@RequestMapping
package com.njupt.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Distributor {
@RequestMapping(value="/success")
public String toSuccess() {
//注意一定要與HelloView.java這個類名相對應
return "helloView";
}
}
前端頁面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="success">success</a>
</body>
</html>
3.4 效果