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

自作多情 提交于 2019-12-03 13:13:01
Anil
<?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.

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

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>

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>

When you use jersey, all the requests are directed to jersey servlet i.e. ServletContainer. So if any request that does not match to any mapped rest class, it throws 404. But you can always add servlet filters to intercept the incoming request. Depending on the incoming HTTP request URL(defualt/welcome etc), you can take a decision to redirect it to the weclome page:

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/welcome.jsp");

I am just curious to know, will the below example work?

HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.sendRedirect("/welcome.jsp"); if it will, where this sendRedirect() to be called? with in a servlet, so if i am not wrong, there should be a servlet, which just redirects the request to the first/default page, right?

you can create the class "API", and insert an anotation in your project. Class ApplicationConfig...

@ApplicationPath("api") //anotation

public class ApplicationConfig extends Application { }

after, i create class "Users" that stay...

Class UserApi

@Path("users")//anotation page User.

public class UserApi {

.... mycode complement page....

@GET

@Path("list")

@Produces("application/json")

public String getUsuarios() throws Exception {

    String json = new Gson().toJson(this.userD.listar());

    return (json);

}

remember that your root project stay ... http://yourprojectpatc.com.br/api/users/list

using the "Postman" modify for Json to to send your data

Lokesh Mrudhul
<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>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!