1

我有以下 Scala 代码来使用 Scalatra 设置 Jetty 服务器。

val server = new Server(8080)
val context = new WebAppContext()
context.setResourceBase("visualization")
context.addServlet(new ServletHolder(new CallTreeServlet(dataProvider)), "/*")
context.addServlet(new ServletHolder(new DataLoadingServlet(dataProvider)), "/*")
server.setHandler(context)

我的问题是它似乎只有在我注册一个 servlet 时才有效。

如果我注册了多个,就像我在发布的代码中所做的那样,它只会加载其中一个。

是否可以加载多个 servlet?我猜是这样,但我不知道怎么做。

如果我尝试从第一个 servlet 加载页面,则会收到此错误消息,该消息仅引用属于第二个 servlet 的页面:

Requesting "GET /callTrees" on servlet "" but only have:
GET /components
POST /load
POST /searchCallTrees
POST /selectPlugIn
4

1 回答 1

2

要解决此问题,您应该验证 servlet 生命周期。一种方便的方法是仔细阅读 servlet 容器的日志,以查看它在启动 Web 应用程序时报告的内容。它应该告诉您每个 Web 应用程序(servlet 上下文)和每个 servlet。. .

但是,我想我明白你的问题是什么。您的 servlet 路径映射有点时髦。在我看来,您正在映射两个 servlet 以接收所有请求。从实际的角度来看,这是行不通的,并且在 servlet 规则方面可能行不通。从 servlet 规范:

SRV.11.2
Specification of Mappings
In the Web application deployment descriptor, the following syntax is used to define
mappings:
• A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used
for path mapping.
• A string beginning with a ‘*.’ prefix is used as an extension mapping.
• A string containing only the ’/’ character indicates the "default" servlet of
the application. In this case the servlet path is the request URI minus the con-
text path and the path info is null.
• All other strings are used for exact matches only.

我建议你让它们都独一无二。现在看起来,它们都位于“/*”,有点像“默认 servlet”,但不是 . . .

为什么不尝试“/first/ ”和“/second/ ”作为健全性检查。然后从那里开始获取您喜欢的配置。

于 2012-11-27T19:25:17.267 回答