【发布时间】:2020-02-02 22:44:00
【问题描述】:
我正在尝试将我的应用程序从 tomcat 迁移到 embedded jetty。我按照一些指南(this、this、this 等)在 Web 模块中创建了一个入口点。生成的文件如下所示:
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.webapp.WebAppContext
object EPILauncher extends App {
val server: Server = new Server(8080)
val coolWebApplication = new WebAppContext()
coolWebApplication.setResourceBase("warehouse/src/main/webapp/")
coolWebApplication.setContextPath("/api")
coolWebApplication.setDescriptor("warehouse/src/main/webapp/WEB-INF/web.xml")
coolWebApplication.setParentLoaderPriority(true)
server.start()
System.out.println("Started!")
server.join()
}
我的web.xml 文件中有以下 servlet 声明
<servlet>
<servlet-name>CustomerApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.xxxx.yyyy.warehouse.web.Root</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
io.swagger.jaxrs.listing,
org.owasp.csrfguard.servlet,
com.xxxx.yyyy.warehouse.resource
</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.scanning.recursive</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>jersey.config.servlet.filter.staticContentRegex</param-name>
<param-value>.*(html|css|js|eot|svg|ttf|woff)</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>CustomerApplication</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
包com.xxxx.yyyy.warehouse.resource 包含实现,例如:
@Singleton
@Path("/settings")
@Api("/settings")
class SettingsResource @Inject()(config: Config) {
@GET
@Path("/version")
@Produces(Array(MediaType.APPLICATION_JSON))
def getBackendVersion(@Context servletContext: ServletContext): Response = {
val manifestStream = servletContext.getResourceAsStream("META-INF/MANIFEST.MF")
val version: String = Option(manifestStream)
.map(Utils.using(_) { is =>
val attrs = new java.util.jar.Manifest(is).getMainAttributes
val version = attrs.getOrDefault(new Attributes.Name("Specification-Version"), "local-version").toString
val build = attrs.getOrDefault(new Attributes.Name("Implementation-Version"), "local-build").toString
s"$version.$build"
}).getOrElse("local-version.local-build")
Response.ok(VersionInfo(version)).build()
}
}
所以,当我运行我的应用并导航到 localhost:8080/api/settings/version 时,我看到的只是:
URI: /api/settings/version
STATUS: 404
MESSAGE: Not Found
SERVLET: -
所以,我认为我没有正确理解某些概念。我应该明确指出我的main 方法,我想使用哪些servlet?它们可以从web.xml 文件自动加载吗?
谢谢。
【问题讨论】:
标签: tomcat servlets jetty web.xml embedded-jetty