【问题标题】:beginner Java REST 404 error初学者 Java REST 404 错误
【发布时间】:2017-01-18 10:02:09
【问题描述】:

新手尝试在 Java 中设置 REST 服务。我创建了一个简单的 java 程序并将 war 文件部署在 apache-tomcat-8.5.5(在 apache-tomcat-8.5.5\webapps 目录下)。但是当我尝试访问 REST 服务 (http://localhost:8081/SampleRS/rest/sampproj/uservalue) 时,出现 404 错误。 (在8081端口启动tomcat {本来想做一个 POST - 使用 Postman,但是出错了,然后添加了一个 GET 方法来验证,但仍然出错)

Java 文件:

package sampproj;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.PathParam;

@Path("sampproj")
public class WSPostSer {
    public WSPostSer() {
        super();
    }

    @POST
    @Consumes("application/json")
    @Path("devpost")
    public String createTemp (String devName){
        System.out.println (" in reate");
        return "heloo" + devName;
    }

    @GET
    @Produces("text/plain")
    @Path("/uservalue")
    public String welcomeResource (@PathParam("uservalue") String username){    
        System.out.println("  welcomeResource ");   
        return "heloo Get " + username; 
    }
}

网页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>SampleRS</display-name>
   <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>sampproj</param-value>
         </init-param>
      </servlet>
   <servlet-mapping>
   <servlet-name>Jersey RESTful Application</servlet-name>
      <url-pattern>/rest/*</url-pattern>
   </servlet-mapping>  
</web-app>

lib(jar)是:

enter image description here

日志文件 localhost_access_log.2016-09-10: 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:16: 56 +0530]“发布 /SampleRS/rest/sampproj/devpost HTTP/1.1" 404 1052 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:18:46 +0530] “POST /SampleRS/rest/sampproj/devpost HTTP/1.1”404 1052 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:24:57 +0530] “获取 /SampleRS/rest/sampproj/uservalue HTTP/1.1" 404 1056 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:25:04 +0530]“GET /SampleRS/rest/sampproj/hell HTTP/1.1”404 1046 0:0:0:0:0:0:0:1 - - [2016 年 9 月 10 日:08:29:25 +0530] “GET / HTTP/1.1” 200 11450 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:29:26 +0530] "GET /tomcat.css HTTP/1.1" 200 5926 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:29:26 +0530] "GET / tomcat.png HTTP/1.1" 200 5103 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:29:26 +0530] “获取 /favicon.ico HTTP/1.1" 200 21630 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:29:27 +0530] “GET /bg-nav.png HTTP/1.1” 200 1401 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:29:27 +0530]“GET /asf-logo.png HTTP/1.1”200 17811 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:29:27 +0530] "GET /bg-upper.png HTTP/1.1" 200 3103 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:29:27 +0530] “GET /bg-button.png HTTP/1.1” 200 713 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:29:27 +0530]“GET /bg-middle.png HTTP/1.1”200 1918 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:29:42 +0530] “获取 /SampleRS HTTP/1.1" 404 1008 0:0:0:0:0:0:0:1 - - [10/Sep/2016:08:30:02 +0530] "GET /SampleRS HTTP/1.1" 404 1008 0:0:0:0:0:0:0:1 - - [10/Sep/2016:15:49:20 +0530]“获取 /SampleRS/rest/sampproj/uservalue HTTP/1.1" 404 1056 0:0:0:0:0:0:0:1 - - [10/Sep/2016:15:49:20 +0530] “获取 /favicon.ico HTTP/1.1” 200 21630 0:0:0:0:0:0:0:1 - - [10/Sep/2016:16:07:42 +0530]“获取/SampleRS/rest/sampproj/uservalue/df HTTP/1.1" 404 1062 0:0:0:0:0:0:0:1 - - [10/Sep/2016:16:07:49 +0530] “GET /SampleRS/rest/sampproj/uservalue=df HTTP/1.1”404 1062 0:0:0:0:0:0:0:1 - - [10/Sep/2016:16:22:41 +0530] “获取 /SampleRS/rest/sampproj/user HTTP/1.1" 404 1046 0:0:0:0:0:0:0:1 - - [10/Sep/2016:17:40:07 +0530]“获取/SampleRS/rest/sampproj/uservalue/me HTTP/1.1" 404 1062 0:0:0:0:0:0:0:1 - - [10/Sep/2016:17:43:08 +0530] “GET /SampleRS/rest/sampproj/uservalue/me HTTP/1.1”404 1062 0:0:0:0:0:0:0:1 - - [10/Sep/2016:18:04:23 +0530] “获取 /SampleRS/rest/sampproj/uservalue/me HTTP/1.1" 404 1062 0:0:0:0:0:0:0:1 - - [10/Sep/2016:18:04:31 +0530] “获取 /WSwebapp/SampleRS/rest/sampproj/uservalue/me HTTP/1.1" 404 1080 0:0:0:0:0:0:0:1 - - [10/Sep/2016:18:04:40 +0530] “获取 /WSwebapp/rest/sampproj/uservalue/me HTTP/1.1" 404 1008 0:0:0:0:0:0:0:1 - - [10/Sep/2016:18:09:10 +0530] “获取 /WSwebapp/rest/sampproj/uservalue/me HTTP/1.1" 404 1008 0:0:0:0:0:0:0:1 - - [10/Sep/2016:18:20:25 +0530] “获取 /WSwebapp/rest/sampproj/uservalue/me HTTP/1.1" 404 1008 0:0:0:0:0:0:0:1 - - [10/Sep/2016:18:21:04 +0530] “获取 /WSwebapp/rest/sampproj/uservalue/me HTTP/1.1" 404 1008

catalina.2016-09-10: 2016 年 9 月 10 日 17:45:33.158 信息 [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR web 部署 应用程序存档 C:\apache-tomcat-8.5.5\webapps\WSwebapp.war 有 在 2,632 毫秒内完成 2016 年 9 月 10 日 17:45:33.235 信息 [线程 5] org.apache.coyote.AbstractProtocol.stop 停止 ProtocolHandler [“http-nio-8081”] 2016 年 9 月 10 日 17:45:33.248 信息 [线程 5] org.apache.coyote.AbstractProtocol.stop 停止 ProtocolHandler [“ajp-nio-8009”] 2016 年 9 月 10 日 17:45:33.259 信息 [线程 5] org.apache.coyote.AbstractProtocol.destroy 销毁 ProtocolHandler [“http-nio-8081”] 2016 年 9 月 10 日 17:45:33.267 信息 [线程 5] org.apache.coyote.AbstractProtocol.destroy 销毁 ProtocolHandler [“ajp-nio-8009”] 2016 年 9 月 10 日 17:57:11.249 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log 服务器版本: Apache Tomcat/8.5.5 2016 年 9 月 10 日 17:57:11.253 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log 服务器构建:
2016 年 8 月 31 日 19:51:16 UTC 2016 年 9 月 10 日 17:57:11.253 信息 [主] org.apache.catalina.startup.VersionLoggerListener.log 服务器号:
8.5.5.0 2016 年 9 月 10 日 17:57:11.254 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 操作系统名称:
Windows 7 2016 年 9 月 10 日 17:57:11.254 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log 操作系统版本:
6.1 2016 年 9 月 10 日 17:57:11.255 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 架构:
amd64 2016 年 9 月 10 日 17:57:11.255 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log Java 主页:
C:\Program Files\Java\jdk1.8.0_91\jre 2016 年 9 月 10 日 17:57:11.256 信息 [主] org.apache.catalina.startup.VersionLoggerListener.log JVM 版本:1.8.0_91-b15 2016 年 9 月 10 日 17:57:11.256 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log JVM 供应商:
甲骨文公司 2016 年 9 月 10 日 17:57:11.256 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:
C:\apache-tomcat-8.5.5 2016 年 9 月 10 日 17:57:11.257 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:
C:\apache-tomcat-8.5.5 2016 年 9 月 10 日 17:57:11.260 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log 命令行 参数:-Djdk.tls.ephemeralDHKeySize=2048 10-Sep-2016 17:57:11.262 信息 [主] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.util.logging.config.file=C:\apache-tomcat-8.5.5\conf\logging.properties 2016 年 9 月 10 日 17:57:11.264 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log 命令行 争论: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 10-Sep-2016 17:57:11.268 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log 命令行 参数:-Dcatalina.base=C:\apache-tomcat-8.5.5 2016 年 9 月 10 日 17:57:11.273 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log 命令行 参数:-Dcatalina.home=C:\apache-tomcat-8.5.5 2016 年 9 月 10 日 17:57:11.278 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log 命令行 参数:-Djava.io.tmpdir=C:\apache-tomcat-8.5.5\temp 2016 年 9 月 10 日 17:57:11.283 信息 [主要] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR 基于 Apache Tomcat Native 库,它允许在 在 java.library.path 上找不到生产环境: C:\程序 文件\Java\jdk1.8.0_91\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:\oraclexe\app\oracle\product\11.2.0\server \bin;;C:\程序 文件\博通\博通 802.11;;;C:\ProgramData\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\; C:\程序 文件\WIDCOMM\蓝牙软件\;C:\Program Files\WIDCOMM\蓝牙 软件\syswow64;C:\Program Files\Java\jdk1.8.0_91\bin;。 2016 年 9 月 10 日 17:57:11.634 信息 [主要] org.apache.coyote.AbstractProtocol.init 初始化 ProtocolHandler ["http-nio-8081"] 2016 年 9 月 10 日 17:57:11.950 信息 [主要] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector 使用 servlet 写入/读取的共享选择器 2016 年 9 月 10 日 17:57:11.957 信息 [主] org.apache.coyote.AbstractProtocol.init 初始化 ProtocolHandler ["ajp-nio-8009"] 2016 年 9 月 10 日 17:57:11.983 信息 [主要] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector 使用 servlet 写入/读取的共享选择器 2016 年 9 月 10 日 17:57:11.985 信息 [main] org.apache.catalina.startup.Catalina.load 初始化 在 1694 毫秒内处理 2016 年 9 月 10 日 17:57:12.061 信息 [主要] org.apache.catalina.core.StandardService.startInternal 启动 服务 Catalina 2016 年 9 月 10 日 17:57:12.065 信息 [主要] org.apache.catalina.core.StandardEngine.startInternal 启动 Servlet 引擎:Apache Tomcat/8.5.5 2016 年 9 月 10 日 17:57:12.135 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR 部署 web 应用程序存档 C:\apache-tomcat-8.5.5\webapps\WSwebapp.war 2016 年 9 月 10 日 17:57:15.713 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个 JAR 已扫描 TLD,但未包含 TLD。为此启用调试日志记录 记录器以获取已扫描但没有 TLD 的 JAR 的完整列表 在他们身上找到。在扫描期间跳过不需要的 JAR 可以改善 启动时间和 JSP 编译时间。 2016 年 9 月 10 日 17:57:16.210 信息 [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 使用创建用于会话 ID 生成的 SecureRandom 实例 [SHA1PRNG] 花费了 [305] 毫秒。 2016 年 9 月 10 日 17:57:16.264 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR web 部署 应用程序存档 C:\apache-tomcat-8.5.5\webapps\WSwebapp.war 有 在 4,128 毫秒内完成 2016 年 9 月 10 日 17:57:16.267 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署网络 应用程序目录 C:\apache-tomcat-8.5.5\webapps\docs 2016 年 9 月 10 日 17:57:16.324 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署的 web应用目录C:\apache-tomcat-8.5.5\webapps\docs有 在 58 毫秒内完成 2016 年 9 月 10 日 17:57:16.325 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署网络 应用程序目录 C:\apache-tomcat-8.5.5\webapps\examples 2016 年 9 月 10 日 17:57:17.600 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署的 web应用目录C:\apache-tomcat-8.5.5\webapps\examples有 在 1,275 毫秒内完成 2016 年 9 月 10 日 17:57:17.601 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署网络 应用程序目录 C:\apache-tomcat-8.5.5\webapps\host-manager 2016 年 9 月 10 日 17:57:17.687 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署的 Web 应用程序目录 C:\apache-tomcat-8.5.5\webapps\host-manager 已在 86 毫秒内完成 2016 年 9 月 10 日 17:57:17.688 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署网络 应用程序目录 C:\apache-tomcat-8.5.5\webapps\manager 2016 年 9 月 10 日 17:57:17.761 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署的 web应用目录C:\apache-tomcat-8.5.5\webapps\manager有 在 74 毫秒内完成 2016 年 9 月 10 日 17:57:17.762 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署网络 应用程序目录 C:\apache-tomcat-8.5.5\webapps\ROOT 2016 年 9 月 10 日 17:57:20.655 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个 JAR 已扫描 TLD,但未包含 TLD。为此启用调试日志记录 记录器以获取已扫描但没有 TLD 的 JAR 的完整列表 在他们身上找到。在扫描期间跳过不需要的 JAR 可以改善 启动时间和 JSP 编译时间。 2016 年 9 月 10 日 17:57:20.766 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署的 web应用目录C:\apache-tomcat-8.5.5\webapps\ROOT有 在 3,004 毫秒内完成 2016 年 9 月 10 日 17:57:20.777 信息 [主要] org.apache.coyote.AbstractProtocol.start 启动 ProtocolHandler [http-nio-8081] 2016 年 9 月 10 日 17:57:20.828 信息 [主要] org.apache.coyote.AbstractProtocol.start 启动 ProtocolHandler [ajp-nio-8009] 2016 年 9 月 10 日 17:57:20.864 信息 [主要] org.apache.catalina.startup.Catalina.start 服务器启动时间为 8874 毫秒

【问题讨论】:

  • 应该是@Path("/sampproj"),即你应该添加一个正斜杠
  • 另外,既然您已经定义了@PathParam("uservalue"),请将@Path("/uservalue") 更改为@Path("/uservalue/${uservalue}") 并像这样调用URL:localhost:8081/SampleRS/rest/sampproj/uservalue/me。假设上下文确实是SampleRS
  • Ori - 进行了您建议的更改并替换为新的战争文件仍然无法正常工作。如何验证您提到的上下文?
  • 目录是 apache-tomcat-8.5.5\webapps\WSwebapp\.. 所以尝试了 localhost:8081/WSwebapp/rest/sampproj/uservalue/melocalhost:8081/WSwebapp/rest/SampleRS/sampproj/uservalue/me - 都没有工作
  • 如果您在webapps 下有WSwebapp 目录,则URL 确实应该是localhost:8081/WSwebapp/rest/sampproj/uservalue/me。没有任何进一步的信息(例如日志),很难说发生了什么问题。

标签: java rest


【解决方案1】:

将您的方法更改为:

@GET
@Produces("text/plain")
@Path("{uservalue}")
public String welcomeResource (@PathParam("uservalue") String username){
    System.out.println("  welcomeResource ");
    return "heloo Get " + username;
}

您的 war 文件名为 WSwebapp.war,因此请在浏览器中输入以下 URL:

http://localhost:8081/WSwebapp/rest/sampproj/me

你应该看到heloo Get me :)

【讨论】:

  • 或者将war文件重命名为SampleRS.war。
【解决方案2】:

您不需要休息服务类的构造函数并添加范围。您也可以尝试添加索引页面并访问它。这样您就可以确定您的服务器或您尝试访问它的方式没有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    相关资源
    最近更新 更多