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方法。
流程执行完毕!