java中springMVC视图解析器的工作原理
时间: 2023-06-09 08:02:47 浏览: 52
Spring MVC 中的视图解析器是用于将控制器处理请求后的数据转换成客户端可识别并显示的 HTML 或其他格式的工具。它的工作原理是在控制器返回一个字符串类型的视图名称之后,这个视图名称会被传递给视图解析器。视图解析器会基于约定的规则和配置信息来查找和加载真正的视图,并将其渲染成客户端可识别的响应。具体来说,Spring MVC 的视图解析器把视图名称根据一定的规则来解析成对应的视图对象,比如 JSP 视图或者自定义的视图,然后将数据渲染到视图上并最终将结果返回给客户端。
相关问题
springmvc配置Thymeleaf视图解析器的java类
要配置Spring MVC中的Thymeleaf视图解析器,您可以创建一个Java类,并使用以下代码进行配置:
```java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
@Configuration
@EnableWebMvc
public class ThymeleafConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
return engine;
}
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML");
return resolver;
}
}
```
上述代码中,我们使用`@Configuration`注解将该类标记为配置类。`@EnableWebMvc`注解启用Spring MVC的基本配置。
`viewResolver()`方法创建一个Thymeleaf视图解析器,并设置了模板引擎为`templateEngine()`方法返回的SpringTemplateEngine。
`templateEngine()`方法创建一个SpringTemplateEngine,并设置了模板解析器为`templateResolver()`方法返回的ServletContextTemplateResolver。
`templateResolver()`方法创建一个ServletContextTemplateResolver,并设置了视图前缀、后缀和模板模式。
请注意,上述配置假设您的Thymeleaf模板文件位于`/WEB-INF/views/`目录下,并以`.html`作为文件扩展名。您可以根据您的实际项目结构和需求进行相应的更改。
在springmvc.xml中编写Thymeleaf视图解析器
1. 首先,在Spring配置文件中添加Thymeleaf依赖:
```xml
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
```
2. 然后,在Spring MVC配置文件中配置Thymeleaf视图解析器:
```xml
<!-- 配置Thymeleaf视图解析器 -->
<bean id="templateResolver"
class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML" />
</bean>
<bean id="templateEngine"
class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
<property name="enableSpringELCompiler" value="true" />
</bean>
<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<property name="characterEncoding" value="UTF-8" />
</bean>
```
在上面的配置中,我们定义了一个Thymeleaf的模板解析器(templateResolver),用于解析模板文件。我们指定了模板文件的前缀和后缀,以及模板文件的类型(HTML)。接着,我们创建一个Thymeleaf的模板引擎(templateEngine),并将模板解析器注入到该引擎中。最后,我们定义了一个Thymeleaf的视图解析器(ThymeleafViewResolver),并将模板引擎注入到该解析器中。
3. 在Controller中返回Thymeleaf视图:
```java
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("name", "Thymeleaf");
return "hello";
}
```
在上面的Controller中,我们使用Model对象将一个名为“name”的属性值设置为“Thymeleaf”,并将视图名设置为“hello”。由于我们在Spring MVC配置文件中配置了Thymeleaf视图解析器,因此,Spring会自动将该视图名解析成“/WEB-INF/views/hello.html”文件,并将模板文件中的变量替换成具体的值,最终生成HTML页面。
4. 在Thymeleaf模板文件中使用变量:
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello Thymeleaf</title>
</head>
<body>
<h1>Hello, <span th:text="${name}"></span>!</h1>
</body>
</html>
```
在上面的模板文件中,我们使用了Thymeleaf的语法,在页面中输出了变量“name”的值。在Thymeleaf中,我们可以使用“${变量名}”的语法来输出变量的值。