現在、Windows2000+Apache1.3.20+TomCATにてAPPサーバを構築したのですが、作成したServletやJSPはどこへ置けばいいのでしょうか?
Apacheのドキュメントルートは
DocumentRoot "D:/Program Files/Apache Group/Apache/htdocs"
でTomCATは
D:\Program Files\jakarta-tomcat-3.2.3\
の中にconfやbin,webappsなどすべてのファイル/フォルダが入っています。
どうやら、サンプルはwebappsに入っているようです。

Apacheを起動しなくても、8080ポートで接続すればTomCATの画面が現れるので、なぜApacheが必要なのかという疑問と、ServletやJSPの置き場所は?という疑問にぶつかってます。

どなたかよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

> WEB-INF/classes


> がURLでは
> servlet
> となるんでしょうか?決まりですか?

明示的に定義をしなかった場合の決まりです。ここにしか置けない、ということでは
無いです。

URL と実際のファイルの対応付けは、web.xml で行なえます。例えば、
WEB-INF/classes/test.class という名前で置いてあるサーブレットは、
http://ホスト名/servlet/test という URL でアクセスすることになるのは、
前の回答で書きましたが、それを http://ホスト名/test という URL で
アクセスしたければ、web.xml に

<web-app>
  <servlet>
    <servlet-name>
      test
    </servlet-name>
    <servlet-class>
      test
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>
      test
    </servlet-name>
    <url-pattern>
      /test
    </url-pattern>
  </servlet-mapping>
</web-app>

こんな感じの定義をします。servlet タグで、サーブレットのクラスに名前を
割り当ててあげて、servlet-mapping タグで、その名前に対して URL を割り当てる
という感じです。

web.xml は、conf/ 配下にもありますし、WEB-INF/ 配下にもあります。
サーブレットの URL の定義だったら、WEB-INF/ 配下の方が良いでしょう。


> ApacheのWEBサーバでAliasを作成したわけでもないのになぜこんなことができてしまうのか?

mod_jk を使っているんですね?

conf/mod_jk.conf をベースにした定義ファイルを apache の httpd.conf に
記述するか、インクルードしていると思います。それがポート:80 を使った場合の
動作の定義になります。

mod_jk.conf にある JkMount で定義したパターンに当てはまる URL は tomcat
の方に転送されます。デフォルトのままだとポート:8007 が使われるはず。

ポート:8080 を使った場合には、conf/server.xml の Connector タグでの
記述が使われます。
    • good
    • 0
この回答へのお礼

ありがとうございます。非常によく理解できました。
今後ともよろしくお願いします。

お礼日時:2001/09/03 18:52

>Apacheを起動しなくても、8080ポートで接続すればTomCATの画面が現れるので、


>なぜApacheが必要なのかという疑問

上記の疑問ですが、単純にサーブレットを実行するだけであれば、tomcatが持つ
WEBサーバ機能だけで十分です。
ただし、tomcatが持つWEBサーバ機能はあくまでサーブレットの単体テストを
行う環境を提供する程度の意味しかもたず、実際にインターネット上に公開して
サーブレットを実行できるようなWEBサーバを構築しようと思った場合、tomcat
のWEBサーバ機能は、セキュリティなどの面であまりにも貧弱です。

というわけで、通常はtomcatに限らず、いろんなサーブレットコンテナは
とりあえずWEBサーバ機能は持っているものの、ApacheやIISといった本職の
WEBサーバにアドオンして動作出来るように作られています。

> あと、URLでexamples以下のディレクトリは
> port8080でもport80でも同じ画面が出てきます。
> port80はApacheのWEBサーバ機能
> port8080はTomcatのWEBサーバ機能
> ということはわかっているのですが、ApacheのWEBサーバでAliasを作成した
> わけでもないのになぜこんなことができてしまうのか?ひょっとすると
> ApacheTomcat連携モジュールであるmod_jk.dllをD:\Program Files\Apache
> Group\Apache\modulesにインストールしたからでしょうか?

