Web服务错误HTTP状态404 - 未找到

时间:2015-10-01 13:10:19

标签: java eclipse rest jersey

我正在关注一个简​​单的Web服务教程,似乎无法与Java代码进行交互。我怀疑我的web.xml有错误,但我不确定。没有明显的错误,index.jsp是没有任何问题的服务器。

所以,当我在服务器上运行它时,会打开index.jsp,然后我尝试使用以下网址,但我得到的是HTTP 404错误'

这是我的意思 导入了jersey libs的动态Web项目。 关于这一点的说明 - 我找到了一个错误,因为找不到课程,看到我必须使用Glassfish.org ...而不是com.sun一个,不知道为什么,但是你去了。 enter image description here

我的web.xml如下。没有错误。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>RestApi</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <display-name>Rest Web Services App by me</display-name>
  <servlet>
    <servlet-name>exampleServlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.rest.example</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>exampleServlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

我的java类如下。没有错误。

package com.rest.example;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/hello")
public class HelloWorld {
    @GET
    @Path("/{param}")
    public Response getMsg(@PathParam("param") String msg){
        String output = "Welcome to the world of Rest : "+msg;
        return Response.status(200).entity(output).build(); 
    }

}

3 个答案:

答案 0 :(得分:1)

您使用的是旧泽西1.x属性

com.sun.jersey.config.property.packages

对于Jersey 2.x,它应该是

jersey.config.server.provider.packages

作为一般规则,您看到com.sun.jersey任何适用于Jersey 1.x而org.glassfish.jersey适用于2.x.

答案 1 :(得分:0)

尝试:

  

http://localhost:8080/rest/RestApi/hello

检查my case

规则如下:/ {url-pattern} / {project} / {path}

我用jetty运行我的案子

another example

答案 2 :(得分:0)

由于以下原因,可能会发生上述问题:

  1. 首先检查在tomcat的webapps文件夹中部署的应用程序的名称,无论它是否与您的url匹配(给出404)。但是在上述情况下,由于它显示了欢迎页面,因此不是这里的问题。
  2. 检查web.xml中提到的网址格式,因为它必须与您所点击的网址相同。
  

<url-pattern>/rest/*</url-pattern>

  1. 要检查的第三件事是,其余类中定义的路径带有@Path注释。
  2. 如果您使用@Paul Samsotha上面建议的球衣2.x,请检查web.xml中的以下条目
<servlet> 
      <servlet-name>Jersey RESTful Application</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.pizzeria</param-value> 
      </init-param> 
   </servlet>
  1. 当服务器启动时没有任何错误,但应用程序上下文没有,可能会出现此错误。您可以在日志中检查它。有关更多信息,请参考此链接---> 404 error due to SEVERE: Context [/example] startup failed due to previous errors