新泽西Servlet的:RequestDispatcher的返回404

问题描述:

我需要转发到REST服务的请求,并作出这样的代码:新泽西Servlet的:RequestDispatcher的返回404

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); 

} 

服务“/ 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> 

类RESTApplication有这样的代码:

public RESTApplication() { 
    register(WadlFeature.class); 
    register(JacksonFeature.class); 
    register(MultiPartFeature.class); 
    property(CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE, true); 
} 

有Severa的将“com.rest.resources”中的l类映射到请求附带的路径(/ resources/*)。 但是,当请求被“getRequestDispatcher”转发时,Jersey会抛出404错误。看来泽西岛不能将我的请求映射到正确的servlet。如果我使用Postman粘贴相同的URL,则请求正常处理。该检查调度的是: enter image description here

为了验证是否问题是与新泽西,我已经创建了一个自HttpServlet延伸并不会提交到新泽西州一个Servlet:

<servlet> 
    <servlet-name>HelloServlet</servlet-name> 
    <servlet-class>com.rest.resources.helloResource</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

在此之后我执行该代码:

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); 
} 

Surprisely,此正向实现类helloResource其被放置成 “com.rest.resources”。

有没有人遇到类似的东西? ?如何 “getRequestDispacther” 发现并转发现有的 “/资源/” servlet的*

版本中使用: 球衣2.6 的servlet 2.5 的JBoss 4.2.3-GA

+0

所以'你好'工程和'资源'不?我想知道“资源”路径是否已经被servlet使用了一些保留路径? –

+0

@JorgeCampos是的,与“你好”工作得很好。这对我来说似乎不是一个保留字的问题,但是在转发请求时是Jersey问题 –

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

问题用这条线解决:

RequestDispatcher的调度= datasulRest.getRequestDispatcher( “/资源/” + request.getPathInfo());

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