问题: 我有一个WebFilter,它将有效的URL转发到代理servlet或servlet,它处理一个网页,以便管理员监视最近的请求等等。
admin servlet支持将ajax请求转发到REST服务(在controlpannel.jsp呈现的网页中的login.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 helper servlet(扩展javax.ws.rs.core.Application)时,我收到此错误:
RestServlet is currently unavailable
(在web.xml中我称之为Servlet RestServlet)
直接访问REST api时,我得到:
HTTP Status 500 - Authenticator.invoke() failed
但我无法找出这意味着什么。
EDIT2:
我将尝试使用web.xml子类中的配置重新调整Applicaton的子类,并且@ApplicationPath似乎对我不起作用。此外,当我尝试获取其余的ServletsContext时,我得到一个错误,没有指定任何类,这是你在使用web.xml配置时所做的事情。
EDIT3:
我在HCP上部署我的应用程序,并且潜在的问题是我甚至无法访问我的REST服务found这个SAP讨论。 当我在没有转发的情况下运行我的REST服务时,我会在这里报告。
Edit4: 这实际上回答了Edit3中的问题 我不得不添加jersey 1.19.1(不是2.x,因为我使用Java EE6,它只支持DWP 3.0而不是3.1,根据需要)到项目库,否则它会说我没有指定一个servlet类(但是当我尝试添加javax.ws.rs.core.Application时,它会告诉我这不是Servlet类,即使我已经看过这个配置。)
答案 0 :(得分:1)
我真正的问题是SAP Hana Cloud Platform上的Java ee6容器中的javax.ws.rs.core.Application
因未知原因而无效。
解决方案是下载并将jersey-bundle-1.19.1.jar
添加到WEB-INF/lib
和项目库。
将来自vanilla servlet的请求转发给其他服务完全没有问题! 如果它在您的情况下不起作用,则很可能是您的设置或一些意想不到的原因,就像我的情况一样。