- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个简单的 Hello World REST API。我使用 IntelliJ IDEA 作为我的 IDE。我已经下载了 Tomcat 8.5.4 作为我的本地测试服务器。如果重要的话,我正在 Mac 上开发。我导入了 Jersey 库:
这是我的 web.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>HelloWorld</display-name>
<servlet>
<servlet-name>com.jamesshinevar.HelloWorld</servlet-name>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.jamesshinevar</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>com.jamesshinevar.HelloWorld</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
这是我的类(class)代码:
package com.jamesshinevar;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/test")
public class HelloWorld {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello(){
return "Hello";
}
}
然后我运行它,我得到它正在运行的指示如下:
/Users/james/apache-tomcat-8.5.4/bin/catalina.sh run
[2016-08-16 09:33:11,573] Artifact helloworldREST:war exploded: Server is not connected. Deploy is not available.
16-Aug-2016 09:33:12.907 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.4
16-Aug-2016 09:33:12.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jul 6 2016 08:43:30 UTC
16-Aug-2016 09:33:12.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.4.0
16-Aug-2016 09:33:12.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Mac OS X
16-Aug-2016 09:33:12.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 10.11.6
16-Aug-2016 09:33:12.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: x86_64
16-Aug-2016 09:33:12.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre
16-Aug-2016 09:33:12.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_101-b13
16-Aug-2016 09:33:12.910 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
16-Aug-2016 09:33:12.910 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /Users/james/Library/Caches/IntelliJIdea2016.2/tomcat/Tomcat_8_5_4_helloworldREST_4
16-Aug-2016 09:33:12.910 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /Users/james/apache-tomcat-8.5.4
16-Aug-2016 09:33:12.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/Users/james/Library/Caches/IntelliJIdea2016.2/tomcat/Tomcat_8_5_4_helloworldREST_4/conf/logging.properties
16-Aug-2016 09:33:12.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
16-Aug-2016 09:33:12.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote=
16-Aug-2016 09:33:12.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099
16-Aug-2016 09:33:12.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false
16-Aug-2016 09:33:12.911 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.authenticate=false
16-Aug-2016 09:33:12.912 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1
16-Aug-2016 09:33:12.912 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
16-Aug-2016 09:33:12.912 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/Users/james/Library/Caches/IntelliJIdea2016.2/tomcat/Tomcat_8_5_4_helloworldREST_4
16-Aug-2016 09:33:12.912 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/Users/james/apache-tomcat-8.5.4
16-Aug-2016 09:33:12.912 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/Users/james/apache-tomcat-8.5.4/temp
16-Aug-2016 09:33:12.912 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/james/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
16-Aug-2016 09:33:13.174 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
16-Aug-2016 09:33:13.210 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
16-Aug-2016 09:33:13.214 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
16-Aug-2016 09:33:13.216 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
16-Aug-2016 09:33:13.216 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 802 ms
16-Aug-2016 09:33:13.250 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
16-Aug-2016 09:33:13.250 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.4
16-Aug-2016 09:33:13.259 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-8080]
16-Aug-2016 09:33:13.267 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [ajp-nio-8009]
16-Aug-2016 09:33:13.268 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 51 ms
Connected to server
[2016-08-16 09:33:13,571] Artifact helloworldREST:war exploded: Artifact is being deployed, please wait...
[2016-08-16 09:33:14,065] Artifact helloworldREST:war exploded: Artifact is deployed successfully
[2016-08-16 09:33:14,066] Artifact helloworldREST:war exploded: Deploy took 494 milliseconds
16-Aug-2016 09:33:23.264 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /Users/james/apache-tomcat-8.5.4/webapps/manager
16-Aug-2016 09:33:23.292 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /Users/james/apache-tomcat-8.5.4/webapps/manager has finished in 28 ms
当我尝试访问我得到的 URL 时:
在 IntelliJ 的 Tomcat Localhost 日志中,我有:
16-Aug-2016 09:35:39.773 SEVERE [http-nio-8080-exec-8] org.apache.catalina.core.StandardHostValve.invoke Exception Processing /helloworld/api/test
java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535)
at java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:463)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1151)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1118)
at org.apache.catalina.core.StandardWrapper.servletSecurityAnnotationScan(StandardWrapper.java:1139)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:510)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
我不明白是什么导致了导致 500 错误的 NullPointerException。我确定它就在我眼前,但我只是不理解我所看到的。任何人都可以给我一些关于如何使这项工作的指示吗?这看起来应该很简单。我想要一个只返回“Hello”字符串的 API,但显然我遇到了困难。
最佳答案
您缺少 servlet-class
条目
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>HelloWorld</display-name>
<servlet>
<servlet-name>com.jamesshinevar.HelloWorld</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.jamesshinevar</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>com.jamesshinevar.HelloWorld</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
关于java - 简单的 REST API 返回 HTTP 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38976578/
我正在努力实现以下目标, 假设我有字符串: ( z ) ( A ( z ) ( A ( z ) ( A ( z ) ( A ( z ) ( A ) ) ) ) ) 我想编写一个正则
给定: 1 2 3 4 5 6
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
大家好,我卡颂。 Svelte问世很久了,一直想写一篇好懂的原理分析文章,拖了这么久终于写了。 本文会围绕一张流程图和两个Demo讲解,正确的食用方式是用电脑打开本文,跟着流程图、Demo一
身份证为15位或者18位,15位的全为数字,18位的前17位为数字,最后一位为数字或者大写字母”X“。 与之匹配的正则表达式: ?
我们先来最简单的,网页的登录窗口; 不过开始之前,大家先下载jquery的插件 本人习惯用了vs2008来做网页了,先添加一个空白页 这是最简单的的做法。。。先在body里面插入 <
1、MySQL自带的压力测试工具 Mysqlslap mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出
前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、简单、实用的数据库文档(字典)生成工具,该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等
Go语言语法类似于C语言,因此熟悉C语言及其派生语言( C++、 C#、Objective-C 等)的人都会迅速熟悉这门语言。 C语言的有些语法会让代码可读性降低甚至发生歧义。Go语言在C语言的
我正在使用快速将 mkv 转换为 mp4 ffmpeg 命令 ffmpeg -i test.mkv -vcodec copy -acodec copy new.mp4 但不适用于任何 mkv 文件,当
我想计算我的工作簿中的工作表数量,然后从总数中减去特定的工作表。我错过了什么?这给了我一个对象错误: wsCount = ThisWorkbook.Sheets.Count - ThisWorkboo
我有一个 perl 文件,用于查看文件夹中是否存在 ini。如果是,它会从中读取,如果不是,它会根据我为它制作的模板创建一个。 我在 ini 部分使用 Config::Simple。 我的问题是,如果
尝试让一个 ViewController 通过标准 Cocoa 通知与另一个 ViewController 进行通信。 编写了一个简单的测试用例。在我最初的 VC 中,我将以下内容添加到 viewDi
我正在绘制高程剖面图,显示沿路径的高程增益/损失,类似于下面的: Sample Elevation Profile with hand-placed labels http://img38.image
嗨,所以我需要做的是最终让 regStart 和 regPage 根据点击事件交替可见性,我不太担心编写 JavaScript 函数,但我根本无法让我的 regPage 首先隐藏。这是我的代码。请简单
我有一个非常简单的程序来测量一个函数花费了多少时间。 #include #include #include struct Foo { void addSample(uint64_t s)
我需要为 JavaScript 制作简单的 C# BitConverter。我做了一个简单的BitConverter class BitConverter{ constructor(){} GetBy
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我是 Simple.Data 的新手。但我很难找到如何进行“分组依据”。 我想要的是非常基本的。 表格看起来像: +________+ | cards | +________+ | id |
我现在正在开发一个 JS UDF,它看起来遵循编码。 通常情况下,由于循环计数为 2,Alert Msg 会出现两次。我想要的是即使循环计数为 3,Alert Msg 也只会出现一次。任何想法都
我是一名优秀的程序员,十分优秀!