【问题标题】:servlet not getting invokedservlet 没有被调用
【发布时间】:2016-07-30 13:16:39
【问题描述】:

我在 Liferay 中开发简单的 servlet。我看到它正在初始化(通过将 System.out 放入 init() 方法进行验证)。但是当我将一些数据发布到 servlet 时,它没有被调用。如何调试它或我需要添加什么才能使其正常工作。

制作servlet入口文件:webapps/ROOT/WEB-INF/web.xml,liferay还有其他自定义webapps工作。

   .....
   <servlet>
       <servlet-name>HealthCheckServelet</servlet-name>
       <servlet-class>com.test.HealthCheck</servlet-class>
       <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
       <servlet-name>HealthCheckServelet</servlet-name>
       <url-pattern>/health-check/*</url-pattern>
   </servlet-mapping>
   .......

使用 HTTP GET http://host-ip/health-check/temperature 调用 servlet

【问题讨论】:

  • 除此之外(编辑 Liferay 的 web.xml)样式不好,不受支持且可能难以维护:您没有告诉我们您实际上是如何尝试调用此 servlet。
  • 感谢添加信息。我错过了。也请告诉我如何改进您上面提到的不良做法评论。

标签: servlets liferay liferay-6


【解决方案1】:

调用 URL 表明健康检查与 Liferay 无关,而是与运行您的应用程序的服务器有关。我将在完全独立于 Liferay 的单独 Web 应用程序中实现这一点,并将其部署在同一应用程序服务器上。这样你就不需要弄乱 Liferay 的 web.xml(如果你更新 Liferay 就需要迁移它)并且仍然给你同样的好处。如果您在健康检查中仍然需要 Liferay 信息,只需使用 API 获取您需要的数据。再次 - 您获得了更好的可维护性。

这样做的副作用是您可以在不需要运行 Liferay 的小型 Web 应用程序中轻松调试。您可以在此处轻松post a MCVE 提供您正在寻求建议的所有代码。

此外,通过在 Liferay 之外运行,您不会受到 Liferay 将应用于请求处理的任何 servlet 过滤器的约束——您的请求可能已经被它们捕获,谁知道呢。对于一个简单的问题,这是一个过于复杂的解决方案。

【讨论】:

  • 你的回答很好。但就我而言,我还需要扩展一些 Liferay API(Filters ap)等。我认为将它们全部放在单独的 webapp 中将更多地解决更多问题。因此,现在我想按照我描述的方式来做。
  • 你能展示你的缩小的 servlet 代码吗?此处只复制相关部分。
  • 当然,我会回来的
猜你喜欢
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 2013-01-14
  • 2013-04-08
相关资源
最近更新 更多