0

自从我将 Worklight 升级到版本 6.1(eclipse 插件版本:6.1.0.00-20131219-1900)后,我创建的 servlet MyServlet(并且在以前的版本中运行良好)不再工作。

“它不起作用”是指当 Worklight 服务器启动时 init () 不再执行。这是我的jee符号:  

   @ WebServlet (name = "MyServlet", displayName = "MyServlet", urlPatterns = {"/ MyServlet / *"}, loadOnStartup = 1) public class MyServlet extends HttpServlet {

  我认为新的 Worklight 无法识别该符号,因此有必要调整 web.xml。问题是web.xml位于war里面,每次都被覆盖;有什么建议吗?

在 server.xml 我有:

            <feature>servlet-3.0</feature>

Worklight 6.1 中未加载 servlet 的问题是由于 Servlet 部署描述符的 XML Schema 的默认版本造成的。

归属于 worklight 的版本应设置为 3.0(而不是 2.4)以强制执行 3.0 行为(允许使用 jee 表示法)。在 Worklight 6.0 中为 3.0,现在在 Worklight 6.1 中设置为 2.4。我已经手动替换了我的战争项目中 web.xml 中的 webapp 描述符元素:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

现在它可以工作了(我的 Servlet 已加载!)。

默认情况下是否可以在 Worklight 6.1 中恢复 3.0 版?

4

1 回答 1

1

要回答回到 v3 的问题 - 这是不可能的。虽然这是以前版本中的版本,但由于兼容性原因,决定回到 v2.4。不支持 v3。


实际上,在 Worklight Studio 中每次构建时都会重新生成 .war 文件的内容。这适用于所有以前的 Worklight 版本,对于 6.1.0 来说并不新。这是预期的行为。

不建议在开发过程中以任何方式编辑 web.xml 文件(因为它会被覆盖)。因此也不建议将其用于生产,因为如果您在项目中进行任何更改然后重新部署 .war 文件,它将不包含您之前的构建后更改。

请参阅此问题中的评论:Worklight Init Servlet

根据评论,您可以尝试的是:

另一种选择可能是将单独的 servlet 部署到您的服务器(不是 WL .war 的一部分)并使用 HTTP 适配器与其通信

于 2014-01-16T09:11:29.707 回答