自定义视图的使用
1.编辑view类
package com.jd.view;
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 ToView implements View{
public String getContentType() {
return "text/html";
}
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.getWriter().print("Hello World.");
}
}
注意:这里面我们定义的视图需要添加@Component注解,将自定义视图放入springmvc容器中
2、配置视图解析器,使用视图名字解析视图
<!-- 配置BeanName视图解析器:使用视图名字解析视图 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<!-- order属性用于设定视图解析器的优先级,order值越小优先级越高,InternalResourceViewResolver优先级为Integer所能表示的最大值 -->
<property name="order" value="0"></property>
</bean>
3.jsp中放入一个请求连接
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href = "./view/view.do">链接</a>
</body>
</html>
4.controller控制层
package com.jd.computer;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloViewController {
@RequestMapping("/view/view.do")
public String view() {
return "toView";
}
}
注意:controller中return的对象toView的首字母要小写,springmvc容器会帮助我们寻找对应的方法去实例化
5.运行结果
自定义视图的运行原理
1.发送一个请求之后,会执行DispatcherServlet中的doService方法。
2.进而执行doService中的doDispath方法。
3.在doDispatch方法中,会执行下面代码
4.接下来执行processDispatchResult方法,
5.进入该方法后,第一个if此时exception是null,所以肯定会执行else,此时mv会被赋值,必定不为null,所以hi执行render方法
6.进入render方法后就会引用我们对视图对象,然后引用视图的名字
7.进入resolveViewName方法,遍历此时的视图,自带的视图是InternalViewResolve和自定义视图ToView,此时我们在appication.xml配置中将其render设置为0,数值越小优先级越大,所以会优先使用我们自己的视图。
8.然后会获取view名字,再次执行render方法然后会进行请求转发,会执行ToView中render方法中,然后返回到页面上