【问题标题】:Jersey servlet mapping confusionJersey servlet 映射混乱
【发布时间】:2014-02-21 22:32:21
【问题描述】:

有人可以用简单的英语解释一下这是如何工作的(或者至少为什么我的结构没有)?我希望我的 Jersey servlet 资源(我称之为 ExportResource)中有一个名为 ExportLicenseInfo 的函数映射到 http://example.com/myApp/export/software_licenses.{year}-{month}.{format},例如:http://example.com/myApp/export/software_licenses_2013-10.csv

web.xml 中的 Servlet 配置:

<servlet>
    <servlet-name>ExportServlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.mycompany.app.ExportApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

我在 web.xml 中的 servlet 映射:

<servlet-mapping>
    <servlet-name>ExportServlet</servlet-name>
    <url-pattern>/export</url-pattern>
</servlet-mapping>

我的代码带有@Path 注释:

@Path("/export")
public class ExportResource {

    ...

    @GET
    @Produces({"text/csv", "application/json"})
    @Path("/software_licenses_{year: [0-9][0-9][0-9][0-9]}-{month: [0-1][0-9]}.{format}")
    public String ExportLicenseInfo( ... ) {
    ...
    }

当我尝试访问资源时,我得到一个 404. Jersey 跟踪日志:

Feb 21, 2014 2:41:46 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 6 * LoggingFilter - Request received on thread http-bio-8080-exec-67
6 > GET http://localhost:8080/app/export/software_licenses_2013-10.csv
6 > host: localhost:8080
6 > connection: keep-alive
6 > cache-control: max-age=0
6 > accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
6 > user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36
6 > accept-encoding: gzip,deflate,sdch
6 > accept-language: en
6 > cookie: JSESSIONID=DB64E0B066BDEE8CABFC94686AD6ACDC.test; JSESSIONIDSSO=61B51CEED61F8F6CE8A8DB46B38BAC9F; i18next=en

Feb 21, 2014 2:41:46 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 6 * LoggingFilter - Response received on thread http-bio-8080-exec-67
6 < 404

【问题讨论】:

  • 您的 ExportResource 不是 Servlet。
  • 是的;我知道。我的 servlet 是调用包的 jersey servlet。
  • 哦,我收到了 404。我会更新我的问题。
  • 那不是 jersey servlet。显然,您将"/export" 路径映射到一个不存在的servlet。这就是你得到 404 的原因。相反,显示你的 jersey servlet 的 web.xml 配置。
  • 假设ExportServlet被映射到jersey rest dispatcher servlet,你将/export映射到你的rest服务,它在那个路径中响应/export,所以我认为你的服务的正确url是http://example.com/myApp/export/export/software_licenses_2013-10.csv。

标签: java web-services servlets jersey-2.0


【解决方案1】:

尝试像这样映射 jersey servlet:

<servlet-mapping>
<servlet-name>ExportServlet</servlet-name>
<url-pattern>/export/*</url-pattern>
</servlet-mapping>

【讨论】:

  • 谢谢!我刚刚完成了使用该模式的工作。在我的 Servlet 资源中,我还必须将类的 @Path 注释从 '/export' 更改为 '/'。
猜你喜欢
  • 2018-02-17
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 2023-02-17
  • 2019-11-09
  • 2011-05-03
相关资源
最近更新 更多