- - PR -
Servletクラスを複数個インスタンス化する弊害
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-19 23:37
現在Tomcat5.5 とServletを利用したWebアプリケーションを作成しています。
web.xmlで、servlet-name値は異なるけれど、servlet-class値は同一のモノを指した場合、 どうなるのかと思い、以下のように記述して実行してみました。 <servlet> <servlet-name>ServletA</servlet-name> <servlet-class>hoge.Servlet</servlet-class> <init-param> <param-name>command</param-name> <param-value>hoge.Foo</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletA</servlet-name> <url-pattern>/page1</url-pattern> </servlet-mapping> <servlet> <servlet-name>ServletB</servlet-name> <servlet-class>hoge.Servlet</servlet-class> <init-param> <param-name>command</param-name> <param-value>hoge.Bar</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletB</servlet-name> <url-pattern>/page2</url-pattern> </servlet-mapping> こうすると、hoge.Servletクラスのコンストラクターが2度呼び出され、 hoge.Servletのインスタンスが複数システムに存在することになってしまいます。 Servlet自体はスレッドとして実行されると聞いた覚えがあるのですが、 同じServletクラスのインスタンスが複数個システムに存在することで、 システムに弊害が起きることはあるのでしょうか? | ||||
|
投稿日時: 2007-11-20 00:16
弊害が発生するように作れば発生しますし、
発生しないように作れば発生しません。 作り次第としか言いようがありません。 弊害というより、サーブレットコンテナの仕様を知らずに作ったことによる、 単なるバグという性格の方が強いでしょう。 心配されているようですが、逆にどんな事態が発生するとお考えですか?
言葉の使い方がよくないので指摘すると、 ・システム→ コンテキスト ・Servlet自体はスレッドとして実行されると→ サーブレットのインスタンスはマルチスレッドで実行される です。 | ||||
|
投稿日時: 2007-11-20 00:17
普通にサーブレットを作っている限り特に問題はないです。
パラメータを変えてデプロイしたい場合は複数定義する、という方向で良いでしょう。 | ||||
|
投稿日時: 2007-11-20 01:09
返信ありがとうございます。
>かつのりさん マルチスレッドプログラミングとサーブレットコンテナの仕様は勉強し始めたばかりなので、 このような使い方が根本的に間違っているのかどうか心配になり、質問させていただきました。 あと、言葉のご指摘ありがとうございます。 以後気を付けたいと思いますm(_ _)m >インギさん アドバイスありがとうございます。 | ||||
|
投稿日時: 2007-11-20 01:20
場合によっては意図的に、初期化のパラメータ(web.xmlのinit-param)を変えて
同じclassのServletを別URLで複数立ち上げることもあるでしょう。 使い方次第では毒にも薬にもなります。 |
1