自定义视图执行过程

1、自定义一个实现View接口的类,添加@Component注解,将其放入SpringIOC容器

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.");
	}
}
	

2、配置视图解析器,使用视图名字解析视图

  <!-- 配置BeanName视图解析器:使用视图名字解析视图 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
	<!-- order属性用于设定视图解析器的优先级,order值越小优先级越高,InternalResourceViewResolver优先级为Integer所能表示的最大值 -->
	<property name="order" value="0"></property>
</bean>

这里: order属性用于设定视图解析器的优先级,order值越小优先级越高,InternalResourceViewResolver优先级为Integer所能表示的最大值

 

Controller定义Handler方法:返回自定义视图的名字

@Controller
public class UserInfoController {
	@RequestMapping("/userinfo/toView.do")
	public String toView() {		
		return "toView";	
	}
}

 

当一个请求进入 DispatcherServle ,进入该类中的 doDispath:

这里的mv已经保存了视图的名字和返回的数据。

执行 processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException),进入该方法:

扫描二维码关注公众号,回复: 9658662 查看本文章

检查是否有异常,并进入  render(mv, request, response)方法。

进行视图解释。

进入该方法。

这里我们进入debug 模式运行。可以看到viewResolvers里面有两个视图,其中一个就是我们自定义的视图。因为我们给该视图设置了优先级0所以BeanNameViewResolver 在第一个,优先从容器中得到这个。

然后找到viewResolver.resolveViewName(viewName, locale)类实现的接口

这里根据视图名直接从IOC容器中获取视图对象

执行完毕后,返回到上面的 render方法执行 view.render(mv.getModelInternal(), request, response);该render方法执行的我们自定义视图中的render方法。

 

流程执行完毕!

发布了91 篇原创文章 · 获赞 8 · 访问量 4743

猜你喜欢

转载自blog.csdn.net/niuxikun/article/details/104550159