【发布时间】:2015-01-27 07:00:27
【问题描述】:
我想将我的 Spring/JSP/Maven/Tomcat webapp 项目拆分为几个不同的项目。因此,它们中的每一个都将充当独立的 Web 应用程序。 现在,我想在所有项目中使用相同的自定义 JSP 标记,但我不想复制每个 WEB-INF/tag 文件夹。 如何在共享项目中定义它并在所有依赖项目中重用它?
【问题讨论】:
标签: spring tomcat split jsp-tags code-reuse
我想将我的 Spring/JSP/Maven/Tomcat webapp 项目拆分为几个不同的项目。因此,它们中的每一个都将充当独立的 Web 应用程序。 现在,我想在所有项目中使用相同的自定义 JSP 标记,但我不想复制每个 WEB-INF/tag 文件夹。 如何在共享项目中定义它并在所有依赖项目中重用它?
【问题讨论】:
标签: spring tomcat split jsp-tags code-reuse
我通过将 tld 放在公共项目的 src/main/java/META-INF 文件夹中来做到这一点。
例如common.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>Custom common Tag Library</shortname>
<uri>http://www.mysite.be/tags/common</uri>
...
然后是项目中的 JSP(包括共享项目):
<%@ taglib prefix="common" uri="http://www.mysite.be/tags/common" %>
免责声明:自从我这样做以来已经很久了,所以我希望我没有忘记任何事情,并且不确定这是否(仍然)是最好的选择。
【讨论】:
在上一个答案的基础上,假设您使用的是 Maven,那么您的 Common taglib 项目应该如下所示:
-src
--main
---resources
-----META-INF
-----taglib.tld
-----tags
-------tag1.tag
-------tag2.tag
taglib.tld 的内容如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>JSP 2.0 Tag File Library for Spring MVC and Bootstrap
</description>
<tlib-version>1.0</tlib-version>
<short-name>my-taglib-name</short-name>
<uri>http://my.taglib.namespace</uri>
<tag-file>
<name>tag1</name>
<path>/META-INF/tags/tag1.tag</path>
</tag-file>
<tag-file>
<name>tag2</name>
<path>/META-INF/tags/tag2.tag</path>
</tag-file>
</taglib>
然后就可以正常引用依赖项目中的taglib了。
<%@ taglib uri="http://my.taglib.namespace" prefix="t"%>
请参阅文档以获取更多指导:
http://docs.oracle.com/javaee/5/tutorial/doc/bnamu.html#bnana
【讨论】: