Как настроить файл приветствия (HTML/JSP) в контейнере Джерси

У меня есть проект веб-сервиса Jersey RESTful. Я настроил контейнер Джерси в web.xml и все работает нормально.

В том же проекте я ввел одну HTML-страницу и включил в <welcome-file-list> обрабатывать некоторые другие не REST-запросы. Но когда я получаю доступ к URL-адресу, файл приветствия не отображается.

После того, как я прокомментировал конфигурацию контейнера Jersey в web.xml и развернул приложение, на этот раз я могу получить доступ к файлу приветствия.

Я использую Tomcat 7, JDK 7, Джерси 2.2 и Eclipse Juno. Как заставить файл приветствия работать, когда Джерси настроен? Есть ли какие-то ограничения на Джерси или мне нужно настроить по-другому, чтобы добиться этого?

Мой 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>

7 ответов

Решение
<?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>


Попробуйте шаблон URL с другим путем, как указано выше (/service/*) для REST. Это работает, и файл приветствия отображается при запуске сервера.

Ваше текущее отображение сервлета

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

который перенаправляет каждый запрос на майку. поэтому, чтобы сделать страницу приветствия видимой, нужно сделать запись как

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

этот шаблон будет вызывать Джерси только для URL, как

http://localhost:8080/rest/

и, следовательно, URL

http://localhost:8080/index.html

не будет перенаправлен на сервлет-джерси.

Проект с таким же сценарием размещен на https://github.com/skohli0302/jims

В web.xml:

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

вместо

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

Вы можете иметь что-то вроде

<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>

Когда вы используете джерси, все запросы направляются на джерси сервлет, т.е. ServletContainer. Поэтому, если какой-либо запрос не соответствует ни одному из отображенных классов отдыха, он генерирует 404. Но вы всегда можете добавить фильтры сервлета для перехвата входящего запроса. В зависимости от URL-адреса входящего HTTP-запроса (defualt/welcome и т. Д.), Вы можете принять решение перенаправить его на страницу weclome:

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

Вы можете создать класс "API" и вставить аннотацию в ваш проект. Класс ApplicationConfig...

@ApplicationPath ("api") // аннотация

открытый класс ApplicationConfig расширяет приложение { }

после, я создаю класс "Пользователи", которые остаются...

Класс UserApi

@Path ("пользователи") // страница аннотации Пользователь.

открытый класс UserApi {

.... страница дополнения mycode....

@ПОЛУЧИТЬ

@Path("list")

@Produces("application/json")

public String getUsuarios() throws Exception {

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

    return (json);

}

помните, что ваш корневой проект останется... http://yourprojectpatc.com.br/api/users/list

с помощью "Почтальон" изменить для Json, чтобы отправить ваши данные

Мне просто интересно узнать, сработает ли приведенный ниже пример?

HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.sendRedirect("/welcome.jsp");если это будет, где это sendRedirect() быть названным? с в сервлете, так что если я не ошибаюсь, должен быть сервлет, который просто redirects просьба к first/default страница, верно?

<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>
Другие вопросы по тегам