Как настроить файл приветствия (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>