0

EclipseでTomcat7.0を使用しています。TomcatサーバーはEclipseと同期されています。最初のクラスを作成した後、.javaファイルをsrc /(デフォルトパッケージ)/HelloWorld.javaの下に置きます(私が知っている良い習慣ではありませんが、テストのためだけです)

内容は次のとおりで、かなり単純です。

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、コードをコンパイルするために使用する必要があると主張しています。しかし、私は何もせず、問題なく実行されました。また、コードを変更するたびに、魔法のようにすぐに更新されます。何かが機能している必要がありますが、それが何であるかわかりません。

ええ、それは明らかに初心者の質問なので、どんな助けでも大歓迎です。また、体系的でわかりやすいチュートリアルリンクがあると便利です。私は数日間それらを探していますが、一貫性のない答えがたくさんあります。

4

3 に答える 3

12

私にとって、あなたは2つの主要なテクノロジーを組み合わせています-WebコンテナーとしてのTomcatとIDEとしてのEclipseです。それらの統合はあなたを混乱させます。とりあえずJSPを離れて、サーブレットについてだけ話しましょう。それはさらに混乱するからです。

Tomcatはソースファイル(* .java)を処理できません。たとえば、アプリケーションをjavacでコンパイルし、WARと呼ばれるものを作成する必要があります-Webアーカイブ-コンパイルされたクラスを含み、Tomcatが理解するいくつかのEE標準に準拠するzipファイル(zipの代わりにフォルダーを使用することもできますが、それを置くことができます)余談ですが、この説明には関係ありません)。

特に、この戦争(正しくコンパイルされると)には、コンパイルされたサーブレットクラスHelloWorld.classが含まれます。

tomcatが起動し、デプロイメントフォルダー内のwarファイルを認識すると、tomcatが開き、実行時にロードされます。コンパイルは行わず、実行時のロードのみ。

今、人々はここでJSPについて話します。実際、JSPは技術的にはサーブレットと同等ですが、HTMLに似ています。拡張子が.jspのファイルを配置し、WARをビルドします。JavaコンパイラはJSPファイルを読み取ることができないため、何らかの方法でそれらをwarファイルに入れる必要があります(通常、ビルドツール/ 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と出来上がりを開始します!-アプリケーションを動作させます。

どのレベルで何が起こるかを理解することが重要です


これがマークに役立つことを願っています

于 2012-08-30T06:05:35.357 に答える
4

EclipseでTomcatサーバープラグインを使用しているようです。この場合、.javaファイルを保存するとすぐに、eclipseはそれをコンパイルし、tomcatサーバーのクラスファイルを自動的に更新します。

EclipseはIDEであり、コードのコンパイル、必要なjarファイルを含めるためのクラスパスの設定などのほとんどのことを自動的に実行します。

チュートリアルを実行したい場合は、プレーンテキストエディタとスタンドアロンのTomcatサーバーを使用することをお勧めします。次に、チュートリアルに記載されているすべての手順を実行する必要があります(javacを使用したサーブレットクラスのコンパイル、.classファイルのTomcatサーバーへのコピーなど)。

于 2012-08-30T04:17:06.143 に答える
1

いいえ。JavaEEコンテナ(Tomcat)は、compile自動的に/暗黙的に.javaファイルを作成することはできません。実際、JSP engineofcontainerはJSPを解析し、クラスファイルを生成します-JSP-wiki

EclipseBuildStoryをご覧ください

于 2012-08-30T04:18:12.770 に答える