How to configure welcome file (HTML/JSP) in Jersey container

22,181

Solution 1

<?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_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>com.webservice.services</display-name>
    <servlet>
        <servlet-name>Jersey REST Service</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>com.webservice.services</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/service/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>


Try URL pattern with different path like given above (/service/*) for REST. It works and welcome file displays when server starts.

Solution 2

your current servlet mapping is

<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/*</url-pattern>

which redirects every request to jersey. so to make welcome page visible you need to make entry like

<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest</url-pattern>

this pattern will call jersey only for urls like

http://localhost:8080/rest/

and thus url

http://localhost:8080/index.html

will not be redirected to jersey servlet.

A project targetting same scenario is hosted on https://github.com/skohli0302/jims

Solution 3

In web.xml:

<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/somethinghere/*</url-pattern>
</servlet-mapping>

instead of

<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

Solution 4

You can have something like

<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/index.html</url-pattern>
</servlet-mapping>
Share:
22,181
Murugesh
Author by

Murugesh

keen to learn always. #SOreadytohelp

Updated on October 16, 2020

Comments

  • Murugesh
    Murugesh over 3 years

    I have a Jersey RESTful web service project. I have configured the Jersey container in the web.xml and everything works fine.

    In the same project, I have introduced one HTML page and included in the <welcome-file-list> to handle some other non-REST request. But when I am accessing the URL, the welcome file is not displayed.

    After I commented the Jersey container configuration in web.xml and deployed the application, this time I am able to access the welcome file.

    Am using Tomcat 7, JDK 7, Jersey 2.2 and Eclipse Juno. How to make the welcome file working when Jersey has configured? Is there any limitations with Jersey or do I need configure in different way to achieve this?

    My web.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" 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_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>My Service</display-name>
      <servlet>
        <servlet-name>Jersey REST Service</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.my.rest.service</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>    
      </servlet>
      <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/*</url-pattern>
     </servlet-mapping>      
      <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-list>
    </web-app>
    
  • Murugesh
    Murugesh over 10 years
    Yes, I have changed that. All the REST service request will be handled in the path http://<domain:port>/<context root>/service and the welcome file will be accessed in normal way. It is working fine. Keeping /* in the REST container makes the welcome page as not available resource.And all the requests will go to Jersey container.