新泽西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,则请求正常处理。该检查调度的是:
为了验证是否问题是与新泽西,我已经创建了一个自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
答
看来, Jersey希望“getRequestDispatcher”完成必须处理的URL,而不是将其委托给映射的servlet。
问题用这条线解决:
RequestDispatcher的调度= datasulRest.getRequestDispatcher( “/资源/” + request.getPathInfo());
在此之后,请求被放置到“com.rest.resources”中的资源处理。
所以'你好'工程和'资源'不?我想知道“资源”路径是否已经被servlet使用了一些保留路径? –
@JorgeCampos是的,与“你好”工作得很好。这对我来说似乎不是一个保留字的问题,但是在转发请求时是Jersey问题 –