2012-08-30 85 views
0

我在Eclipse上使用Tomcat 7.0。 tomcat服務器與eclipse同步。創建我的第一個下課後,我把在src /(默認包)的java文件/HelloWorld.java(不是好的做法,我知道,但只是用於測試)Tomcat是否自動編譯java servlets?

內容就是如下,非常簡單:

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.*; 

@WebServlet("/HelloWorld") 

public class HelloWorld extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println ("Hello World"); 
    } 
} 

很多教程聲稱我必須使用javac來編譯代碼。但是我什麼也沒做,而且沒有問題。每次我更改代碼時,它都會立即更新,就像魔術一樣。有些東西一定在工作,但我不知道它是什麼。

是的,這顯然是一個新手問題,所以任何幫助是值得歡迎的。此外,如果您有任何系統且易於使用的教​​程鏈接,則會更好。我在尋找他們幾天,但得到了很多不一致的答案。

回答

10

對我來說,你混的兩個主要技術 - Tomcat作爲Web容器和Eclipse作爲IDE。他們的整合讓你感到困惑。 讓我們離開JSP現在,只有約servlet的交談,因爲它混淆了更加

的Tomcat不能與源文件的工作文件(* .java)。你需要必須用javac編譯你的應用程序,並創建一個名爲WAR-web archive的東西 - 一個zip文件,它將包含你編譯的類,並且遵守一些tomcat可以理解的EE標準(它也可以使用文件夾而不是zip,但是可以讓把它放在一邊,與此解釋無關)。

其中,這場戰爭(一旦編譯正確)將包含您的編譯器servlet類HelloWorld.class)。

一旦tomcat啓動並識別部署文件夾中的war文件,就會打開它並在運行時加載。 沒有編譯,只有運行時加載。

現在人們在這裏談論JSP。實際上,JSP在技術上等同於servlet,但類似於HTML。 您將該文件的擴展名爲.jsp並構建您的WAR。 java編譯器不能讀取jsp文件,所以你應該把它們放到你的war文件中(通常用build tools/IDE爲你做)。底線是你在戰爭中創建了jsp文件。 現在,您將戰爭放入Tomcat,它會像以前一樣識別它並加載。在這一點上,它仍然對你的JSP沒有任何作用。因此,你的戰爭被部署,tomcat被啓動並且在瀏覽器中你去'http:// localhost:8080/myfirstjsp.jsp' 在這裏(第一次調用你的jsp)發生了很多事情:

  1. Tomcat的獲取瀏覽器的http請求
  2. Tomcat的認識到,它應該處理JSP文件
  3. Tomcat的分析你的JSP文件
  4. Tomcat的內部編譯它的一些類文件,你是不知道的(它內部存儲在Tomcat中),
  5. Tomcat在運行時加載此文件,並將其視爲已編譯的Java類。

下一次您將調用jsp,它將被編譯。

這裏的最後一個問題是Eclipse如何連接到所有這個故事:)事實上,Eclipse與tomcat集成,所以所有的戰爭創建和部署的東西是透明的。這就是爲什麼你在eclipse上推「play」,它會編譯你的項目,創建一場戰爭,確保tomcat意識到這場戰爭(配置部署相關的東西),啓動tomcat和瞧,你有你的應用程序工作。

其重要的是瞭解在什麼水平

希望這有助於 馬克

4

看起來您正在Eclipse上使用tomcat服務器插件。在這種情況下,只要保存.java文件,eclipse就會自動編譯它並更新tomcat服務器中的類文件。

Eclipse是一個IDE,它會自動完成大部分的事情你喜歡編譯代碼,設置classpath設置爲包含所需的jar文件等

如果你想跟着教程,我會建議你使用純文本編輯器和獨立的tomcat服務器。然後,您將不得不執行教程中提到的所有步驟(編譯使用javac的servlet類,將.class文件複製到tomcat服務器等)。

+0

由於發生了什麼。你的回答和Mark的確很有幫助! – NSF

1

編號Java EE容器(Tomcat)不能compile .java文件自動/含蓄。事實上containerJSP engine將解析JSP和生成的類文件 - JSP-wiki

看看Eclipse Build Story.

+0

「JSP引擎」是什麼意思?這不是tomcat? – NSF

+0

它是Java Web技術的**視圖引擎。 – adatapost

+0

我檢查了這個鏈接。它似乎說JSP頁面在頁面被訪問時被編譯,而不是servlets。如我錯了請糾正我。 – NSF

相關問題