【问题标题】:How to call /bin/wcmcommand servlet class from Java Class in CQ5如何在 CQ5 中从 Java 类调用 /bin/wcmcommand servlet 类
【发布时间】:2015-08-19 10:18:36
【问题描述】:

如何从 Java 类调用 Out of box CQ5 Jar 中的“/bin/wcmcommand”servlet。 HTTPClient 和 URL Connection 两种方式我都无法对此 servlet 进行 POST 调用。我收到错误代码:500。

【问题讨论】:

  • 什么,您是获取 servlet 的源代码并将其复制到另一个项目中还是 servlet 在 CQ 的 OSGi 运行时中原位运行?
  • Servlet 在 CQ 包内运行。 OOTB 功能是从 JSP 调用的 servlet。但我想从我的 java 类中调用那个 servlet。
  • 不是 servlet 的真正设计目的。可以说最好复制您希望在自己的类中使用和打包的任何行为的来源。

标签: java servlets httpclient aem wcm


【解决方案1】:

不确定您所说的“已在 Out of box CQ5 Jar 中的 servlet”是什么意思。 我从您的问题中了解到,您想从 Java 类(而不是从 JSP!)中调用(HTTP GET/POST)一个 servlet。

我假设它是一个 Sling Servlet,并且已经注册了路径/资源类型或任何其他 valid way of registering a servlet.

如果它使用“path”注册,您可以通过多种方式触发 HTTP 请求。

参考资料:

Using java.net.URLConnection to fire and handle HTTP requests

calling a servlet from a java class

【讨论】:

    【解决方案2】:

    此 OOTB Sling servlet 仅接受 sling 请求对象。所以不能像普通的servlet一样在java类中直接使用HTTPClient调用。 但是我的问题通过 servlet 通信得到了解决。我已将调用类从 java 类更改为 Sling servlet 类,然后我使用这样的 servlet 通信进行通信。

    RequestDispatcher req = request.getRequestDispatcher("/bin/wcmcommand");
    req.include(request,response);
    

    我想用不同的值多次调用这个 servlet。 所以我使用SlingServletRequestWrapper 类来修改每次调用的request.getParameter() 值。

    【讨论】:

      猜你喜欢
      • 2012-07-05
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 2011-01-24
      相关资源
      最近更新 更多