初歩的な質問です。
改めてapacheとtomcat、所為Webアプリケーションとは?的なことを勉強してます。
今の私の理解としてapacheとtomcat(で連携している場合)は以下のように認識しています。
・apacheがリクエストを受け、tomcatに処理を依頼する
・tomcatでサーブレットを実行
・apacheが結果をクライアントに返す
めちゃくちゃざっくりと書いてしまいましたがこんな感じでしょうか。
お客さん(クライアント)の注文をレジ(apache)が聞き、厨房(tomcat)が調理して、レジがお客さんに渡す。
みたいな認識・・・あれ、例えられてます?
すいません、逸れましたがそんな風に概要を理解しているのを前提として質問です。
tomcatは動的コンテンツが含まれない限り不必要なのでしょうか。(静的コンテンツのみの場合とか)
基本的にwebアプリケーションは言語関係なくWebサーバとサーブレットコンテナが仕事をしているのでしょうか。
また、apacheとtomcatの連携などそのあたりの詳細があるような参考サイトなどご存知でしたら教えて頂けたらと思います。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
ベストアンサー
tomcatは動的コンテンツが含まれない限り不必要なのでしょうか。(静的コンテンツのみの場合とか)
静的コンテンツのみの場合は普通Tomcatは使わないと思いますが、Tomcatを用いて静的コンテンツを配信することは、やりたければやってもいいです。
基本的にwebアプリケーションは言語関係なくWebサーバとサーブレットコンテナが仕事をしているのでしょうか。
この辺、ちょっとややこしいです。
まず、サーブレットコンテナを含む用語として「アプリケーションサーバー」というものがあります。アプリケーションサーバーとは、要はアプリケーションを動かす機能をもったサーバーのことで、Tomcat(サーブレットコンテナ)は、Javaによるサーブレットアプリケーションを動かす機能を持つサーバーなので、アプリケーションサーバーの一種と言えます。
しかし、この定義ですと、Apacheにもアプリケーションを動かす機能がある(mod_phpなどによりその機能を追加できる)ので、Apacheもアプリケーション・サーバーの一種という言い方が可能です。現に、最近はApache上でPHPを動かしながら、その前面にNginxを用いる構成も一般的なので、Nginx=Webサーバー、Apache=アプリケーションサーバーという役割分担になることも珍しくありません。Apacheがアプリケーション・サーバーだと言われると私は違和感がありますが、そのように説明している記事もあります。
しかも、多くのアプリケーションサーバーは、単体でWebサーバーとしての機能を持っています。
つまり、Webサーバーとアプリケーションサーバーは固定的なものではなく、使い方によって、同じソフトウェアがWebサーバーになったり、アプリケーションサーバーになったり、場合によってはキャッシュサーバーになるわけです。
ややこしいですか? 頭が混乱してきませんか?
では、Tomcatを使うのはどういう場合か。それは、「Javaにより開発されたWebアプリケーションを動作させる場合」です。使おうと思えば静的コンテンツをTomcatで配信できますが、Tomcatは大きなソフトウェアであり、取り扱いもApacheに比べて難しいので、わざわざTomcatで静的コンテンツのみを配信する動機がありません。
次に、TomcatとApacheを組み合わせて使う場合が多い理由についてです。
Tomcatが遅いから、と思っている人が多く、私も以前はそう思っていましたが、Tomcatハンドブック 第2版 という本には「静的コンテンツにおいてもApacheよりもTomcatの方が速い」と書いてあります。この本、実にTomcat愛に満ちた本でして、TomcatをApacheと組み合わせて使うなんてとんでもないことだ。Tomcatは完全なソフトウェアであり、Apacheで補完する必要などない、という論調だったと記憶しています。
手元に本がありませんが、上に書いたことは、以下のブログ記事に紹介されているので読んでみてください。
Tomcatのウェブサーバが、Apache httpdよりも高速に動作するという事実 | ミネルヴァの梟は黄昏とともに飛び始める(山下 大介 公式ブログ)
この記事でも引用されていますが、Tomcatの欠点として、以下が挙げられています。
- Tomcatには、Apache httpdほど豊富な支援ソフトウェアが存在していない
- Tomcatを熟知している人材は、Apache httpdを熟知している人材よりも少ない
- Tomcatが提供している機能は、Apache httpdが提供している機能よりも少ない
- Tomcatは、Apache httpdと比較して起動/停止時間が長い
加えて、今まで出てきていないポイントとして、「Tomcatは80 / 443ポートで待ち受けできない」という問題があります。やろうと思えばTomcatをrootで動かせばできる(そういうサーバーは世の中にあります)のですが、セキュリティ的に危険すぎるので、Tomcatは8080ポート等で待ち受けさせておいて、別の手段で80 / 443ポートで待ち受けします。代表的な方法がApacheを使うものですが、iptablesを使う方法もあります。最近だと、Apacheの代わりにNginxを用いる場合が多いと思います。
まとめると以下の通りです。
- ApacheもTomcatも、Webサーバーとしての機能とアプリケーションサーバーとしての機能の両方を備える
- Tomcatを使うのは、JavaによるWebアプリケーションを動かす場合に限られると言って良い
- Tomcatによる静的コンテンツ配信が遅いというのは誤解も含んでいるが、現実には静的コンテンツ配信はApache(あるいはNginx)を用いる場合が多い
- ApacheはTomcatに比べて周辺の支援ソフトウェアが豊富なので、プログラムを作らなくても拡張モジュールだけでできることが多い(のでApacheが重宝される)
- Tomcat単体では80 / 443ポートで待ち受けできないので、Apacheを用いて80 / 443で待ち受けする場合が多い(他の方法でも可能なのでApacheが必須とまでは言えない)
- 最近は「高速なWebサーバー」としてのApacheの地位はNginxに奪われている
投稿2019/04/19 06:22
編集2019/04/19 06:26総合スコア11705
0
apacheとtomcat、両者の特徴や関係は「Tomcat」と「Apache」の違い の記事にざっくりと書かれています。
雰囲気をつかむのに良いと思います。
投稿2019/04/19 01:22
総合スコア6919
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
私のブログでProxyサーバーとはの中でApache + tomcatを例にした記事があります。
Javaで作成したWebアプリの公開方法としてメジャーなApacheとtomcatの組み合わせがあります。Apacheを使用せずtomcatだけでも公開することができますが、なぜApacheを使用するかというとWeb通信の最適化を行うためです。tomcatはHTMLを平文で出力します。apacheを使用しない場合は圧縮などを行わずに通信を行います。tomcatとはJavaサーバーなので通信の最適化は得意ではありません。そこでApacheの圧縮・キャッシュなどの機能を使い最適化します。
投稿2019/04/19 05:17
総合スコア1480
0
個人的には、例え話は例え話でしかないのであまり良くないかな、と。
理解しづらい場合は図解に頼るのが一番いいと思っています。
古い記事ですが、以下の図が結構端的に表現されているのではないかと思います。
https://images.app.goo.gl/xfKtzzqyq2MVuSBM9
tomcatは動的コンテンツが含まれない限り不必要なのでしょうか。(静的コンテンツのみの場合とか)
tomcatはJSPを動作させるものですので、静的コンテンツのみでJavaのコードが含まれないサイトであれば不要ですね。
基本的にwebアプリケーションは言語関係なくWebサーバとサーブレットコンテナが仕事をしているのでしょうか。
サーブレットコンテナと言うとJava感に溢れますが、だいたいその理解で合ってます。
例えば、PHPであれば、最近の流行りはWebサーバーであるnginxと、php-fpmというPHPを実行するサーブレットコンテナみたいなもので構築されることが多いです。
https://images.app.goo.gl/uQACsDsWV3tM8sSJ6
但し、nodeの場合は、Webサーバー自体もnodeで組まれているexpressというものを使うことがあり、
必ずしもWebサーバーと言語を実行する環境が分離されているわけではありません。
投稿2019/04/19 02:18
編集2019/04/19 02:19総合スコア241
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/19 07:00