SpringMVC視圖解析的流程,視圖解析器優先級,自定義視圖

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 效果

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章