comscom@Wiki
起動したらロードするサーブレット
最終更新:
dotcom
-
view
コンテナ起動時に特定のサーブレットを動かしてくれないのかしら。comです。
Tomcatでコンテナ起動時にやってほしいことがあるの
Tomcatで作ったサーブレット。
これってブラウザでアクセスしないと動かないのね。
でも何事にも初期処理とか必要じゃん?
これってブラウザでアクセスしないと動かないのね。
でも何事にも初期処理とか必要じゃん?
たとえばログインして何かしないといけないってプロジェクト作ったとき。
ログインIDのファイルを持っていて、これをユーザーがログインするたびにIDが正しいかチェックする。
でもその度にログインIDのファイルをReadするのはダメダメー。
ログインIDのファイルを持っていて、これをユーザーがログインするたびにIDが正しいかチェックする。
でもその度にログインIDのファイルをReadするのはダメダメー。
でもこれって誰かが使うもっと前に保持するために読み込んどかないといけない。
これが初期処理ってやつなのね。
これが初期処理ってやつなのね。
でも一番最初に動かすってどうやるんだろう?
まさかユーザーさんの誰かが最初に起動するまで初期処理が動かないなんてのはおかしいでしょう。
Tomcat起動時ってのもおかしいし。
プロジェクトを動かした時かな?
warファイルを作ってWEB-INFフォルダにぶちこんだときって
まさかユーザーさんの誰かが最初に起動するまで初期処理が動かないなんてのはおかしいでしょう。
Tomcat起動時ってのもおかしいし。
プロジェクトを動かした時かな?
warファイルを作ってWEB-INFフォルダにぶちこんだときって
2007/02/05 11:22:21 org.apache.catalina.startup.HostConfig deployWAR 情報: Webアプリケーションアーカイブ test01.war を配備します
みたいなのでるじゃない。
この時に動いてくれないかな。。。
この時に動いてくれないかな。。。
調べました。
ありました。そりゃあるわな。
ありました。そりゃあるわな。
「Tomcat 起動時 ロード」でググってみたですよ。
JavaでHello World サーブレットweb.xml編
サーブレットをWEBアプリケーション開始時にロードする方法 ってところ。
いつもいつも思うけど、ググるにしてもどの言葉でひっかければいいかわからないとみつけられないのよね。うううう。
JavaでHello World サーブレットweb.xml編
サーブレットをWEBアプリケーション開始時にロードする方法 ってところ。
いつもいつも思うけど、ググるにしてもどの言葉でひっかければいいかわからないとみつけられないのよね。うううう。
web.xmlでサーブレットを起動する順番を設定する。
サンプル。
これdotcomtestってプロジェクトを作ってtest01ってパッケージを作ったものです。
そのtest01には
これdotcomtestってプロジェクトを作ってtest01ってパッケージを作ったものです。
そのtest01には
- Login
ってサーブレットがあるの。
でもってこのdotcomtestプロジェクトをwarファイル(dotcomtest.war)にしてTomcatのWEB-INFフォルダにぶちこんじゃうと展開されるのね。
これからやるのはこのdotcomtest.warが展開された時にInitっていうサーブレットをロードする。というもの。
これからやるのはこのdotcomtest.warが展開された時にInitっていうサーブレットをロードする。というもの。
dotcomtestに入ってるweb.xmlの中身にこんなの入れてみました。
Initをサーブレットマッピングする。
そのとき一行追加しちゃうです。
そのとき一行追加しちゃうです。
<servlet> <servlet-name>Init</servlet-name> <servlet-class>test01.Init</servlet-class> <load-on-startup>0</load-on-startup> </servlet>
これこれ。
<load-on-startup>0</load-on-startup>
中に入れるのは数字。いくつもロードさせたいときは小さい数字から順に指定していけばおっけー。
今回はInitサーブレットだけでいいので0にしちゃった。1がいいのかな?調べとこう。
今回はInitサーブレットだけでいいので0にしちゃった。1がいいのかな?調べとこう。
全体はこんな。
- dotcomtestのweb.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>Init</servlet-name> <servlet-class>test01.Init</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet> <servlet-name>Login</servlet-name> <servlet-class>test01.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/servlet/Login</url-pattern> </servlet-mapping> </web-app>
こんな感じ。
設定はできたけど肝心のInitサーブレット作らないと。。。
設定はできたけど肝心のInitサーブレット作らないと。。。
- Init.java
package test01; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.http.HttpServlet; public class Init extends HttpServlet{ private ServletContext context = null; public void init(ServletConfig config){ ここにかいたことをしてくれるのー } }
load-on-startupで順番指定すると、そのサーブレットをロードするです。
なのでのinitメソッドに書かれた内容しかやってくれないのです。
だからやってほしいことを書くのはinitメソッド内。
なのでのinitメソッドに書かれた内容しかやってくれないのです。
だからやってほしいことを書くのはinitメソッド内。
じゃこれ作ったらwarファイル作り直してコンテナ起動しなおすとロードしてくれるのー。
実際どうやって使うの?
初期処理。具体的にどんなことをしたいかってのはもう上のほうでぐたぐだ書いてたけど、実際どうやったのかはまた今度。
ファイル読み込んでそのデータを保持してサーブレットで呼び出す、みたいなことしてみたの。
applicationスコープってやつですよはい。
applicationスコープってやつですよはい。
テスト用に作った簡単なのをいつかUPしてみます。