繁体   English   中英

新泽西州Servlet:RequestDispatcher返回404

[英]Jersey Servlet: RequestDispatcher returning 404

我需要将请求转发到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);

}

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

“ com.rest.resources”中有多个类映射到请求(/ resources / *)随附的路径。 但是,当请求由“ getRequestDispatcher”转发时,Jersey会引发404错误 似乎Jersey无法将我的请求映射到正确的servlet。 如果我使用邮递员粘贴相同的URL,则请求将正常处理。 调度员的检查是: 在此处输入图片说明

为了验证问题是否出在Jersey,我创建了一个从HttpServlet扩展而未提交给Jersey的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);
}

令人惊讶的是,这个向前实现的类helloResource放置在“ com.rest.resources”中。

有没有人遇到类似的事情? “ getRequestDispacther”如何查找和转发“ / 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”中的资源处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM