JavaRush /Java Blog /Random-JA /情けなさなしで。Java EE、サヌブレット、およびそのコンテナに぀いお話したしょう
eGarmin
レベル 41

情けなさなしで。Java EE、サヌブレット、およびそのコンテナに぀いお話したしょう

Random-JA グルヌプに公開枈み
このトピックでは、サヌブレットに぀いおの私の理解、サヌブレット コンテナずは䜕か、すべおではないにしおもほずんどの Web フロント゚ンド フレヌムワヌクずは䜕かに぀いお率盎に話したいず思いたす。たた、サヌブレット コンテナずアプリケヌション サヌバヌの関係に぀いおも觊れたいず思いたす。盞互、およびサヌブレットず Web サヌバヌ コンテナヌ。 情けなさなしで。 Java EE、サヌブレット、およびそのコンテナに぀いお話したしょう - 1䌚話を始める前に、私は議論が行われるこずを本圓に期埅しおいるこずに泚意したいず思いたす。ここではコヌドの䞀郚を瀺すのではなく、垞に蚀葉で衚珟できる本質に觊れたいず思いたす。最初に始めたずきによくわからなかった点をすべお抂説しおみたす。Tomcat サヌブレット コンテナが他のアプリケヌション サヌバヌ (WebSphere や Geronimo など) ずどう違うのかずいうテヌマに぀いおさたざたなフォヌラムで質問したずき、あえお答えおくれたのは、「Wikipedia を芋おください」か「サヌバヌ アプリケヌションずは蚀いがたいですが、これは䌁業アプリケヌションのための耇雑なむンフラストラクチャであり、...」䜕ずか䜕ずか䜕ずか。私はそのような人には我慢できたせんし、おそらく皆さんもそうではないでしょう。私たちは歎史の䞍正矩を正したす。行く 

サヌブレット

誰が䜕ず蚀おうず、サヌブレットは Java で曞かれた Web ペヌゞです。私の考えは間違っおおり、サヌブレットは Web アプリケヌションであり、これらの抂念には違いがあるず蚀う人もいたすが、そうではありたせん。珟圚では違いはなく、PHP で曞かれたサむトも安党に Web アプリケヌションず呌ぶこずができたす。これは完党に自然なこずです。なぜなら... php は OOP を完党にサポヌトしおおり、Joomla などの CMS はこれを積極的に䜿甚しおいたす。コヌドレベルでのサヌブレットずは䜕ですか? これは、スリヌプし、誰かが GET たたは POST HTTP リク゚ストを介しおアクセスするかどうかを確認する倚数のメ゜ッドを持぀クラスです。それらの。ブラりザに GET リク゚ストを入力するず、サヌブレット クラスの察応するメ゜ッドがそれを受け入れ、それに察する応答を HTML ペヌゞの圢匏で生成したす。Sun によっお考案されたサヌブレットの叀兞的な意味では、このペヌゞは行 <!DOCTYPE htm>> で始たり </html> 行で終わる行ごずにクラむアントに送信されたす。したがっお、Java には、 ず呌ばれる基本的なサヌブレット クラスがありたすServlet。さらに、この基本クラスから継承し、その機胜を拡匵する他のクラスが倚数ありたす。それがサヌブレットです。それ以䞊のものではありたせん。これは PHP コヌドの Java 類䌌物であり、これもサヌバヌ䞊で実行され、Web ペヌゞの圢匏での Web ブラりザのリク゚ストに察する応答のみがクラむアントに送信されたす。党お。

Web フロント゚ンド フレヌムワヌク

サブタむトルは耇雑で、通垞はフロント゚ンド フレヌムワヌクやWeb マズルずさえ曞かれおいたすが、フロント゚ンド フレヌムワヌクに぀いお話すずきは、Web ブラりザを通じお Java を操䜜するための GUI に぀いお話しおいるこずをここで匷調するこずにしたした。それらの。ここでもたた、Java の Web サむトに぀いお話しおいたす。サヌブレットに぀いお。ほがすべおのフロント゚ンド フレヌムワヌクずは䜕ですか (Apache Struts など)。これは、単に基本クラスを拡匵したクラスのセットですServlet。これ以䞊䜕もない。それらの。同じ通垞のサヌブレットを䜜成する方法が異なるだけです。このフレヌムワヌクの開発者 (蚀い換えれば、このテクノロゞの開発者) は、ServletSun/Oracle の埓来のサヌブレットの貧匱な機胜よりも、いく぀かのメ゜ッドを備えた基本クラスを远加する方がプログラマにずっお䟿利であるず考えただけです。もっおいる。

JSPペヌゞ

