Java 来自库jar的Servlet web资源(Jetty)

Java 来自库jar的Servlet web资源(Jetty),java,servlets,jar,resources,jetty,Java,Servlets,Jar,Resources,Jetty,我知道有类似的问题和建议。然而,我觉得这个问题还没有完全解决,或者至少对我来说还没有顺利解决:( 需要什么: 我想构建一个JAR打包库,它将像几个WebApps中的共享组件一样使用,在其中包含服务器逻辑和相关UI(web组件).设想一个UserService从服务器端的角度为login和signup调用提供servlet/资源,同时从客户端为整个生态系统中的任何WebApp提供端到端解决方案的UI组件 到目前为止: Servlet3.0规范中的一个特性似乎正好满足了这一需求,该特性处理JAR中路

我知道有类似的问题和建议。然而,我觉得这个问题还没有完全解决,或者至少对我来说还没有顺利解决:(

需要什么: 我想构建一个JAR打包库,它将像几个WebApps中的共享组件一样使用,在其中包含服务器逻辑和相关UI(web组件).设想一个
UserService
从服务器端的角度为
login
signup
调用提供servlet/资源,同时从客户端为整个生态系统中的任何WebApp提供端到端解决方案的UI组件

到目前为止: Servlet3.0规范中的一个特性似乎正好满足了这一需求,该特性处理JAR中路径
META-INF/resources
下的ServletWeb资源

一、 看起来,它完全按照它所说的那样做了,构造
ui组件.jar
,在根目录下具有
META-INF/resources/ui commons/…
,并在
web.xml
中配置以下内容:


通用用户界面
org.eclipse.jetty.servlet.DefaultServlet
相对资源库
/WEB-INF/lib/ui components.jar!META-NF/resources
通用用户界面
/通用用户界面/*
此定义出现在默认servlet定义之前,默认servlet定义像往常一样为WAR中的其他常规WebApp资源提供服务

然而,对该JAR中的资源的任何请求最终都会导致404

Servlet版本是
3.1

码头
9.4

它不是嵌入式Jetty,没有什么特别之处,但是请注意下面关于maven插件的通知

注意: 这可能与以下事实有关:我目前正试图使用
jetty maven plugin
运行整个安装程序,该插件提供来自源代码的资源

  • 我试图手动将所述JAR放入
    src/main/resources/WEB-INF/lib…
    ,但没有成功
完全跳过
条目

确保您的
描述符设置为Servlet 3.0或更新版本

示例(对于Servlet 3.1)


您必须允许war文件展开/提取。(默认情况下,此设置为true。如果您在可部署的上下文
${jetty.base}/webapps/.xml
,或
DeploymentManager
配置,或
WebAppProvider
配置中声明为false,请将其返回true)

确保您使用的是Jetty 9.2或更新版本

有一个示例项目演示了
META-INF/resources
行为和
jetty maven插件
at

就是这样,默认情况下支持它。不需要额外的工作。(除非您使用嵌入式jetty自己做事情)


如果使用嵌入式jetty,要知道这只适用于
WebAppContext
,而不是
ServletContextHandler

好的,我遗漏了一些东西,Joakim的回答为我指明了正确的方向

为了从Jetty提供服务的JAR中获取资源,Jetty服务器首先应扫描这些JAR

默认情况下,webapp的
WEB-INF/lib
中的所有JAR都会被扫描。但是,建议对该行为进行微调,并过滤掉所有不相关的JAR,以根据Jetty的文档加快启动时间

因此,首先-确保在
WebAppContext
设置中查看
webinincludejarpattern
属性配置,并包括包含其他静态资源的JAR


“外来”JAR资源的其余设置(同样,正如Joakim指出的)与常规Web应用程序的资源相同,不需要任何进入JAR的特殊路径,因为我在初始设置中错误地尝试了。用servlet和Jetty版本更新了Q,都是正确的。什么是skip
servlet
entires?首先,我确实需要默认的servlet来服务其他静态。还有……Jetty将如何找到co更正JAR以从中选择资源?和相对路径?跳过,如在“不使用”中,如在“从
web中删除”。xml
DefaultServlet
通过默认描述符提供给所有web应用程序,使用
WebAppContext
时无需手动声明。如果我想调整
DefaultServlet
行为,如cache控件、etag、不允许目录列表等,
条目是正确的方法(假设不涉及Java代码)?