1

问题:我有一个 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);
}

解决方案尝试:

我发现了这个关于如何从 servlet 调用 rest web 服务的问题,但他们使用客户端并且没有转发。

编辑

我有一个配置问题(可能还有一个),所以现在当我尝试转发到我的休息助手 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 服务,我发现了这个 SAP 讨论。当我让我的 REST 服务在没有转发的情况下工作时,我会在这里报告。

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

4

1 回答 1

1

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

解决方案是下载并添加jersey-bundle-1.19.1.jartoWEB-INF/lib和项目库。

将来自 vanilla servlet 的请求转发到 rest 服务完全没有问题!如果它在您的情况下不起作用,则很可能是您的设置或某些意外原因,例如在我的情况下。

于 2017-09-06T09:49:20.037 回答