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