[英]Jersey hello world gives 404
我的java類中有以下代碼
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class Hello {
//This method is called is TEXT_PLAIN is request
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello(){
return "Hello World";
}
//this method is called if TEXT_XML is requested
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello(){
return "<?xml version=\"1.0\"?>"+"<Hello> Hello World"+"</hello>";
}
//this method is called if HTML is requested
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello(){
return "<html>"+"<title>"+"hello jersey"+"</title>"+"<body><h1>"+"hello World!!"+"</body></h1>"+"</html>";
}
}
當我輸入時,我編譯並將其導出為.WAR文件
我得到了404。 我在WTP中試過它,cURL它們都返回404 ..我正在使用tomcat 7.0.26
注意:我在端口80上運行Tomcat,其他servlet按預期響應。
web.xml配置
<display-name>Jersey_Test</display-name>
<servlet>
<servlet-name>Hello</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>com.example.service</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/*</url-pattern>
以下URL為我提供了Http狀態500
http://localhost/Jersey_Test/rest/hello
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
如果您還沒有在web.xml
中注冊JAX-RS servlet實現,就會發生這種情況。 Jersey需要以下配置:
<servlet>
<servlet-name>jersey</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>com.example.service</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>jersey</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
com.sun.jersey.config.property.packages
初始化參數值必須指向您所有服務所在的包。 但是,您的代碼段缺少package
聲明。 我不確定是否為了簡潔而省略了這一點,但無包裝類對於本身位於包中的類是不可見的(例如Tomcat和Jersey引擎本身)。 上面的web.xml
示例假設您已經擁有
package com.example.service;
在您的Web服務類上。 相應地修復或更改它。
請注意, /*
的URL模式表示所有請求都將通過Jersey傳遞。 如果您需要在同一個Web應用程序中部署其他servlet,JSP或靜態內容,則可能需要指定更具體的URL模式。 例如
<url-pattern>/rest/*</url-pattern>
您只需將請求URL更改為http:// localhost / test_server / rest / hello 。
看起來你在錯誤的地方注冊你的servlet。 仔細檢查servlet的根URL,並確保它與您正在匹配的內容相匹配。
你試過打嗎?:
http://127.0.0.1/hello
請記住, /hello
將追蹤servlet的基本URL。 嘗試在調試器中查看它以查看它的安裝位置。
問題已得到解決,這就是我的做法。
我從構建路徑中刪除了jersey .jar文件,並在WEB-INF\\lib
文件夾中替換它們,一切正常。
對我來說,在Build path -> Libraries
添加了一個jar
文件,文件系統中缺少實際的jar
。
我從build path
刪除了該條目,並在pom.xml
添加了依賴項。 像魅力一樣工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.