我有一個工作的Web應用程序,我已經成功部署到Heroku並運行良好。但是,我試圖調整服務器/ servlet配置,那時候我意識到我不知道我的應用程序實際上在做什麼。使用Glassfish servlet配置Jetty服務器
對於GlassFish,this is the config that's needed。
然而,碼頭,this is the config that's needed。
我意識到我有上面我的應用程序實際上是用不知道,所以我就開始在我的代碼挖掘,發現如下:
主要方法,通過Heroku的被稱爲被實例化下面的Jetty服務器/ webappcontext。
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
然而,碼頭配置似乎依賴於大量的文件(如等/的jetty.xml,web應用文件夾或war文件),這我的項目並沒有在所有的。
另外,我的web.xml文件定義瞭如下的servlet:
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
,我的應用程序定義一個Jetty服務器,但Glassfish的servlet的關心我頗有幾分事實。在努力圍繞碼頭一切都標準化,我嘗試添加該碼頭的servlet我的pom.xml的依賴,改變了以上:
<servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
然而,這一變化引起了我的應用程序突破。它仍然編譯成功,所有基於測試集的測試仍然在本地成功。但是當我真正運行服務器時,沒有任何路由可以工作。
一些問題:
它是一個不明智的有Glassfish的servlet的(容器)一起使用Jetty服務器?
如果有,是什麼的servlet(容器?)我應該代替Glassfish的有,什麼我需要做的就是在新碼頭的servlet的工作?
如果沒有,我應該使用我的當前設置是什麼配置?我應該執行Glassfish config還是Jersey config?
我花了很多時間試圖通過各種文檔,教程,閱讀和堆棧溢出線程,但他們都承擔任何關於servlet,JavaEE的和相關主題(其中沒有我熟悉的先驗知識),或者他們傾向於從頭開始構建全新的hello-world應用程序(而不是將現有的工作應用程序移植過來,這正是我正在嘗試做的)。任何你可以給予的解釋,而不假定事先知道,與上述情況相關,將不勝感激。
編輯:我想我現在開始明白,一個Servlet是產生一個請求的響應代碼,以及ServletContainer就是提供了Servlet的基礎設施。我從來沒有必須直接處理Servlets來構建我的Web應用程序。這裏是一個什麼樣的路徑看起來像我的應用程序的例子:
@Path(Ping.REST_PREFIX)
public class Ping {
static final String REST_PREFIX = "/ping";
@GET
public static Response get(@DefaultValue("getPing") @QueryParam("param") String param) {
return Response.ok().entity(param).build();
}
@Path("/pong")
@GET
public static Response getPong(@DefaultValue("getPong") @QueryParam("param") String param) {
return Response.ok().entity(param).build();
}
}
我怎麼能口代碼像上面到碼頭ServletContainer,無需重寫我的應用程序的龐大的板塊?