これは、おっしゃる通り連携モジュールのおかげです。
連携モジュールの中身を見たわけではないので、類推に過ぎませんが、
tomcatのApache連携モジュールは、Apacheへのリクエストを監視して、
それが自分のコンフィグファイル(server.xml)に記述されたURLへの
参照である場合に、ユーザからのリクエストを横取りして処理を行っている
ようです。

なので、Apacheのhttpd.confの中にtomcat用の連携モジュールのロード命令が
あるはずですが、それをコメントアウトすると、ポート80ではexamples配下の
内容は見えなくなるはずです。

# 試したわけではありませんが。。。
    • good
    • 0
この回答へのお礼

ありがとうございます。
簡易WEBサーバとしてなら、Tomcatでも言いということですね。スッキリしました。ありがとうございます

お礼日時:2001/09/03 18:45

> 作成したServletやJSPはどこへ置けばいいのでしょうか?



tomcat のインストールディレクトリの下にある conf ディレクトリの server.xml で
置き場所を定義します。

デフォルトで、以下のような定義があるはずです。

<Context path="/examples"
docBase="webapps/examples"
crossContext="false"
debug="0"
reloadable="true" >
</Context>

これは http://ホスト名/examples/なんとか というリクエストは、(インストール
ディレクトリ配下の)webapps/examples の下を探すよ、という意味です。

基本的に jsp は、html と同じように、配置ディレクトリが URL に対応すると
思って良いです。例えば、webapps/examples/a-kuma/test.html というファイルは
http://ホスト名/examples/a-kuma/test.html という URL に対応します。

servlet は、基本的に配置ディレクトリ配下の WEB-INF/classes に配置します。
何も考えなければ、webapps/examples/WEB-INF/classes/test.class という
servlet は、http://ホスト名/examples/servlet/test という URL に対応します。

ただ、java で言うパッケージや、classpath の通し方、web.xml というファイルの
定義で、ファイルと URL の対応はいろいろバリエーションがあります。
    • good
    • 0
この回答へのお礼

ありがとうございました。
servletだけちょっと変わったところにおく必要があるんですね。でもなんで
WEB-INF/classes
がURLでは
servlet
となるんでしょうか?決まりですか?それともどこかで定義しているんでしょうか?

あと、URLでexamples以下のディレクトリは
port8080でもport80でも同じ画面が出てきます。
port80はApacheのWEBサーバ機能
port8080はTomcatのWEBサーバ機能
ということはわかっているのですが、ApacheのWEBサーバでAliasを作成したわけでもないのになぜこんなことができてしまうのか?ひょっとするとApacheTomcat連携モジュールであるmod_jk.dllをD:\Program Files\Apache Group\Apache\modulesにインストールしたからでしょうか?

お礼日時:2001/08/31 15:06

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFreeBSD Apacheの環境でサーブレットやJSPは使用できますか?

 Javaについての質問ですが
FreeBSD Apacheの環境でサーブレットやJSPは使用できますか?
FreeBSD Apacheの環境でのサーブレットやJSPの実装は存在しますか、という質問です。
Javaに詳しい方、どうかよろしくお願いいたします。

Aベストアンサー

FreeBSD上でサーブレットやJSPを動かすためには、
・Tomcatなどのアプリケーションサーバ(Javaサーバ)
・JVM(Java実行環境)
が必要です。

TomcatはJavaで書かれているためプラットフォーム非依存なので○○版、というのはありません。
(配布ファイルの圧縮形式でZip版とtar.gz版とWindows向けインストーラつきのexe版がありますが、中身のTomcat本体はどれも同じのはずです。)

次にFreeBSD用のJava実行環境ですが、次のところから入手できるようです。しかしSunのJVM仕様とどのくらい互換性があるのかわかりませんので、Tomcatが正しく動作するかというと、私にはわかりません。

