【问题标题】:Calling HttpServlet class from xpages client side script and regular notes forms?从 xpages 客户端脚本和常规注释表单调用 HttpServlet 类?
【发布时间】:2013-03-05 14:25:41
【问题描述】:

我是 Java 新手(同样,有一段时间没有接触过它)。

我有一个简单的(计划中的更复杂的)HttpServlet 类,我试图从网页调用它,无论是从常规的 Notes 表单还是 xPage 上的 csjs。

package com.pnc.cld;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet
{
    private static final long serialVersionUID = -2950148158748149L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        System.out.println("doGet: Hello World!");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        System.out.println("doPost: Hello World!"); 
    }
}

我发现这篇文章here

它最初是中文的,因此有点难以理解,但从我能够从中收集到的信息,您需要添加一个 IServletFactory 类,该类将 servlet 映射到您的 url,以便可以调用它你的浏览器。

但我遇到了错误。 This article修复了其中一些

但我仍然遇到一些错误。其中之一:

ServletFactory 类型必须实现继承的抽象方法 IServletFactory.getServletMatch(String, String) ServletFactory.java

而且文章似乎说您需要将com.ibm.xsp.adapter.servletFactory 添加到服务目录,但我在 PC 上的任何地方都找不到该文件。

有没有更好的文章或有希望的工作示例来调用 httpservlet?

【问题讨论】:

  • 在被问到几年后偶然发现了这个,还有更多。正如 Stephan Wissel 回答的那样,“更好”的方法是将您的 servlet 写入 OSGi 插件。稍加努力,您可以在 NSF 内完成此操作。需要注意的是,需要 java.pol 编辑以赋予您的 NSF Java 代码一些更广泛的安全权限,编辑您的 notes.ini(或通过 Internet 站点)以允许 PUT 和 DELETE 方法,同时将 lwpd jar 添加到 DDE 的构建中Sven Hasselbach 指出的路径(您的链接)。我关于这个主题的博客系列:edm00se.io/servlet-series

标签: java xpages lotus-domino lotus


【解决方案1】:

也许您应该研究一下 Sven 博客文章中的示例数据库。将 Domino Designer 切换到 Java 透视图并查看“代码/Java”部分。在那里你找到3个文件。其中之一处理 URL 并将它们映射到 servlet。第三个存储在 META-INF 文件夹中,并定义 IServletFactory 应在何处查找 ServletFactory 类(第二个文件)。第一个文件是 servlet 本身。 但要小心:我们也遇到了示例数据库中的错误。非常简单的原因:在 servlet 代码中引发了“静态”异常:-D 删除该代码就可以了。我们在 8.5.3 机器上对此进行了测试,但我相信它也适用于旧版本。

【讨论】:

  • 有一个 try-catch 块,里面是一个 throw new Exception 子句 - 所以 catch 总是无缘无故地打印堆栈跟踪。
  • 嗨嗨,没问题 - 这是“具有挑战性的”,但我们只花了“几分钟”来检查 LOL
【解决方案2】:

布鲁斯, 在 Domino 上,您需要实现 servlet OSGi 样式。从我在 OpenNTF 上的webDAV for Domino 项目中窃取代码。 servlet 肯定在工作!

【讨论】:

  • 谢谢斯蒂芬。我会看一看。但我让它自己工作!好吧,在将几篇文章放在一起的帮助下。包括这个8b30b0.wordpress.com/2013/02/04/creating-a-basic-domino-servlet/…哪一种拿中文的一篇文章来整理。我在给作者写信时遇到问题,但没有机会查看,但我一定会查看您的示例。
  • 在 servlet 中有一个 Writer 和一个 OutputStream。就像汉兰达一样->只能有一个。因此,一旦您触摸了 OutputStream,您就无法触摸 writer。但这应该是一个问题,因为您始终可以 PrintWriter w = new PrintWriter(out) 其中 out 是您的 OutputStream
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多