【问题标题】:Is it possible to forward a Request from a WebServlet to rest helper servlet (javax.ws.rs.core.Application)是否可以将来自 WebServlet 的请求转发到休息助手 servlet (javax.ws.rs.core.Application)
【发布时间】:2018-02-13 15:46:29
【问题描述】:

问题: 我有一个 WebFilter,它将有效的 url 转发到代理 servlet 或处理网页的 servlet,以便管理员监控最近的请求等等。

admin servlet 支持将 ajax 请求转发到 REST 服务(在 login.jsp 从 controlpannel.jsp 呈现的网页之后),但显然其余服务具有与 WebFilter 和 WebServlets 不同的上下文?

问题: 那么是否有可能从我的 WebServlet 转发到其余的助手 servlet(及其资源类)?

更具体的信息:

这就是我使用转发的方式:

ServletContext sc = request.getServletContext();
RequestDispatcher dispatcher = sc.getRequestDispatcher(forwardURI);
dispatcher.forward(request, response);

我试图转发到这个 uri:

forwardURI = /REST/proxy_client/newer_than

我的休息助手 servlet:

@Stateless
@ApplicationPath("/REST")
public class RestService extends Application {
@Override
public Set<Class<?>> getClasses() {
    final Set<Class<?>> restResourceClasses = new HashSet<Class<?>>();
    restResourceClasses.add(ProxyClientResource.class);
    return restResourceClasses;
}

}

还有这个资源类:

@Path("/proxy_client")
@Stateless
public class ProxyClientResource {
@EJB
private ProxyClientBean proxyClientBean;

@GET
@Produces("application/json")
@Path("/newer_than")
public String getNumberOfEntriesNewerThanTimestamp(@QueryParam("timestamp") Expression<Timestamp> indexTimestamp,
        @QueryParam("numberOfclients") Integer numberOfclients) {
    List<ProxyClient> pageData = proxyClientBean.getElementsNewerThan(numberOfclients, indexTimestamp);
    return convertToJSONstring(pageData);
}

解决方案尝试:

我发现这个question 是关于如何从 servlet 调用 REST Web 服务,但他们使用客户端并且没有转发。

编辑

我有一个配置问题(可能还有一个),所以现在当我尝试转发到我的 rest 助手 servlet(扩展 javax.ws.rs.core.Application 的那个)时,我收到了这个错误:

RestServlet is currently unavailable 

(在 web.xml 中我称之为 Servlet RestServlet)

直接访问 REST api 时,我得到:

HTTP Status 500 - Authenticator.invoke() failed

但我不知道这是什么意思。

编辑2:

我将尝试使用 web.xml 子类中的配置来重新调整 Applicaton 的子类,而 @ApplicationPath 似乎对我不起作用。此外,当我尝试获取其余的 ServletsContext 时,我收到一个错误,即未指定任何类,这是您在使用 web.xml 配置时所做的事情。

编辑3:

我正在 HCP 上部署我的应用程序,但根本问题是我什至无法访问我的 REST 服务,我 found 这个 SAP 讨论。 当我让我的 REST 服务在没有转发的情况下工作时,我会在这里报告。

编辑4: 这实际上回答了 Edit3 的问题 我必须将 jersey 1.19.1(不是 2.x,因为我使用 Java EE6,它只支持 DWP 3.0 而不是 3.1)添加到项目库,否则它会说我没有指定 servlet 类(但是当我尝试添加 javax.ws.rs.core.Application 它会告诉我这不是 Servlet 类,即使我已经看到了这个配置)。

【问题讨论】:

  • 目前发生了什么?有什么错误吗?
  • 目前出现上述错误

标签: java rest servlets jax-rs sap-cloud-platform


【解决方案1】:

我真正的问题是 SAP Hana Cloud Platform 上 Java ee6 容器中的 javax.ws.rs.core.Application 因未知原因无法正常工作。

解决方案是下载jersey-bundle-1.19.1.jar 并将其添加到WEB-INF/lib 和项目库。

将请求从 vanilla servlet 转发到其余服务完全没有问题!如果它在您的情况下不起作用,很可能是您的设置或一些意想不到的原因,就像我的情况一样。

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2012-01-03
    • 2014-02-25
    • 2011-05-31
    • 2017-09-28
    • 2022-01-08
    相关资源
    最近更新 更多