参考URL:http://www.freebsd.org/ja/java/

QTOMCATで\webapps\ROOTフォルダで自作のindex.jspを表示させるには。

いままで、TOMCATで\webapps\ROOT内に、
index.htmlをおき、トップページにしていましたが、
これを、index.jspに変えようと思いました。
しかし、index.jspは、もともと、TOMCAT宣伝用の
index.jspがあるので、これの名前を変えたのですが、
どうしても、index.jspでこの宣伝用のページ
が表示されてしまいます。
いままで使っていたので、なんとか現在の
ドキュメントルートでindex.jspを使いたいのですが、
どうしたらいいでしょうか。
(WEB-INF内のweb.xmlのservlet-mappingの設定が、
関係ありそうですが)。
お願いします。

Aベストアンサー

ROOT内のWEB-INF内にあるweb.xmlをエディタなどで開いてください。そして以下の部分を探してください。

<servlet-mapping>
<servlet-name>org.apache.jsp.index_jsp</servlet-name>
<url-pattern>index.jsp</url-pattern>
</servlet-mapping>

この部分をコメントアウトします。つまり、手前に<!--を、後に-->をつけて、

<!--
<servlet-mapping>
<servlet-name>org.apache.jsp.index_jsp</servlet-name>
<url-pattern>index.jsp</url-pattern>
</servlet-mapping>
-->

こうするわけですね。
これで、http://localhost:8080/でwebapps/ROOT/index.jspが表示されると思います。

QApache環境でJavaサーブレットを動かすのには?

Windows2000のマシンに「Apache for Win32(Ver1.3)」と「JDK1.3」をインストールし、
そのサーバで実際にJavaサーブレットで作成したページを表示させようとしました。
しかし、サーブレットのソース(****.java)を「javac」でコンパイルしたところ、
エラーが発生して、うまく動作されませんでした。
雑誌にあったサンプルをコンパイルしたので文法的には当たっているので、
問題は環境にあるように思えるのですが、他にインストールするものはあるのでしょうか?

Aベストアンサー

サーブレットのコンパイルには、JDKとは別に、JSDKが必要です。
また、サーブレットを実行するのも、確か、Apacheだけでは無理です。
(昔は無理でした)
で、JRun、Apache JServ等のサーブレットエンジンと呼ばれるものを
インストールする必要があります。
(Tomcatを入れるのがいいのかな?)

QWindows98でProgram Files\javaへの環境変数の設定

Windows98にJAVAをインストールしたいのですが
(サーバーにしたい)。
javaへのPATHがうまく通りません。
おそらく、PATHでの\Program Filesの記載が長いのか
半角スペースがあるため、Windows98では、
うまくいかないものと思われます。
この場合、パスの通し方はどうなるのでしょうか。
JAVAをフォルダごとC:\下に動かすことも考えましたが、
今度は、JVMへのパス?(JVMの認識がうまくいかなく
なる)がきになります(Javaフォルダには、jdkとjre
があるので)。
98の場合、どうするのがいいのでしょうか。

Aベストアンサー

間に半角スペースがある場合、"~"ダブルクォーテーションで括ってもダメですかね?
"C:\Program Files\~"のような感じで。

Qサーブレットforward時の実行メソッドについて

初歩的な質問で失礼します。

サーブレットAに doGet, doPost, serviceメソッドを実装しています。
サーブレットBのdoPostメソッド内にて
サーブレットAにforwardを実行する場合に、
呼出されるのはサーブレットAのどのメソッドですか?

JSPへのforwardはできたのですが、
サーブレットへのforwardができず悩んでいます。

サーブレットのAPIを読んでもいまいちわかりません。
何かメソッドに関する制約があるのでしょうか?
上の質問は全くマト外れでしょうか?

追加ですが・・・
サーブレットからforwardされたサーブレットで、
そこからさらにJSPへforwardすることはできますか?

