使用 Tomcat 部署 JAX-RS 应用程序,但始终找不到所需的资源
Deploy of JAX-RS app with Tomcat, but required resource always not found
我使用 Jersey 库开发了一个 RESTful 带有 JAX-RS 的服务。我已经构建并编译了它(没有错误)并且我已经使用 Tomcat 8.0.
部署了它
但是当我通过浏览器访问服务时,总是报同样的错误:
Status HTTP 404 - Not Found
type Informe de estado
message Not Found
description The requested resource is not available
Apache Tomcat/8.0.21
我已经为此苦苦挣扎了好几天,但找不到解决方案。我遵循了多个教程,其中一些非常简单,但其中 none 让我的服务正常工作。
我试过使用 IntellJ Idea 和 Eclipse。您可以从我的 Github 下载该项目并试用该服务:
https://github.com/daniegarcia254/SmartCULM.git
除了master还有两个分支,一个是Eclipse project and the another one for the IntellJ Idea project。
两个项目都使用 Maven 存储库来存储各自 pom.xml.
中所需的库
我认为我最后的错误是我没有确定 服务 URL,但我已经尝试了上千种不同的方法。可能是我的项目结构不对,或者 web.xml 配置不对,现在什么都不知道了!
有关更多信息,我认为这里的 URL 应该是部署后可以有效访问 RESTful 服务的信息:
我不是很确定,但我认为您的 web.xml 文件中可能缺少一些数据。在我从事的项目中,我必须指定我的 servlet 的 class 以及我的资源和应用程序文件的位置。
<display-name> display-name </display-name>
<servlet>
<servlet-name>Some_Service_Name</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.resource.package.name</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.application.package.ApplicationClassName</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Some_Service_Name</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
我相信您可能会使用 "main.java.rest.smartculm" 而不是 "com.resource.package.name"。我在你的项目中没有看到应用程序,所以我不确定你会使用什么。我通常通过扩展 javax.ws.rs.core.Application 来定义自己的应用程序 class。我还将您的 webapp 目录中的所有文件都放在了我项目根目录下的 WebContent 目录中,而不是放在 src 目录中。
我用来入门的一个参考是:
http://www.vogella.com/tutorials/REST/article.html
重要:
资源的完整路径基于 URL 和:
- display-name -> 在web.xml
中的<display-name>
标签中配置
- url-pattern --> 配置在web.xml
中的<url-pattern>
标签
- path_from_rest_class --> 由 classes
中的 @Path 注释定义
http://your_domain:port/display-name/url-pattern/path_from_rest_class
我使用 Jersey 库开发了一个 RESTful 带有 JAX-RS 的服务。我已经构建并编译了它(没有错误)并且我已经使用 Tomcat 8.0.
部署了它但是当我通过浏览器访问服务时,总是报同样的错误:
Status HTTP 404 - Not Found
type Informe de estado
message Not Found
description The requested resource is not available
Apache Tomcat/8.0.21
我已经为此苦苦挣扎了好几天,但找不到解决方案。我遵循了多个教程,其中一些非常简单,但其中 none 让我的服务正常工作。
我试过使用 IntellJ Idea 和 Eclipse。您可以从我的 Github 下载该项目并试用该服务:
https://github.com/daniegarcia254/SmartCULM.git
除了master还有两个分支,一个是Eclipse project and the another one for the IntellJ Idea project。
两个项目都使用 Maven 存储库来存储各自 pom.xml.
中所需的库我认为我最后的错误是我没有确定 服务 URL,但我已经尝试了上千种不同的方法。可能是我的项目结构不对,或者 web.xml 配置不对,现在什么都不知道了!
有关更多信息,我认为这里的 URL 应该是部署后可以有效访问 RESTful 服务的信息:
我不是很确定,但我认为您的 web.xml 文件中可能缺少一些数据。在我从事的项目中,我必须指定我的 servlet 的 class 以及我的资源和应用程序文件的位置。
<display-name> display-name </display-name>
<servlet>
<servlet-name>Some_Service_Name</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.resource.package.name</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.application.package.ApplicationClassName</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Some_Service_Name</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
我相信您可能会使用 "main.java.rest.smartculm" 而不是 "com.resource.package.name"。我在你的项目中没有看到应用程序,所以我不确定你会使用什么。我通常通过扩展 javax.ws.rs.core.Application 来定义自己的应用程序 class。我还将您的 webapp 目录中的所有文件都放在了我项目根目录下的 WebContent 目录中,而不是放在 src 目录中。
我用来入门的一个参考是: http://www.vogella.com/tutorials/REST/article.html
重要: 资源的完整路径基于 URL 和:
- display-name -> 在web.xml 中的
- url-pattern --> 配置在web.xml 中的
- path_from_rest_class --> 由 classes 中的 @Path 注释定义
<display-name>
标签中配置
<url-pattern>
标签
http://your_domain:port/display-name/url-pattern/path_from_rest_class