使用 JSP 中的自定义标记文件和 Spring 引导

Using custom Tag files in JSP with Spring Boot

我有一个 Spring 引导项目,我正在尝试在 JSP 文件中进行以下调用:

<%@ taglib prefix="tagz" tagdir="/WEB-INF/tags" %>

<tagz:utils tabs="true"/>

标签文件夹在 -

\src\main\resources\WEB-INF\tags

JSP 文件夹位于 -

\src\main\resources\META-INF\resources\WEB-INF\jsp

我还定义了 application.properties 文件以包含:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

如果我尝试将标签文件夹放在任何其他类路径中,Intellij 会显示无法在编辑器中识别调用的错误。

如果我删除 taglib 调用,JSP 页面会正确显示。

我的 pom.xml 当然有这些依赖项:

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>1.5.4.RELEASE</version>
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <version>8.5.15</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>3.0-alpha-1</version>
</dependency>
<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
</dependency>

我收到以下错误:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Jun 25 16:12:47 IDT 2017 There was an unexpected error (type=Internal Server Error, status=500). /WEB-INF/jsp/main.jsp (line: [11], column: [4]) No tag [utils] defined in tag library imported with prefix [tagz]

我认为这与 Spring 引导中静态文件的配置有关,但我尝试添加 spring.resources.static-

locations=classpath:/resources/static/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/WEB-INF/tags/,classpath:/WEB-INF/
spring.mvc.static-path-pattern=/resources/**

似乎没有任何效果。 我应该提到这些标签库工作正常!

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

有什么帮助吗?

所以经过大量的试验和错误之后,我现在将所有 JSP 文件放在路径中:

webapp/WEB-INF/jsp

在以下位置标记文件:

webapp/WEB-INF/tags

和里面的 Tlds 文件:

webapp/WEB-INF/tld

当您在 JSP 中调用 tag/tld 文件时,您需要将它们引用到相对路径,例如:

<%@ taglib prefix="ui" tagdir="/WEB-INF/tags/ui" %>

您还需要在项目结构中定义一个 Facet。如果您没有定义它,则意味着您需要通过将 "web framework" 添加到您的项目来生成它。它会生成web.xml,你需要把它放在webapp/WEB-INF下,然后在项目Facets中手动编辑它。

希望这对看到这篇文章的人有所帮助post。