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

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

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

после того, как я прокомментировал конфигурацию контейнера Джерси в 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/*) для отдыха. Он работает и файл приветствия отображается при запуске сервера.


ваше текущее сопоставление сервлетов -

<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


в интернете.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. Поэтому, если какой-либо запрос не соответствует ни одному сопоставленному классу rest, он выдает 404. Но вы всегда можете добавить фильтры сервлетов для перехвата входящего запроса. В зависимости от URL-адреса входящего HTTP-запроса(defualt/welcome и т. д.) Вы можете принять решение перенаправить его на страницу weclome:

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

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

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


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

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

public class ApplicationConfig расширяет приложение { }

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

Класс UserApi

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

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

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

@GET

@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

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