servlet-class path in web.xml

12,743

Solution 1

I think the problem was because i am using jersey 2.1 .I removed it,installed Jersey 1.18 JARbundle from https://jersey.java.net/download.html . I added this jar in my WEB-INF lib folder , and also added asm.jar in this folder. (This jar can be found in Jersey1.18 Zip bundle downloaded from the same site) . Then followed @SparkOn 's Answer.It worked!

Solution 2

Because the url pattern specified is

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

Moreover your servlet tag should be like this

<servlet>
  <servlet-name>HelloServlet</servlet-name>
  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
     <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
         <param-value>Package1</param-value>
      </init-param>
</servlet>

you can specify additional path in your resource-method to call it individually like

    @Path("/hello")
    public class Hello {

    @GET
    @Path("/intextform")
    @Produces(MediaType.TEXT_PLAIN)
    public String helloWorld(){
        return "Hello from Jersey!";

       }
   }

Then right-click on the project and run on server

Try this url

http://localhost:8080/JerseyDemoProject/rest/hello/intextform

Solution 3

Problem is not with Jersey 2.1, problem is with your servlet class. You should use the following servlet class in your web.xml ( for all Jersey 2.x applications )

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

instead of :

<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

Then everything will work fine.

Finally, your servlet should be:

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>    
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>Package1</param-value>
    </init-param>
</servlet>
Share:
12,743
user3873909
Author by

user3873909

Updated on July 09, 2022

Comments

  • user3873909
    user3873909 almost 2 years

    I am following http://www.vogella.com/tutorials/REST/article.html tutorial.

    I have created the project(Dyanamic web project) by name "JerseyDemoProject",created a package by name "Package1" and i have written the program Hello.java(which is given in the tutorial) in this package.

    I have modified my web.xml as follows

    <?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>JerseyDemoProject</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>
    
       <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>Package1.Hello</servlet-class>
        <init-param>
          <param-name>jersey.config.server.provider.packages</param-name>
          <param-value>Package1</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
    
    
    </web-app>
    

    When i try to "Run on server" ,It gives me 404- not found error. I am using Tomcat server

    Hello class:

    package Package1;
    
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    // Plain old Java Object it does not extend as class or implements 
    // an interface
    
    // The class registers its methods for the HTTP GET request using the @GET annotation. 
    // Using the @Produces annotation, it defines that it can deliver several MIME types,
    // text, XML and HTML. 
    
    // The browser requests per default the HTML MIME type.
    
    //Sets the path to base URL + /hello
    @Path("/hello")
    public class Hello {
    
      // This method is called if TEXT_PLAIN is request
      @GET
      @Produces(MediaType.TEXT_PLAIN)
      public String sayPlainTextHello() {
        return "Hello Jersey";
      }
    
      // This method is called if XML is request
      @GET
      @Produces(MediaType.TEXT_XML)
      public String sayXMLHello() {
        return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
      }
    
      // This method is called if HTML is request
      @GET
      @Produces(MediaType.TEXT_HTML)
      public String sayHtmlHello() {
        return "<html> " + "<title>" + "Hello Jersey" + "</title>"
            + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
      }
    
    }
    

    Here is my project structure

    UPDATE:

    xml file:

    <?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>JerseyDemoProject</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>
    
       <servlet>
      <servlet-name>HelloServlet</servlet-name>
      <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
         <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
             <param-value>Package1</param-value>
          </init-param>
    
    </servlet>
      <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
    
    
    </web-app>
    

    class file

    @Path("/hello")
    public class Hello {
    
      // This method is called if TEXT_PLAIN is request
      @GET
      @Produces(MediaType.TEXT_PLAIN)
      public String sayPlainTextHello() {
        return "Hello Jersey";
      }
    
      // This method is called if XML is request
      @GET
      @Produces(MediaType.TEXT_XML)
      public String sayXMLHello() {
        return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
      }
    
      // This method is called if HTML is request
      @GET
      @Path("/inhtmlform")
      @Produces(MediaType.TEXT_HTML)
      public String sayHtmlHello() {
        return "<html> " + "<title>" + "Hello Jersey" + "</title>"
            + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
      }
    
    }
    

    URL used

    http://localhost:8080/JerseyDemoProject/rest/hello/inhtmlform
    

    Error shown

    HTTP Status 500 - Error instantiating servlet class com.sun.jersey.spi.container.servlet.ServletContainer
    

    Stacktrace:

    Exception:
    javax.servlet.ServletException: Error instantiating servlet class com.sun.jersey.spi.container.servlet.ServletContainer
        org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
        org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
        org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
        java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        java.lang.Thread.run(Unknown Source)
    
    Rootcause:
    
    java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
        org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
        org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
        org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
        org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
        org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
        java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        java.lang.Thread.run(Unknown Source)
    

    I found tese warnings in my console

    INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Java\jre7\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/Program Files (x86)/Java/jre7/bin/client;C:/Program Files (x86)/Java/jre7/bin;C:/Program Files (x86)/Java/jre7/lib/i386;C:\product\11.2.0\client_1\bin;C:\Informatica\961_989\961_Install\java\jre\bin\server;C:\Informatica\961_989\961_Install\tools\odbcdrv;C:\Informatica\961_989\961_Install\tools\jdbcdrv;C:\Informatica\961_989\961_Install\tools\datadirect;C:\app\vpalagum\product\11.2.0\client_2\bin;C:\app\vpalagum\product\11.2.0\client_1;C:\Program Files (x86)\RSA SecurID Token Common;C:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;C:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Box\Box Edit\;C:\Program Files (x86)\Java\jdk7_u15\bin;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Perforce;C:\Softwares\eclipse4.2;;.
    
    WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:JerseyDemoProject' did not find a matching property.