首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jersey : RequestDispatcher返回404

Jersey : RequestDispatcher返回404
EN

Stack Overflow用户
提问于 2017-08-29 12:50:46
回答 1查看 583关注 0票数 1

我需要将请求转发到REST服务,并编写了以下代码:

代码语言:javascript
复制
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来处理请求,它的定义如下:

代码语言:javascript
复制
<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具有以下代码:

代码语言:javascript
复制
public RESTApplication() {
    register(WadlFeature.class);
    register(JacksonFeature.class);
    register(MultiPartFeature.class);
    property(CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE, true);
}

在"com.rest.resources“中有几个类映射到请求附带的路径(/resources/*)。,但是当请求被"getRequestDispatcher“转发时,泽西会抛出一个404错误。似乎泽西无法将我的请求映射到正确的servlet。如果我使用Postman粘贴相同的URL,请求将被正常处理。调度员的检查是:

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

代码语言:javascript
复制
<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.rest.resources.helloResource</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>  

在此之后,我执行了以下代码:

代码语言:javascript
复制
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?

使用的版本:Jersey2.6Servlet2.5JBos4.2.3-GA

EN

回答 1

Stack Overflow用户

发布于 2017-08-30 13:43:04

看来,泽西希望"getRequestDispatcher“实现必须处理的URL,而不是将其委托给映射的servlet。

这条线解决了这个问题:

datasulRest.getRequestDispatcher("/resources/“+request.getPathInfo();

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45939660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档