簡體   English   中英

澤西島你好世界給了404

[英]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文件

http://127.0.0.1/test_server/hello

我得到了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM