在Spring MVC中,视图机制的核心流程如下(以Thymeleaf和JSP为例):
Thymeleaf作为视图时的流程
浏览器发送请求到Web服务器。
DispatcherServlet接收请求,并根据请求路径分发到对应的Controller。
Controller处理业务逻辑,返回一个逻辑视图名(如
"home"
)。ThymeleafViewResolver解析逻辑视图名:
根据配置(如前缀
classpath:/templates/
和后缀.html
),将逻辑视图名转换为物理路径(如/templates/home.html
)。创建ThymeleafView对象并返回。
ThymeleafView的
render()
方法执行:将模板(如
home.html
)与模型数据结合,生成HTML。HTML响应返回浏览器完成渲染。
JSP作为视图时的流程
浏览器发送请求到Web服务器。
DispatcherServlet接收请求,并根据请求路径分发到对应的Controller。
Controller处理业务逻辑,返回一个逻辑视图名(如
"home"
)。InternalResourceViewResolver解析逻辑视图名:
根据配置(如前缀
/WEB-INF/views/
和后缀.jsp
),将逻辑视图名转换为物理路径(如/WEB-INF/views/home.jsp
)。创建InternalResourceView对象并返回。
InternalResourceView的
render()
方法执行:将请求转发给JSP文件(如
home.jsp
),由Servlet容器(如Tomcat)编译JSP为Servlet,生成HTML。HTML响应返回浏览器完成渲染。
关键区别
组件 | Thymeleaf | JSP |
---|---|---|
视图解析器 | ThymeleafViewResolver |
InternalResourceViewResolver |
视图实现类 | ThymeleafView |
InternalResourceView |
渲染方式 | 模板引擎直接生成HTML | 请求转发到JSP,由Servlet容器处理 |
配置示例 | 前缀:classpath:/templates/ ,后缀:.html |
前缀:/WEB-INF/views/ ,后缀:.jsp |
依赖 | 需要Thymeleaf库 | 依赖Servlet容器(如Tomcat) |
两种技术均通过逻辑视图名→物理视图名→渲染的流程实现视图解析,但底层实现依赖不同的组件和机制。