了解春季 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>

解析器的 javadoc 所做的是说我们有三种方法返回 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)我就假设创建视图实例后,我们调用此方法将标记呈现给客户端。但我不确定它是否真的以这种方式工作。

一般来说,我的问题是什么方法采用 jsp -page 并返回要呈现给客户端的View实例。

一般来说,我的问题是什么方法采用 jsp 页面并将要呈现的 View 实例返回给客户端。

UrlBasedViewResolver 的情况下,这将是createView方法,对于 JSP 将返回一个InternalResourceView

就视图解析框架而言,ViewResolver接口是入口点,并且有一个方法resolveViewName它采用视图名称(在您的示例中为"hello")并返回一个View对象,然后调用render

buildViewcreateViewloadView方法都是特定于ViewResolver UrlBasedViewResolver实现的内部方法。

最新更新