Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey Servlet:RequestDispatcher返回404_Java_Rest_Servlets_Jersey_Requestdispatcher - Fatal编程技术网

Java Jersey Servlet:RequestDispatcher返回404

Java Jersey Servlet:RequestDispatcher返回404,java,rest,servlets,jersey,requestdispatcher,Java,Rest,Servlets,Jersey,Requestdispatcher,我需要将请求转发到REST服务,并生成以下代码: private void performTask(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext portalContext = this.getServletContext(); ServletContext restService = portalCon

我需要将请求转发到REST服务,并生成以下代码:

private void performTask(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
    ServletContext portalContext = this.getServletContext();
    ServletContext restService = portalContext.getContext("/restService");
    RequestDispatcher dispatcher = restService.getRequestDispatcher("/resources/*");
    dispatcher.forward(request, response);

}
public RESTApplication() {
    register(WadlFeature.class);
    register(JacksonFeature.class);
    register(MultiPartFeature.class);
    property(CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE, true);
}
private void performTask(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
    ServletContext portalContext = this.getServletContext();
    ServletContext restService = portalContext.getContext("/restService");
    RequestDispatcher dispatcher = restService.getRequestDispatcher("/hello");
    dispatcher.forward(request, response);
}
Service“/restService”还有一个处理请求的servlet,其定义如下:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.service.RESTApplication</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.rest.resources</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/resources/*</url-pattern>
</servlet-mapping>
“com.rest.resources”中有几个类映射到请求附带的路径(/resources/*)但是当请求被“getRequestDispatcher”转发时,Jersey抛出404错误。Jersey似乎无法将我的请求映射到正确的servlet。如果我使用Postman粘贴相同的URL,请求将正常处理。调度员的检查是:

为了验证问题是否与Jersey有关,我创建了一个从HttpServlet扩展而来的Servlet,它没有提交给Jersey:

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.rest.resources.helloResource</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>  
令人惊讶的是,这个forward实现了放置在“com.rest.resources”中的helloResource类

有人面临类似的情况吗?“GetRequestDispatcher”如何查找和转发位于“/resources/”的servlet*

使用的版本: 泽西岛2.6 servlet 2.5
jboss 4.2.3-GA

Jersey似乎希望“getRequestDispatcher”完成必须处理的URL,而不是将其委托给映射的servlet

通过这条线解决了问题:

RequestDispatcher=datasulRest.getRequestDispatcher(“/resources/”+request.getPathInfo())


在此之后,请求由放置在“com.rest.resources”中的资源处理。

Jersey似乎希望“getRequestDispatcher”完成必须处理的URL,而不是将其委托给映射的servlet

通过这条线解决了问题:

RequestDispatcher=datasulRest.getRequestDispatcher(“/resources/”+request.getPathInfo())


在此之后,请求由放置在“com.rest.resources”中的资源处理。

?我想知道
resources
path是否是servlet已经使用的某个保留路径?@JorgeCampos是的,带有“hello”的选项工作得很好。对我来说,这似乎不是一个保留字问题,但在转发请求时出现了一个Jersey问题所以
hello
可以工作而
resources
不能?我想知道
resources
path是否是servlet已经使用的某个保留路径?@JorgeCampos是的,带有“hello”的选项工作得很好。对我来说,这似乎不是一个保留字的问题,而是转发请求时的一个问题