在JSP中使用JSTL是否需要指定SpringJstlView resolver?

Is it necessary to specify Spring JstlView resolver to use JSTL in JSP?

在Spring中使用InternalResourceViewResolver时,是否需要将viewClass指定为 org.springframework.web.servlet.view.JstlView使用JSTL?因为没有指定它,我仍然能够在 JSP 中访问 JSTL 标签(我使用 <c:out/>),没有任何异常或错误。

Spring 不了解 jstl,因为它不是 Spring 的一部分,这将作为 JSTL 的桥梁 从处理程序返回的视图名称将被转换为 JSP 资源(例如:"myView" -> "/WEB-INF/jsp/myView.jsp"),使用此视图 class 以启用 显式 JSTL 支持

它还将公开 JSTL 特定的请求属性,使用 Spring 的语言环境和 MessageSource 为 JSTL 的格式和消息标记指定语言环境和资源包。

当您从资源文件(.properties 文件)加载属性时

 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
   <property name="basename" value="messages"/>
 </bean>

指定的 MessageSource 从 class 路径中的 "messages.properties" 等文件加载消息。这将作为 JSTL 本地化上下文自动暴露给视图,JSTL fmt 标签(消息等)将使用它。

来源:JSTL View

我在看到 InternalResourceViewResolver and here

如果我们使用 InternalResourceViewResolver 解析视图并且 jstl jar 在 classpath.

中,则默认设置 JstlView class

因为没有指定我仍然可以访问 JSTL 标签:

-> 这是因为 InternalResourceViewResolver,在内部检查(在构造函数内部实例化期间)JSTL classes(特别是 javax.servlet.jsp.jstl.core.Config)是否存在于 class 路径和 spring 中class加载器可以加载成功。 因此,如果 class 存在并且可以加载,它将自动使用 JstlView 而不是 InternalResourceView。所有这一切只发生在它的默认构造函数中。

因此,您不需要特别告知使用 JstlView。它将被自动占用。 在您的情况下,它的 JSTL 配置 class 在 class 路径中可用,因此它正在工作。