springmvc的InternalResourceViewResolver 配置

1、视图解析InternalResourceViewResolver

org.springframework.web.servlet.view.InternalResourceViewResolver

InternalResourceViewResolver类的作用:

InternalResourceViewResolver会将视图名解析为JSP文件。另外,如果在你的JSP页面中使用了JSP标准标签库 (JavaServer Pages Standard Tag Library,JSTL)的 话,InternalResourceViewResolver能够将视图名解析为JstlView形式的JSP文件,从而将JSTL本地化和资源bundle变量暴露给JSTL的格式化(formatting)和信息(message)标签。
Spring提供了两个JSP标签库,一个用于表单到模型的绑定,另一个提供了通用的工具类特性。
考虑一个简单的场景,假设逻辑视图名为home。通用的实践是将JSP文件放到Web应用的WEB-INF目录下,防止对它的直接访问。如果我们将所有的JSP文件都放在“/WEB-INF/views/”目录下, 并且home页的JSP名为home.jsp,那么我们可以确定物理视图的路径 就是逻辑视图名home再加上“/WEB-INF/views/”前缀和“.jsp”后缀。如下图所示:
在这里插入图片描述
2、参数

prefix 这个表示目录 例:

<property name="prefix" value="/WEB-INF/JSP/"/>

suffix 这个表示后缀 例:

<property name="suffix" value=".jsp"/>

order 这个表示视图解析器的执行顺序,按值从小到大的顺序执行 例:

<property name="order" value="1"/>

3、单格式的视图解析(jsp)

<bean id="viewResolver"
   class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="prefix" value="/WEB-INF/page/" />
   <property name="suffix" value=".jsp" />
   <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</bean>

4、多格式的视图解析(jsp)

<!-- 配置Html试图解析器 -->
<bean id="htmlViewResolver"
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="order" value="0" />
   <property name="viewClass"
           value="com.jack.common.spring.HtmlResourceView" />
   <property name="prefix" value="/WEB-INF/html/" />
   <property name="suffix" value=".html"></property>
   <property name="contentType" value="text/html;charset=UTF-8"></property>
</bean>

<!-- Jsp视图解析器 -->
<bean id="jspViewResolver"
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="order" value="1" />
   <!-- 如果配置的有html视图解析器,不能用jstl的那个 -->
   <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> -->
   <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" />
   <property name="prefix" value="/WEB-INF/page/" />
   <property name="suffix" value=".jsp"></property>
</bean>

可以发现htmlViewResolver视图解析器的viewClass值有些奇怪,这是因为我们需要新建一个html的解析器,该解析器要继承 InternalResourceView 并且重写 checkResource方法,代码:

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

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

为什么?

由于UrlBasedViewResolver(InternalResourceViewResolver的父类)的loadView方法,代码:

protected View loadView(String viewName, Locale locale) throws Exception {
    AbstractUrlBasedView view = this.buildView(viewName);
    View result = this.applyLifecycleMethods(viewName, view);
    return view.checkResource(locale)?result:null;
}

public boolean checkResource(Locale locale) throws Exception {
	 return true;
}

发现这个方法,AbstractUrlBasedView.checkResource()是永远返回true的,也就是如果找不到,也会返回一个result,但是这个result是找不到的。

为此需要重写AbstractUrlBasedView这个类,更改checkResource方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring MVC的配置主要包括以下几个方面: 1. 配置DispatcherServlet:在web.xml文件中配置DispatcherServlet,作为前端控制器。可以指定DispatcherServlet的映射路径和加载Spring MVC配置文件的位置。 2. 配置Spring MVC的上下文:创建一个Spring的配置文件(通常命名为[servlet名]-servlet.xml),在配置文件中进行相关的配置,如扫描包、视图解析器、处理器映射等。 3. 配置视图解析器:在Spring MVC配置文件中配置视图解析器,用于将逻辑视图名称解析为具体的视图对象。可以使用InternalResourceViewResolver来解析JSP视图,或者使用其他自定义的视图解析器。 4. 配置处理器映射:在Spring MVC配置文件中配置处理器映射,将请求映射到具体的处理器类。可以使用DefaultAnnotationHandlerMapping或RequestMappingHandlerMapping进行注解驱动的处理器映射。 5. 配置处理器适配器:在Spring MVC配置文件中配置处理器适配器,将请求分派给具体的处理器进行处理。可以使用AnnotationMethodHandlerAdapter或RequestMappingHandlerAdapter进行注解驱动的处理器适配。 6. 配置视图解析器:在Spring MVC配置文件中配置视图解析器,用于将ModelAndView对象解析为具体的视图展示给用户。可以使用InternalResourceViewResolver来解析JSP视图,或者使用其他自定义的视图解析器。 以上是Spring MVC的基本配置,根据实际需求还可以配置拦截器、异常处理等。希望对你有所帮助!如果你还有其他问题,请继续提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值