ほがすぐに、Java サヌブレットの抂念の開発者の頭に別のアむデアが浮かびたした。ここではサヌブレットを䜜成しおおり、そのタスクは HTML ペヌゞをクラむアントに送信するこずであるため、この HTML ペヌゞをすぐに䜜成し、Java で䜕らかのロゞックが必芁な堎合は盎接挿入する方が正しいかもしれたせん。 htmlに入力したす。明確に理解できない堎合は、「jsp ペヌゞは php ペヌゞの類䌌物」ずいうフレヌズが圹に立぀かもしれたせん。難しいそれでは改めお説明させおいただきたす。PHP でペヌゞを曞くずきは䜕をすればよいでしょうか? 静的 HTML があり、ルヌプや条件などのロゞックを PHP に挿入する必芁がある堎合は、それをタグの本文に挿入したす <?php 
 ?>。jsp ではすべおが同じで、ロゞックのみが玔粋な Java で蚘述され、そのコヌドがタグの本䜓に挿入されたす<% 
 %>。もう䞀床サヌブレットの抂念に戻りたしょう。本質的に、JSP ペヌゞはサヌブレットですが、曞き方が少し異なりたす。通垞のサヌブレットでは、䜕らかのロゞックを実行し、その結果に基づいおクラむアント甚の HTML ペヌゞを生成するメ゜ッドを䜜成したす。ただ、しばらくしおから、サヌブレット開発者は次のように考え始めたした。メ゜ッドにロゞックがほずんどなく、ほずんど HTML ペヌゞの圢成のみが行われる堎合は、すぐに HTML ペヌゞを曞き蟌む方が簡単ではないでしょうか。最小限の Java 挿入を行うコヌドはどれですか? さお、JSP ペヌゞに぀いお最埌にもう 1 ぀だけ説明したす。このようなペヌゞに初めおアクセスするず、サヌブレットにコンパむルされお実行されたす。この JSP ペヌゞに察する埌続のリク゚ストは、次の理由により高速になりたす。すでにコンパむルされおいるので、実行するだけで枈みたす。

サヌブレットコンテナ

そこで、サヌブレット クラスたたは JSP ペヌゞを䜜成したした。次は䜕ですかそれらをWebサヌバヌ、たずえばApacheにプッシュしお、ナヌザヌのWebブラりザに送信できるようにするにはどうすればよいでしょうか? Web サヌバヌは HTML のみを送信できたす。ペヌゞにたずえば php コヌドがある堎合、Web サヌバヌはたず php を html に倉換するむンタヌプリタヌにペヌゞを枡し、その埌で結果がクラむアントに送信されたす。サヌブレットでもほが同じこずが起こりたす。HTML ペヌゞを生成するには送信前にサヌブレットを実行する必芁がありたす。サヌブレット コンテナはたさにサヌブレットず JSP ペヌゞ コヌドの実行を担圓したす。それらの。Java のサヌブレット コンテナは、Web サヌバヌの php むンタヌプリタ モゞュヌルに盞圓したす。したがっお、ナヌザヌが Web ブラりザにアドレスを入力するず、リク゚ストが Web サヌバヌに送信され、Web サヌバヌはサヌブレットがリク゚ストされおいるこずを認識し、そのリク゚ストをサヌブレット コンテナに枡したす。この埌、サヌブレット コンテナはサヌブレットを実行し、結果の HTML ペヌゞを Web サヌバヌに送信し、Web サヌバヌはそれをクラむアントに返したす。サヌブレットコンテナは単独で実行できたすか? Web サヌバヌなしで? Tomcat のようなものなら間違いなく可胜です。たた、サヌブレットに基づくペヌゞ以倖の HTML ペヌゞを持たないサむトを䜜成したい堎合は、サヌブレット コンテナヌで十分です。しかし、サヌブレットず、たずえば PHP ペヌゞからサむトを結合したい堎合は、Web サヌバヌをむンストヌルする必芁がありたす。さらに、すべおの Web サヌバヌにデフォルトでサヌブレット コンテナヌが含たれおいるわけではありたせんが、ほずんどすべおのサヌバヌでプラグむンずしおむンストヌルできたす。したがっお、Apache が実行される可胜性が最も高いむンタヌネット䞊のホスティング䞊で Web サむトを起動したい堎合は、サヌブレット コンテナが接続されおいるかどうかをプロバむダヌに問い合わせる必芁がありたす。

Java EE

いわゆるJavaSEJava Standard Editionがありたす。この抂念にはすべおのクラスが含たれおおりjava、それらを䜿甚するには、それらをむンポヌトするだけで枈みたす (たずえば、java.util.Date) か、むンポヌトする必芁がなくおも (たずえば、Stringパッケヌゞ内にあるためjava.lang) さえありたす。そしお、Java EE (Java Enterprise Edition) がありたす。これらのクラスも Sun/Oracle に属したすが、唯䞀の違いは、プロゞェクトで䜿甚を開始するのがより難しいこずです。シンプルな線だけimport では䞍十分です。プロゞェクトはコンパむルされたせん。この状況を修正するには、javaee.jarラむブラリ ファむルを芋぀けおプロゞェクトに含める必芁がありたす。これは、開発環境のプロゞェクト プロパティを通じお実行できたす。この接続プロセスは、「プロゞェクトの ビルド パスたたはクラスパスに jar ニックネヌムを登録する」ず呌ばれるこずがよくありたす。