Apache2.0.43+tomcat4.1.12+Java1.4.0_01です。

Aベストアンサー

> サーブレットBのdoPostメソッド内にて
> サーブレットAにforwardを実行する場合に、
> 呼出されるのはサーブレットAのどのメソッドですか?

doPost() のはず。実際には、forward するときの HttpServletRequest#getMethod() で取得できる文字列に従うはず。

> JSPへのforwardはできたのですが、
> サーブレットへのforwardができず悩んでいます。

forward に関して、servlet と JSP の違いはないはず(というか、JSP は自動コンパイルされる servlet だし)。
getRequestDispatcher() してるパスが間違っているのだと思います。

> サーブレットからforwardされたサーブレットで、
> そこからさらにJSPへforwardすることはできますか?

コンテナの実装次第だけど、forward() は、サブルーチン呼び出しと変わらないはずなので、
回数に制限はないはず。

QEclipseでServlet/JSP

エクリプス2.0.2を使っていますが、Servlet/JSPを使った開発でひとつ疑問があります。
ちなみに、
http://www.atmarkit.co.jp/fjava/rensai2/eclipse03/eclipse03.html
で各種設定いたしました。
JSPを作成するのは問題ないのですが、
Servletのクラスを作るときに、新規→クラスで、ソースフォルダがプロジェクト名か、j2srcのどちらかしか選択できません。コンパイルして、そのクラスをclassesに移動してやりましたが、それを実行するときに、
http://localhost:8080/myWeb/servlet/Hello
とすると、Helloクラスをダウンロードするような形になってしまうのです。URLはなんパターンか変えてやってみましたが、できません・・・。
どうすればうまくサーブレットを作って実行できるのでしょうか?
宜しくお願いします。

Aベストアンサー

どんなむちゃくちゃをやったとしても、
/WEB-INF/classes 以下に配置したクラスを
ダウンロードするようなことにはなりません。

ダウンロードが開始されてしまうのは、
環境のせいではなく、もしかしたらプログラム中の
response.setContentType の箇所に誤りがあるから
かもしれません。

そこの一文を見せてもらえませんか?

Qサーブレットを動せるレンタルサーバについて

サーブレットを動せるレンタルサーバについて

現在、ロリポップ(チカッパプラン)という月額500円程度の(PHPやMySQLが使える)レンタルサーバを借りていますが、共用サーバですのでサーブレットが動かせないです。(tomcatやJDKをインストールすること自体不可能)

そこでレンタルサーバでサーブレットを動かそうとする場合、高価な専用レンタルサーバを借り、
tomcatのインストールやJDKの設定を全部自分でやらないといけないのでしょうか?
最初から既にサーブレットが動く環境(Apache+tomcat)がデフォルトで用意されすぐに利用できるようなレンタルサーバは通常ないものでしょうか?

現在、ローカル環境を2つ構築しており、(2)のようなサーブレットが動作する環境が最初から整ったレンタルサーバがないものかと考えています。
普通はレンタルサーバを借りてサーブレットを動かそうとすれば、tomcatやらJDKやら自分で専用サーバにインストール&設定するものなんでしょうか?それ以外に手法はありますか?

ローカル環境は2つ構築していています。
(1) windows7 Xampp(Apache2.2+tomcat7連携)JDK6
(2) 自宅サーバ:centOS5.6 Apache2.2+tomcat5.5連携 JDK5 

サーブレットを動せるレンタルサーバについて

現在、ロリポップ(チカッパプラン)という月額500円程度の(PHPやMySQLが使える)レンタルサーバを借りていますが、共用サーバですのでサーブレットが動かせないです。(tomcatやJDKをインストールすること自体不可能)

そこでレンタルサーバでサーブレットを動かそうとする場合、高価な専用レンタルサーバを借り、
tomcatのインストールやJDKの設定を全部自分でやらないといけないのでしょうか?
最初から既にサーブレットが動く環境(Apache+tomcat)がデフォル...続きを読む

