了解 spring mvc 中的视图分辨率

Understanding view resolution in spring mvc

我正在尝试了解 spring mvc 如何生成标记。例如,考虑简单的控制器:

@Controller
public class HelloController{

    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

然后说,我们正在应用 dispatcher-servlet.xml 中定义的 UrlBasedViewResolver,如下所示:

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="prefix" value="/WEB-INF/views/">
    <property name="suffix" value="jsp">
</bean>

什么the javadoc of the resolver does is says that we have three methods that return the instance of the View界面。 第一个是

protected AbstractUrlBasedView buildView(String viewName),

第二个是

protected View createView(String viewName, Locale locale)

第三个是

protected View loadView(String viewName, Locale locale)

只要 View 接口有方法 render(Map<String,?> model, HttpServletRequest request, HttpServletResponse response) 我会假设一旦创建了 View 的实例,我们就会调用此方法将标记呈现给客户端。但我不确定它是否真的这样工作。

一般来说,我的问题是什么方法需要将 jsp 页面和 return View 的实例呈现给客户端。

In general, my question is what method takes the a jsp-page and return the instance of View to be rendered to the client.

UrlBasedViewResolver 的情况下,这将是 createView 方法,对于 JSP 将 return 和 InternalResourceView.

就视图解析框架而言,ViewResolver 接口是入口点,并且有一个方法 resolveViewName 获取视图名称("hello" 在你的例子中") 和 returns 一个 View 对象,然后对其调用 render

buildViewcreateViewloadView 方法都是内部特定于 ViewResolverUrlBasedViewResolver 实现。