[英]Tomcat RESTful Web service deployment
我正在使用 Java、tomcat7、jersey 和 IDE eclipse 編寫一個簡單的 RESTful web 服務。
當我使用 eclipse(服務器)啟動 web 服務時,它運行良好。 我測試了 GET 和 POST 方法。 但是當我在 WAR 文件中導出應用程序並使用 tomcat 管理 UI 進行部署時。 它返回狀態 404 未找到。
這是示例:
@Path("/webservice")
public class WebService {
@POST
@Path("/post")
@Produces(MediaType.APPLICATION_JSON)
public Response helloWorld(String inputJson) {
return Response.ok().entity("Hello World").build();
}
@GET
@Path("/{param}")
public Response getMessage(@PathParam("param") String message) {
String output = "Jersey say Hello World!!! : " + message;
return Response.status(200).entity(output).build();
}
}
這是 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>WebService</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>package.webservice</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
誰能解釋在 eclipse 中啟動服務和在本地主機(或遠程主機)中部署有什么區別? 我怎樣才能調試或得到一些關於這個的痕跡?
有2個建議讓你擺脫這個問題1)在你的資源文件中制作一個默認方法,這樣如果沒有url匹配,那么它將調用否則它可能會給404
@GET
@Produces({ MediaType.TEXT_HTML, MediaType.TEXT_PLAIN })
public String default() {
return "Hello Rest Api";
}
你可以看到 - > Rest api資源示例
2)在下面的web.xml lke中設置默認的rest api路徑
<servlet-mapping>
<servlet-name>Jersey</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
你可以看到 - > Rest api默認路徑集
所以,當你打電話給你的api - > http://something.com/project/rest然后你的資源文件的默認方法將被觸發。 所以沒有404發生。
我終於開始工作了。 我在eclipse項目的屬性中設置了context-root。 可訪問的URL將類似於:localhost:8080 / context-root / rest / ...但是當我在Tomcat中使用WAR文件部署它時,不會考慮此配置。 正確的URL仍然是:localhost:8080 / project / rest / ...
我必須找到如何在web.xml或其他地方設置context-root。
使用Jersey運行REST Api的web.xml設置最好在以下URL中進行說明。
http://www.vogella.com/tutorials/REST/article.html#jerseyprojectsetup_gradle
我正在開發REST Api,以下是web.xml設置。
<servlet>
<servlet-name>BOARDWALK REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Register resources and providers under com.vogella.jersey.first package. -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>io.swagger.api</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>BOARDWALK REST Service</servlet-name>
<url-pattern>/bae/*</url-pattern>
</servlet-mapping>
所有REST API服務類都存儲在classes / io / swagger / api文件夾下。 當我調用REST api時,我使用以下URL並且它可以工作。
HTTP://本地主機:8080 / bae4_3_release / BAE / bcpInstance
其中http:// localhost:8080 / bae4_3_release是上下文。 / bae / bcpInstance指向classes / io / swagger / api / BcpInstanceApi.class中的一個類,其中PATH定義為@bcpInstance。
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>io.swagger.api</param-value>
</init-param>
表示REST API部署的位置。
我通過將正確的 JDK 放在 env 變量上來修復它。 將 JAVA_HOME 設置為指向 Java 11 而不是 Java 8。
我對 Tomcat 9 和 IntelliJ 也有同樣的問題。 當通過 IntelliJ 部署時,它一切都會工作,但是通過將來自project/target/project.war
的 same.war 復制到$CATALINA_HOME/webapps
來部署 same.war 到 tomcat 將導致部署成功,但我的所有請求都是 404。
它只是一個簡單的 hello world restful 應用程序,使用 jersey 而我的 /api/hello-world 從未工作過。 我需要在我的機器上保留兩個 java 版本,所以 IntelliJ 使用 11 而系統的 rest 使用 8。
現在都在工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.