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

时间:2015-11-19 15:37:23

标签: osgi lotus-domino equinox domino-designer-eclipse

我正在尝试使用带有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。

任何想法发生了什么? 非常感谢任何帮助。

我的环境:Windows 2012 Server(在VM上),Eclipse 3.6.2,Equinox,PDE工具和Domino Server 6.01服务器。

参考:Deploying OSGi Servlet to Domino

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?");
}}

2 个答案:

答案 0 :(得分:0)

我跟着类似的演示,出于某种原因有些不同。我不确定某些事情是否发生了变化,或者我是否根据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>

所以这是任何带有后续URL模式“helloWorld”的东西,所以“localhost / helloWorldWC / helloWorld”应该使用HelloWorldServlet。这在前面的元素中定义为映射到com.paulwithers.helloWorld.HelloWorldServlet类。您可以将url-pattern更改为“*”,然后localhost / helloWorldWC将映射到HelloWorldServlet类。

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

答案 1 :(得分:0)

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

如果状态已解决,则需要使用以下命令手动启动它:tell http osgi start {pluginid}。注意:不期望处于解析状态,Domino Server应自动启动所有插件。