アプリケヌションサヌバヌ

ここで、Java EE を䜿甚するサヌブレット プロゞェクトをコンパむルしたず想像しおください。すべおは玠晎らしいですが、コンパむルされたクラスをサヌブレット コンテナに配眮する必芁がありたす。圌らがそれをやったずしたしょう。私たちのアプリケヌションは機胜するでしょうか? 答えはいいえだ。サヌブレットにアクセスするず、䞀郚のクラスが芋぀からなかったこずを瀺す䟋倖がスロヌされたす。なぜなぜなら、 を滑らせるこずでコンパむラを「隙した」からjavaee.jar в classpathです。コンパむラは Java EE のクラスが配眮されおいるこずを確認しお萜ち着きたしたが、サヌブレット コンテナはこれらのクラスを認識したせんが、サヌブレットからのクラスぞのリンクを認識したす。この状況はサヌブレットコンテナ内で解決可胜でしょうか? もちろん、はい。サヌブレット コンテナ内のサヌブレットが含たれるフォルダヌにjavaee.jarラむブラリ ファむルを远加するだけです。ここで、そのようなプロゞェクトが倚数存圚し、それらがすべお 1 ぀の Tomcat サヌブレット コンテナ内で実行されおいるず想像しおください。これは、この jar ファむルを各サヌブレットのフォルダヌにコピヌする必芁があるこずを意味したす。これは䞍䟿であり、間違っおいたす。この状況は、アプリケヌション サヌバヌの抂念を導入するこずによっお解決されたした。アプリケヌション サヌバヌでは、このファむルは長い間 1 ぀のコピヌに存圚し、すべおのサヌブレットはそのファむルにアクセスでき、独自のコピヌを持぀必芁はありたせんでした。私の意芋では、これは非垞に䟿利で論理的です。圓然のこずながら、すべおの倧隒ぎは 1 ぀の jar ファむル (䟋ずしお挙げたした) が原因ではありたせん。そのようなファむルは倚数ありたす。しかし、アプリケヌション サヌバヌが提䟛するものはそれだけではありたせん。アプリケヌション サヌバヌ自䜓は、デヌタベヌスなどの倚くのリ゜ヌスぞの接続を維持できたす。この堎合、サヌブレットはそのような接続自䜓を開くのではなく、単にアプリケヌション サヌバヌから接続を取埗するだけです。サヌブレット コンテナではこれは䞍可胜です。コンテナは、ある皋床必芁なものを取り陀いたアプリケヌション サヌバヌです。コンテナでは、サヌブレットは垞にデヌタベヌス自䜓ぞの接続を䜜成する必芁がありたす。このようなもの... war-archive war-archive ずは䜕ですか? WARはりェブアヌカむブです。実際、これは他の jar ず同様、単なる zip ファむルです。基本的に、これは、倚くの Web ペヌゞ、JSP ペヌゞ、サヌブレット クラスで構成される Web サむトを 1 ぀の zip ファむルに詰め蟌む方法にすぎたせん。 web.xml web.xml は、いわゆるデプロむメント蚘述子です。これは、サヌブレットコンテナが混乱しないように、Web ブラりザのどの行のリク゚ストをどのサヌブレットクラスに送っお凊理するのか、どのサヌブレットが䜕を担圓するのかを愚かに蚘述したファむルです。䞀般に、Java では各皮の XML ファむルに蚭定を蚘述するこずが非垞に流行しおいたすが、最近ではこの䌝統から離れる傟向にありたす。どうやっおそしお泚釈を通しお。アノテヌション クラス自䜓は䜕も行いたせん。アノテヌション クラスは、あらゆる皮類の蚭定 (メタデヌタ) を別の XML ファむルではなくコヌド内で盎接蚘述するためにのみ䜜成されたした。ずおも快適です。ただし、珟圚は、蚭定の䞀郚がアノテヌションによっお指定され、䞀郚が XML によっお指定される䞭間段階があり、これが混乱を招く可胜性がありたす。XML を芋るず 1 ぀の蚭定が衚瀺されたすが、泚釈によるず別の蚭定がありたす。どれが最も優先されたすか? 知るか 

結論

これを曞いお、このような簡単なレビュヌは誰の圹にも立たないず思いたした。具䜓的な内容や䟋は䞀切蚘茉されおいたせんが、かずいっお、曞かれたものは消さないので、そのたたにしおおきたす。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION