12

私はJavaEnterpriseとSpringを初めて使用しますが、標準のJavaを十分に理解しています。私は既存のWebアプリケーションプロジェクトを調べています。プロジェクトはTomcat/Spring / Hibernateを使用していますが、これはかなり一般的であると私は理解しています。また、リモートメソッド呼び出しにDWRを使用します。責任を分離するのはやや難しいと感じています。Tomcatが責任を負うもの、Springが責任を負うもの、リクエストが相互にどのように取得されるか、Springの主要部分がどのように組み合わされるかです。私はSpringに関する多くのドキュメント、特に豆と豆工場に関するドキュメントを読みましたが、まだもっと読む過程にあります。アドバイスは大歓迎ですが、具体的な質問をいくつかご紹介します。

質問1:web.xmlはどこに適合しますか(いつ使用/呼び出され、どこから呼び出されますか)?

コードサンプル1:

    <servlet>
    <servlet-name>qrst</servlet-name>
        <display-name>qrst Servlet</display-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

上記のスニペットは何をしますか(または、それが何を引き起こしますか)?私のWebアプリのある時点でqrst.jspが使用されます。サーブレット名を使用してqrst.jspを呼び出すのはDispatcherServletですか?それ以外の場合、サーブレット名の意味は何ですか?起動時の負荷とは何ですか?

コードサンプル2:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /someLocation/some-servlet.xml
    </param-value>
</context-param>

上記が何をするかについてのリンクまたは説明?XMLファイルを見ると、Beanの定義が含まれていることがわかり、Beanとは何か、どのように使用されているかはわかりますが、これに関する他の詳細はわかりません。

コードサンプル3:

<servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <display-name>DWR</display-name>
  <servlet-class>
        org.directwebremoting.servlet.DwrServlet
</servlet-class>
    <init-param>
        <param-name>classes</param-name>
        <param-value>
            somepackage.someclass
        </param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

Beanについて読んだことから、これらのinit-param要素は、サーブレットのjavaクラスで設定される単なるパラメーターであると思います。サーブレット名の意味は何ですか?また、起動時の負荷はどうですか?Webアプリは、AJAX(dwr)呼び出しが発生しているときと、Webアプリが初めてロードされているとき(初めてロードするときにqrst.jspを使用する必要があるとき)を何らかの形で「認識」します。どうやってこれを知るのですか?qrst.jspではなくDWRにリクエストをルーティングすることをどのように決定しますか?これはどこで行いますか?

ありがとう。

4

1 に答える 1

17

サーブレットは、 HTTPリクエストに応答するためのJavaEEのイディオムです。リクエストに応答するサーブレットでアプリケーションの動作をプログラムします。

Tomcatはサーブレットコンテナです。つまり、アプリケーションをTomcatにデプロイすると、すべての通信インフラストラクチャが管理されます。接続を受け入れ、データベース接続(*)を管理し、サーブレットを呼び出して着信要求を処理します。

web.xmlSpringではなくJavaEEアプリケーションの一部です。コードサンプル1は、アプリがクラスのインスタンスを使用してorg.springframework.web.servlet.DispatcherServlet着信リクエストを処理することを宣言しています。

サーブレットはJavaEE開発の基本的な基盤ですが、独自に作成することはお勧めしません。代わりに、Springを使用してMVCコントローラーを作成します。次に、DispatcherServletはこれらのコントローラーを呼び出して要求を処理します。これは単なる別の間接参照です(ただし、非常に強力な間接参照です!)

サーブレット名を使用してqrst.jspを呼び出すのはDispatcherServletですか?

直接ではありません。サーブレットとJSPファイルの名前が同じであるのは偶然です。

起動時に何が読み込まれますか?

コードサンプル2は、ファイルからBeanをロードするようにDispatcherServletに指示します/someLocation/some-servlet.xmlこのファイルにコントローラーBeanがあり、 URLマッピングの構成方法に従って、このファイルのBeanが着信要求に応答します。リファレンスを参照してください。

これらのinit-param要素は、サーブレットのJavaクラスで設定される単なるパラメータであると思います。

web.xmlのinit-param要素はサーブレットクラス用です。

Webアプリは、AJAX(dwr)呼び出しが発生しているときと、Webアプリが初めてロードされているとき(初めてロードするときにqrst.jspを使用する必要があるとき)を何らかの形で「認識」します。どうやってこれを知るのですか?

質問から欠落しているのは、<servlet-mapping>要素(web.xmlにあります)またはURLマッピング(Springファイルにあります)のいずれかです。これらは、URLをディスパッチャサーブレットとdwrサーブレットのどちらで処理するかを決定する役割を果たします。

たとえば、次のようなサーブレットマッピングを使用します。

<servlet-mapping>
    <servlet-name>qsrt</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>dwr</servlet-name>
    <url-pattern>*.dwr</url-pattern>
</servlet-mapping>

次に、で終わるすべてのURL.doはディスパッチャサーブレットによって応答され、で終わるURL.dwrはdwrサーブレットによって処理されます。ここで、サーブレットの名前が重要になります。

JSPファイルは別の話です。コンテナは単にそれらを使用して、*。jspで終わるURLを処理します。で終わるURLのonwサーブレットマッピングを作成しないでください*.jsp。これは頭​​痛を引き起こすだけです。これはおそらく不特定の動作です。

編集:

ただし、ブラウザのアドレスバーのURLは常に同じように見えます。つまり、常にqrstサーブレットを呼び出します。

次に、サーブレットマッピングが非常に広いため(:)のよう<url-pattern>/*</url-pattern>に、サーバーにスローしたものをすべて処理し、他のサーブレットがそれを処理する機会を与えない可能性があります。

最後になりましたが、DWRまたは任意のAjaxテクノロジーを使用する場合は、Firefox用のHttpFox拡張機能をインストールして、アプリケーションのAjax呼び出しを監視できるようにします。

于 2011-04-29T20:59:18.607 に答える