我知道类似的问题here和here。但是恕我直言,这个问题尚未完全解决,或者至少对我来说仍然无法顺利进行:(
我想构建一个JAR打包的库,它将像几个WebApp中的共享组件一样使用,将服务器逻辑以及相关的UI(Web组件)引入其中。从服务器端的角度考虑,UserService
为login
和signup
调用提供servlet /资源,同时拥有用于整个生态系统中任何WebApp的端到端解决方案的UI组件从客户端。
Servlet 3.0规范中的功能处理了在JAR中位于路径META-INF/resources
下的servlet Web资源,从而恰好满足了这一要求。
我似乎完全按照它说的做,构造了ui-components.jar
根下有META-INF/resources/ui-commons/...
并在web.xml
中配置了以下内容:
<servlet>
<servlet-name>ui-commons</servlet-name>
<servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
<init-param>
<param-name>relativeResourceBase</param-name>
<param-value>/WEB-INF/lib/ui-components.jar!META-NF/resources</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ui-commons</servlet-name>
<url-pattern>/ui-commons/*</url-pattern>
</servlet-mapping>
此定义之前出现在默认的Servlet定义之前,该servlet定义照常服务于WAR中的其余常规Web应用程序资源。
但是,该JAR中对资源的任何请求都以404结尾。
Servlet版本为3.1
。
码头9.4
。
它不是嵌入式Jetty,没什么花哨的,但是请注意以下有关Maven插件的通知。
这可能与以下事实有关:我当前正在尝试使用jetty-maven-plugin
来运行整个安装程序,该服务正在从源中提供资源。
src/main/resources/WEB-INF/lib...
中-没有成功答案 0 :(得分:1)
完全跳过<servlet>
项。
确保将<web-app>
描述符设置为Servlet 3.0或更高版本。
示例(对于Servlet 3.1)
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
</web-app>
您必须允许war文件展开/提取。 (默认情况下将其设置为true。如果在上下文可部署的${jetty.base}/webapps/<name>.xml
或DeploymentManager
配置或WebAppProvider
配置中将其声明为false,则将其恢复为true)>
确保您使用的是Jetty 9.2或更高版本。
有一个示例项目,说明了META-INF/resources
的行为和jetty-maven-plugin
在...上
https://github.com/jetty-project/jetty-example-metainf-resources
就这样,默认情况下受支持。无需额外的工作。 (除非您使用嵌入式码头自己做事)
如果使用嵌入式码头,请知道这仅适用于WebAppContext
,而不适用于ServletContextHandler
。
答案 1 :(得分:0)
好吧,我错过了一些东西,乔亚金(Joakim)的回答为我指明了正确的方向。
为了从Jetty服务的JAR中获取资源,首先,应该首先由Jetty服务器对其进行扫描。
默认情况下,将扫描webapp的WEB-INF/lib
中的所有JAR。但是,建议根据Jetty的文档here对此行为进行微调并过滤掉所有不相关的JAR,以缩短启动时间。
因此,首先-确保在WebInfIncludeJarPattern
设置中检查您的 WebAppContext
属性配置,并包括包含额外静态资源的JAR。
“外国” JAR资源的其余设置(再次,如Joakim所指出的)与常规Webapp的资源相同,不需要任何特殊的JAR路径,因为我在我的尝试中做错了初始设置。