将 OSGi Servlet 部署到 Domino(IBM 演示文稿)- 404 错误

Deploying OSGi Servlet to Domino (IBM presentation) - 404 error

我正在尝试使用 Equinox 的 PDE 工具在 Domino 中部署 OSGi 容器。我遵循此 IBM 幻灯片中的说明: http://www.slideshare.net/fiorep/domino-osgi-development?next_slideshow=1

但是(根据幻灯片 #52)当我浏览到 http://localhost/simpledemo(在从“调试配置”中单击“调试”之后)时,我收到“找不到 404 文件”错误。

"simpledemo" 是 puligin.xml 文件中映射的别名(幻灯片 44)。然而,servlet 名称是 SimpleServlet。

知道发生了什么事吗?? 非常感谢任何帮助。

我的环境:Windows2012 Server(在虚拟机上)、Eclipse 3.6.2、Equinox、PDE 工具和 Domino Server 6.01 服务器。

参考:

SimpleServlet.Java

 package com.ibm.ls2012;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;

public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public SimpleServlet() {

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
   final PrintWriter pw = resp.getWriter();

   resp.setContentType("text/html");
   pw.println("<HTML");
   pw.println("<HEAD><TITLE>SHOW112 - Simple Servlet Demo</TITLE></HEAD>");
   pw.println("<BODY>");
   pw.println("<BR>");
   pw.println("hello world. feeling cold yet?");
}}

我遵循了类似的演示,但出于某种原因,有些地方略有不同。我不确定是否发生了某些变化,或者我是否根据 Liberty 上的 Vaadin Web 应用程序的经验采取了稍微不同的方法。

我的 plugin.xml 有:

<extension
    point="com.ibm.pvc.webcontainer.application">
    <contextRoot>
       /helloWorldWC
    </contextRoot>
    <contentLocation>
       WebContent
    </contentLocation>
</extension>

这样就为 "localhost/helloWorldWC/" 的插件应用程序提供了根。

然后,在 WebContent\WEB-INF 中有一个 web.xml 即:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>com.paulwithers.helloWorld.HelloWorldServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>helloWorld</url-pattern>
    </servlet-mapping>
</web-app>

所以这是在用 "helloWorld" 的后续 URL 模式表示任何内容,因此 "localhost/helloWorldWC/helloWorld" 应该使用 HelloWorldServlet。这在前面的元素中定义为映射到 com.paulwithers.helloWorld.HelloWorldServlet class。您可以将 url 模式更改为“*”,然后 localhost/helloWorldWC 将映射到 HelloWorldServlet class.

要扩展它,而不是指向单个 servlet class,您可以指向扩展 javax.ws.rs.core.Application 的 class,它可以包含一个 getClasses() 方法 returns 一组贡献的所有 servlet。每个 servlet 然后可以有一个 @Path 注释来定义应该使用的路径(我相信所有这些都是标准的 JAX-RS)。这是我在 this blog post 的附件中使用的过程。附件使用 OpenNTF Domino API,但您感兴趣的核心元素 - plugin.xml、web.xml、应用程序 class 和 Servlet class 上的注释 - 是标准的.

我要检查的第一件事是插件是否正确加载。从服务器控制台类型:告诉 http osgi ss {yourpluginname}。确保插件已加载并处于活动状态。如果安装了 state,那么你有一个缺少约束的问题,要诊断,请键入 tell http osgi diag {pluginid}。 注意:你可以从第一个ss命令中获取pluginid。

如果状态已解决,则需要使用以下命令手动启动它:tell http osgi start {pluginid}。注意:预计不会处于已解决状态,Domino 服务器应该会自动启动所有插件。