I’m trying to implement simple RESTFUL API service using dynamic web application in Eclipse. Every time I am getting error message HTTP Status 404 – Not Found
.
I have attached my screen below
Package structure
I am able to run tomcat server on localhost:8080
as shown on the above figure but when I trying to access my api path I am getting 404 not found error
Here is my whole code
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; } }
Inside Webcontent
I have web.xml
and I have following code here:
<?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>
Advertisement
Answer
You have missed the mapping in your web.xml
. Add the following lines :
<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>
Basically what this configuration is doing is mapping urls with pattern /api/*
to a servlet which is required.
Also looks like you are using jersey for your REST implementation. Now you can try to access your api’s using the following url:
http://localhost:8080/restful-java/api/score