我想用Jersey設置我的項目,基本上有2個servlet:一個用於客戶端應用程序訪問的私有應用程序和一個用作API的公共應用程序。 api調用是私有調用的一個子集。 (如果這是相關的,我的客戶端是GWT和RestyGWT)。我的資源都存儲在任一:Jersey設置2個servlet
com.path.to.server.resources.internal
com.path.to.server.resources.api
凡私人的servlet應該包括這兩個包,並且api只能使用api包。
我想我的內部調用看起來像這樣:
的https://本地主機:8445 /資源/認證/註冊
和我的API調用看起來像這樣:
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的服務網址如圖Chrome的網絡監視器看起來是這樣的:
的https://本地主機:8445 /資源/認證/ findActiveSession
關於哪些東西需要什麼路徑,這一切都非常混亂。我不確定的事情:
AuthenticationResource路徑是否正確?它甚至需要Path註釋嗎?
專用servlet使用javax.ws.rs.core.Application是否正確?
我是否正確設置了應用程序子類(ApiApplication)的自定義servlet?
您是否將應用程序部署到應用程序服務器的根上下文中? – JimHawkins
你的'web.xml'看起來很奇怪。看看[Jersey](https://jersey.java。net/documentation/latest/deployment.html#deployment.servlet) – JimHawkins
@JimHawkins現在,我正在使用maven tomcat插件進行測試。你能告訴我什麼看起來很奇怪嗎?你鏈接的頁面是我用來獲得這個目標的確切的一個。 – Troncoso