问题:我有一个 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 类,即使我已经看到了这个配置)。