[Spring]配置多个视图解析器

Spring MVC视图解析配置
本文介绍如何在Spring MVC中配置多个视图解析器,并通过自定义HTML视图解析器实现对HTML页面的支持。首先展示了如何在spring.xml中配置两个不同类型的视图解析器:HTML和JSP。接着详细说明了自定义的HTMLResourceView类如何重写checkResource方法来检查HTML资源的存在性。

第一步:spring.xml配置多个试图解析器

<beans:bean id="htmlViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="viewClass" value="test.jia.com.view.HtmlResourceView"/>  
        <beans:property name="order" value="0" />
        <beans:property name="prefix" value="/WEB-INF/pages/" />
        <beans:property name="suffix" value=".html" />
        <beans:property name="contentType" value="text/html;charset=UTF-8"/>
    </beans:bean>

    <beans:bean id="jspViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="order" value="1" />  
        <beans:property name="prefix" value="/WEB-INF/pages/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

第二步:重写视图解析器

import java.io.File;
import java.util.Locale;
import org.springframework.web.servlet.view.InternalResourceView;

/**
 * Spring视图解析器
 * @author Jia
 *
 */
public class HtmlResourceView extends InternalResourceView {

    @Override  
    public boolean checkResource(Locale locale) {  
        File file = new File(this.getServletContext().getRealPath("/") + getUrl());  
        return file.exists();
    } 

}

注:web.xml中,DispatcherServlet要配置

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>
Spring MVC 中,视图解析器(ViewResolver)负责将控制器返回的逻辑视图名(如 "home")解析为具体的物理视图(如 "/WEB-INF/views/home.jsp")[^2]。Spring MVC 提供了多种视图解析器,支持不同的模板引擎和渲染方式,其中最常用的是 `InternalResourceViewResolver`,用于解析 JSP 页面[^4]。 ### 配置视图解析器Spring MVC 的配置文件(如 `springMVC.xml`)中,可以通过 `<bean>` 标签定义视图解析器。以下是一个基于 JSP 的典型配置示例: ```xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 上述配置定义了一个 `InternalResourceViewResolver`,它将控制器返回的逻辑视图名自动添加前缀 `/WEB-INF/views/` 和后缀 `.jsp`,从而定位到具体的 JSP 文件。例如,控制器返回 `"home"`,最终解析为 `/WEB-INF/views/home.jsp`。 ### 多视图解析器配置 如果需要使用多个视图解析器(如同时支持 JSP 和 Thymeleaf),可以通过 `order` 属性指定优先级。Spring MVC 会按照 `order` 值从小到大依次尝试解析视图名称: ```xml <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> <property name="order" value="1" /> </bean> <bean id="thymeleafViewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"> <property name="templateEngine" ref="templateEngine" /> <property name="order" value="2" /> </bean> ``` 在这个配置中,`InternalResourceViewResolver` 优先级更高(`order=1`),Spring MVC 会首先尝试使用 JSP 解析器进行匹配,如果失败再使用 Thymeleaf 解析器[^1]。 ### 控制器返回逻辑视图名 在控制器中,只需返回逻辑视图名字符串,Spring MVC 会自动通过配置视图解析器完成解析: ```java @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; // 逻辑视图名 } } ``` 上述方法返回 `"home"` 后,`DispatcherServlet` 会委托视图解析器将该名称解析为实际的视图对象并渲染响应[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值