java - Tomcat 404 – 未找到:实现 REST API 时
问题描述
我正在尝试使用 Eclipse 中的动态 Web 应用程序实现简单的 RESTFUL API 服务。每次我收到错误消息HTTP Status 404 – Not Found
。
我在下面附上了我的屏幕
封装结构
localhost:8080
如上图所示,我可以在其上运行 tomcat 服务器,但是当我尝试访问我的 api 路径时,我得到了404 not found error
这是我的整个代码
package com.restful.java.example;
import javax.ws.rs.*;
@Path("/")
public class ScoreService {
private static int wins ,losses, ties;
@GET
@Path("/score")
@Produces("application/json")
public String getScore() {
String pattern =
"{ \"wins\":\"%s\", \"losses\":\"%s\", \"ties\": \"%s\"}";
return String.format(pattern, wins, losses, ties );
}
//localhost:8080/restful-java/score?wins=2%losses=3@ties=15
@PUT
@Path("/score")
@Produces("application/json")
public String updateScore( @QueryParam("wins")int wins,
@QueryParam("losses")int losses,
@QueryParam("ties")int ties) {
ScoreService.wins = wins;
ScoreService.losses = losses;
ScoreService.ties = ties;
String pattern =
"{ \"wins\":\"%s\", \"losses\":\"%s\", \"ties\": \"%s\"}";
return String.format(pattern, wins, losses, ties );
}
@POST @Path("/score/wins") @Produces("text/plain")
public int increaseWins() {
return ++wins;
}
@POST @Path("/score/ties") @Produces("text/plain")
public int increaseTies() {
return ++ties;
}
@POST @Path("/score/losses") @Produces("text/plain")
public int increaseLosses() {
return ++losses;
}
@GET @Path("/score/wins") @Produces("text/plain")
public int getWins() {
return wins;
}
@GET @Path("/score/losses") @Produces("text/plain")
public int getLosses() {
return losses;
}
@GET @Path("/score/ties") @Produces("text/plain")
public int getTies() {
return ties;
}
}
在里面Webcontent
我有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>restful-java</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>
</web-app>
解决方案
您错过了web.xml
. 添加以下行:
<servlet>
<servlet-name>My Servlet</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.restful.java.example</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>My Servlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
基本上,此配置所做的是将带有模式的 url 映射/api/*
到所需的 servlet。
看起来您正在使用球衣进行 REST 实现。现在您可以尝试使用以下 url 访问您的 api:
http://localhost:8080/restful-java/api/score
推荐阅读
- c - 我为 Rasperry Pi PICO 编译 Tensor Flow Lite 示例“Hello_World”时出错
- python-3.x - ValueError python svm.SVC(kernel='linear') 似乎无法得到它
- android-studio - 在kotlin的函数之外声明变量?
- elasticsearch - Elasticsearch产品变体数据聚合问题返回所有记录
- node.js - 连接时的 socket.io 中间件错误。在第 N 个连接上调用 N 次
- autodesk-forge - 缺少 FORGE_CLIENT_ID 或 FORGE_CLIENT_SECRET 环境。变量
- flutter - 当用户选择一个选项时更改自动完成小部件内的文本值
- logstash - filbeat 中的 Apache
- reactjs - 有没有更快的方法来进行多页 API 调用?
- grpc - 如何重新加载grpc服务器?