我试图了解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
。
buildView
、createView
和loadView
方法都是特定于ViewResolver
UrlBasedViewResolver
实现的内部方法。