goo blog サービス終了のお知らせ 

Psalm

プログラマ向け技術メモ

Tomcatで404エラー

2010-11-16 15:06:32 | Tomcat
まず間違いなくコンテキストの設定が間違っている。
ちゃんとやったもん!と思っていても間違っている。

Tomcat6.0の場合、コンテキストの設定は
conf/Catalina/localhost/xxxxx.xml
に書く。

例えば、Webアプリ名がtestAppなら
URLは
 http://localhost:8080/testApp/
コンテキストファイルは
 conf/Catalina/localhost/testApp.xml
ファイルを置く場所は
 webapps/testApp/WEB-INF etc.
となる。

Catalinaとかlocalhostとかは、conf/server.xmlの中の

<Engine name="Catalina" defaultHost="localhost">

に指定された名前が使用される。デフォルトのままいじってなければ
気にする必要はない。

以前のTomcatではコンテキストをserver.xmlに書いたり
conf配下にcontext.xmlとかいう紛らわしいファイルがあったり
META-INF/context.xmlがあったりして混乱しがち。
だけど、ノーマルに使う場合は上記の配置が正しい。

ちなみにコンテキストファイルの中身。

<Context path="/iconcierip" reloadable="false" workDir="C:\Program Files\Apache Software Foundation\Tomcat 6.0\work" >
</Context>

eclipseが作ってくれたコンテキストを流用すると、pathとdocBaseが
両方指定されていたりしてエラーになるので注意。
あと、ディレクトリパス指定で
http://localhost:8080/testApp/
にアクセスしてるのにwelcomeファイルがないとか、切羽詰ってるとありがち?
少なくともindex.htmlを置いておくか、実在するファイルにアクセスするように。

Tomcatが起動しない!

2010-01-20 16:53:17 | Tomcat
Tomcat止めるとエラー吐く。

致命的: Catalina.stop:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:421)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:337)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:415)
Killing: 19292

起動すると、Tomcat already started!
どないせーっちゅうねん。
どっかのバカが無理矢理落としたせいでゴミが残ってるっぽい。
まずはTomcatのプロセスを探してkill。

ps -ef | grep java
kill xxxxx

したら、/var/lock/subsys/の下のtomcatを削除。
tomcat.miscとかいうファイルもあるけど無視して良さそう。

rm /var/lock/subsys/tomcat

起動してみましょう。

/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/tomcat stop

/etc/rc.d/init.d/tomcat start
/etc/rc.d/init.d/httpd start

よーし!

TomcatのJNDIデータソースをJavaアプリケーションから参照。

2009-02-10 17:50:37 | Tomcat
絶賛稼働中のサーブレットのAPIを使いまわして
データをインポートするツールを作ろうとして手が止まった。
APIはTomcatのデータソース読んでDBに接続しに行くんだよね。
Tomcatのデータソースのインターフェースは外部公開されてないから
外のプログラムからは呼べないのだった・・・
てことで探してみたら、便利なツール発見。

JNDIUnitTestHelper
http://faq.javaranch.com/java/CodeBarnLibrariesAndFrameworks

落としてきたZIPを解凍してjndi_unit_test_helper.propertiesを環境に合わせて修正。
適当なところに置く。
クラスパスが通っているところならどこでもいいらしい。
ログイン名とパスワードも適当に。

com.javaranch.unittest.helper.sql.pool.JNDIName=java:comp/env/jdbc/[Tomcat側で設定した名前]
com.javaranch.unittest.helper.sql.pool.dbDriver=org.postgresql.Driver
com.javaranch.unittest.helper.sql.pool.dbServer=jdbc:postgresql://localhost:5432/[DB名]
com.javaranch.unittest.helper.sql.pool.dbLogin=postgres
com.javaranch.unittest.helper.sql.pool.dbPassword=password

で、コードに以下を追加。相対パスなので注意。

JNDIUnitTestHelper.init("lib/jndi_unit_test_helper.properties");

以上。簡単ですねー。
Tomcat設定ファイルの代わりにjndi_unit_test_helper.propertiesを読んで
DB接続してくれます。
いやー、同じようなことで困った先人がいると楽でいいよね。笑

Tomcat複数バージョンの同居。

2008-12-03 11:16:27 | Tomcat
Windowsでのお話。
Tomcat5.5を使わなきゃいけないけど、6.0をアンインストールしたくない。
そんなときに便利な小技。
単に両方インストールしようとすると

Failed to install Tomcat5 service.

とか怒られる。
どうやらWindowsのサービスを「Apache Tomcat」という名前で登録するため
後から入れた方のサービス名が衝突してしまうらしい。
これを回避するには、サービス名を変更すればいい。
コマンドプロンプトから

# 表示名の確認
C:\>sc GetDisplayName tomcat5
[SC] GetServiceDisplayName SUCCESS Name = Apache Tomcat

# 変更
C:\>sc config tomcat5 DisplayName= "Apache Tomcat 5.5"
[SC] ChangeServiceConfig SUCCESS

とした後に、6.0を入れてやればいいのだ。
便利。

Tomcat起動エラー

2008-08-28 14:25:28 | Tomcat
Tomcat、6.0.18のWindows版で発生。
インストールして起動しようとすると

キー UserDatabase でユーザデータベースコンポーネントが見つかりません

というエラーを吐く。
confの下のtomcat-users.xmlの宣言が「encoding="cp932"」に
なっているのが原因。
「encoding="utf-8"」で問題解決。