Я пытаюсь настроить свой проект на Джерси, чтобы в основном иметь 2 сервлета: частный для доступа к клиентскому приложению и публичный, который работает как API. Апи звонки являются подмножеством частных. (В случае, если это имеет значение, моя клиентская сторона - GWT с RestyGWT). Мои ресурсы сохраняются все в любом:Jersey Настройка 2 сервлетов
com.path.to.server.resources.internal
com.path.to.server.resources.api
Где частный сервлет должен включать в себя оба этих пакетов , и api должен использовать только пакет api.
Я хотел бы мои внутренние вызовы выглядеть следующим образом:
https: // локальный: 8445/ресурсы/аутентификации/входа
и мой апи вызовы выглядеть следующим образом:
HTTPS : // локальный: 8445/API/пользователей/GetUser
Моя web.xml выглядит следующим образом:
<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_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<!-- Servlets -->
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.path.to.server.resources.exceptionmappers;com.path.to.server.resources.api;com.path.to.server.resources.internal</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>com.path.to.server.ApiApplication</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>com.path.to.server.ApiApplication</servlet-name>
<url-pattern>/api</url-pattern>
</servlet-mapping>
</web-app>
У меня есть установка ApiApplication так:
public class ApiApplication extends ResourceConfig
{
public ApiApplication()
{
System.out.println("SETTING UP API");
packages("com.path.to.server.resources.exceptionmappers;com.path.to.server.resources.api");
}
}
Теперь у меня есть все, что установка, я пытался ударить мою службу. Я использую DirectRestService который выглядит следующим образом:
@Path("resources/authentication")
public interface AuthenticationService extends BaseService
{
@POST
@Path("/login/{loginType}")
@Produces(MediaType.APPLICATION_JSON)
Session login(@HeaderParam("Authorization") String authorization, @PathParam("loginType") UserTypes loginType);
@POST
@Path("/findActiveSession")
@Produces(MediaType.APPLICATION_JSON)
Session findActiveSession();
}
Ресурс-сервер, реализующий который выглядит следующим образом:
@Path("authentication")
public class AuthenticationResource extends BaseResource implements AuthenticationService
{
public Session login(String authorization, UserTypes loginType)
{
// Code to do stuff
}
public Session findActiveSession()
{
// Code to do stuff
}
}
Когда я посещаю https: // локальный: 8445, то findActiveSession () метод вызывается из моего клиента, но я получаю 404. URL-адрес службы, как показано в сетевом мониторе Chrome выглядит следующим образом:
https: // локальный: 8445/ресурсы/аутентификации/findActiveSession
Это все очень запутывает, какие вещи нужны, какие пути. Вещи, о которых я не уверен:
Правильно ли это путь проверки подлинности? Нужно ли даже аннотацию Path?
Правильно ли для частного сервлета использовать javax.ws.rs.core.Application?
Правильно ли я настраиваю пользовательский сервлет с помощью подкласса Application (ApiApplication)?
Разверните приложение в корневом контексте сервера приложений? – JimHawkins
Ваш 'web.xml' выглядит странно. Взгляните на [Джерси] (https://jersey.java.net/documentation/latest/deployment.html # deployment.servlet) – JimHawkins
@JimHawkins Прямо сейчас, я использую плагин maven tomcat для тестирования. Можете ли вы сказать мне, что выглядит странно? Связанная вами страница - это то, что я использовал, чтобы зайти так далеко. – Troncoso