Aベストアンサー

最初から環境が整ってるというわけではありませんが最近は比較的安価にVPSが提供されてますが、それではダメなんでしょうか?

QjspからServletを呼び、元のjspページに戻るにはどうしたらよいですか?

・jspページにあるボタンを押すとServletに値を渡す。
・Servletで処理をする。
・処理の結果を元のjspページに表示する。

というプログラムを作りたいと考えています。
jspページ→Servletで処理をする、という所までは出来たのですが
その後元のページに戻すというところで困っています。

jspページは複数(十数ページ)あり、Servletは1つです。
a.jsp→Servlet→a.jsp
b.jsp→Servlet→b.jsp
このように、どのjspページから呼ばれても、元のjspページに
戻したいのですが、どのようにすれば実現できるでしょうか?

Aベストアンサー

doGetメソッドなら
import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class サーブレット名 extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
res.sendRedirect(new URI(req.getHeader("referer")).getPath());
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
(JDKやサーバーなどの環境、eclipse等を使用しているかなど、詳しく書いたほうがいいですよ^^!ロジック自体はもっといいものがあるかどうか検討してみてください。sendRedirectメソッドはリクエスト属性を保持しないので、必要な場合はRequestDispatcher#forwardメソッドの使用も考えられます。その場合はパスの記述が/アプリ名/ファイル名ではなく/ファイル名 になりますが(余談))

doGetメソッドなら
import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class サーブレット名 extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
res.sendRedirect(new URI(req.getHeader("referer")).getPath());
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
(JDKやサーバーなどの環境、eclipse等を使用しているかなど、詳し...続きを読む

QJava サーブレット間の値の受渡について

こんにちは

サーブレットAからサーブレットBへ値を渡して、
サーブレットAで、戻り値を取得したいと考えています。

条件としては、
・サーブレットBの改修はできない
・サーブレットBへはGet,Postで値を渡すことができ、
戻り値を数値で貰える
というものです。

サーブレットA側からサーブレットBへリダイレクトするやり方はわかったのですが、それだと処理が完全にサーブレットBに移ってしまい、戻り値に応じた処理がサーブレットA側で行えないのです。
一般的なプログラミングのように、コールして戻り値に応じて処理を分ける・・といったことは出来ないのでしょうか?

Aベストアンサー

サーブレットAからBへリダイレクトしたのでは、そのままページを移るだけですからお望みのような働きにはなりません。

どうしてもというなら、サーブレットAの中から、URLConnectionでサーブレットBに接続をし、結果を受け取って処理する、というような形になるかと思います。要するに、サーブレットAの内部から、HTTPでサーブレットBにアクセスするわけです。

QServletからJSPに遷移させた後もServletに制御を戻したいんですが

Java初心者です。宜しくお願いします。
現在、ServletからJSPに対してIncludeまたはForward
した後にServlet側にて処理を継続させる方法が
ないか調べています。
Forwardは×かなというところ
まではわかったのですがIncludeで行った場合
Servlet → JSPに遷移させた後に呼び出し元の
Servletに制御を戻す事は可能でしょうか。
また、一般的な方法がありましたらご教授お願いします。

宜しくお願いします。

Aベストアンサー

なぜそうしたいか?
というのがわからないので、適切な回答になっているか分かりませんが、

サーブレット
リクエストを受け取る

(継続させたい)処理を行う

JSPを返す

となっているんですよね?(今は)

サーブレット         スレッド
リクエストを受け取る

スレッドを生成して開始させる→処理を行う
↓              ↓
JSPを返す         処理を継続して行う

とすれば、サーブレットはスレッドを起動・開始すればすぐ処理が戻ってきますので、JSPを返した後も処理が継続できるのでは?

ただし、サーバーのリソースなどを考慮して下さいね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報