トップページphp
984コメント425KB

■■ Servlet/JSP(EJB含む) 質問スレ ■■

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/06/08 11:03ID:Kkr1yl67
って無いよな?
というわけでつくたよ。
0269nobodyさん02/10/07 23:51ID:???
とりあえずクラス名の先頭は大文字にしてくれ
話はそれから
0270nobodyさん02/10/08 13:49ID:???
>>111
送られるファイルのサイズを制限しているようなのですが、その処理を行っている実装部分はどこなのでしょうか?
web.xml に書かれている内容がどこで使われているのか、私の能力不足により解析できなかったので…。
027126502/10/08 21:20ID:???
>>269
なるほど。。。すみません。
そういった暗黙のルールが色々とあるのですね。
勉強します。
027226602/10/09 12:16ID:???
>>268
後からメンテナンスしやすい設計にするためだよ。サーブレットが作るデータが
必要なら setAttribute()/getAttribute() で受け渡せばいいし、サーブレットの
メソッドが呼び出したいなら、そのメソッドは Bean 化して別クラスにするのが
いい。そうすることによってクラス間の関係が疎になるので再利用しやすく後の
メンテナンス性が上がる。
027326502/10/09 21:46ID:???
なるほど。
クラスを直接importしなくてもデータのやりとりとか
特に問題なくできるのですね。
クラス同士はあまり密接に関わらせない方が良いのですか。
勉強になりました。
ありがとうございます。
0274nobodyさん02/10/11 22:13ID:4dmb/Mff
CompsitViewパターンにしてやろーと思っていて。
Strutsを使ってるのでTemplateタグで実現したいのですが

テンプレートから呼び出されるJSPのページにパラメータを渡すには
どうやればよいのでしょう?旨いやり方ありますか?

要はincludeならば
<jsp:include ...>
<jsp:param .../>
</jsp:include>
みたいなことがStrutsのTemplateタグで出来ないかと思案しているわけです。

template:insertをするPageのスコープにパラメータを埋め込んではみたんだけど
どーやらPageスコープってjsp:includeやらtemplateやら使ってもそれぞれのページ内
みたいで…まーあたりまえか(w
requestやらapplicationやらsessionに埋め込めばいいのだろうけど、なんとなく
イメージ的に違うって感じ。でもそれっきゃないのかなぁ?

誰かグルになってくださいませ。
0275nobodyさん02/10/11 22:31ID:???
<template:put> と <template:get> じゃダメなのか?
027627402/10/11 22:35ID:???
>275
ダメやっちゅーに。
ページコンポーネントの組み込みはでけるけど、その組み込むページに
どやってパラメータを渡すかってことが知りたいのです。
0277nobodyさん02/10/12 01:01ID:xShHXVsw
サーバー側に固有の数字をランダムに当てたディレクトリを
自動的に作成したいのですが、そのようなことができるメソッドってありますでしょうか?
ランダムな数字を作るのはわかっています。
ディレクトリを自動的に作成するメソッドがありましたらご教授ください。
おながいします。
0278nobodyさん02/10/12 01:05ID:???
>>277
File#mkdir(), File#mkdirs() の API リファレンス嫁
027927702/10/12 01:58ID:xShHXVsw
ホント馬鹿ですみませんがもう少しヒントをくらはい・・・。

String dirname = "場所";
boolean a = mkdir(dirname);

ってやると
シンボルを解釈できません。
シンボル:メソッドmkdir(java.lang.String)
ってでます。import java.lang.*;は書いてあります。
0280nobodyさん02/10/12 02:01ID:???
File directory = new File("C:\\あほ\\氏ね");
directory.mkdirs();
028127702/10/12 03:34ID:???
あほです。できましたです。
本当にありがとうございます。
氏ぬ前にもっと勉強します。
0282nobodyさん02/10/12 13:39ID:???
>276

だから渡したい値は<template:put>で<template:include>時に渡して、
組み込まれたページ側で<template:get>使って受け取ったら後は好きにすれば?
0283nobodyさん02/10/12 16:09ID:6y7+FqP1
>282
そっかそーゆ意味ね。
言葉足りなかったなぁ。それでもダメっす。
パラメータとして渡したいってのは受け取ったパラメータをlogicタグなどで表示切替
に使いたいって意味だす。

ん?もしかしてbean:defineの中でvalue="<template:get ...>"みたいなことができるってこと?
無理だとは思うが一応試してみるか…。ちょっと待っててな。
0284nobodyさん02/10/12 20:35ID:8Xp20As7
eWave使ったことある人、います?

今、JSPページのコンパイルエラー直そうと思ったんだけど、コンパイル一度も通ってないJSP→Servletのソースが何処にも保存されてないのね、eWaveって(^^;
おそらく何かしらの設定があるんだろうけど、たぶんオイラの英語力が不足してるせいで(T_T)、よくわかりません。

「ここを見れ」でいいので、何か情報をお持ちの方がいらっしゃればアドバイスをお願いします(拝)
0285M02/10/14 00:27ID:a3rDJN9b
JSPで掲示板を作ったのですが、TEXTAREAフィールドに入力されたコメント
の改行コードを<BR>に変換するにはどうすれば良いのでしょうか?

<PRE>入力コメント</PRE>で表示すると改行なしの長いコメントの場合
にページが横に伸びてしまうのです。どなたかお願いします。m(_ _)m
0286nobodyさん02/10/14 00:32ID:???
J2SE 1.4以降なら正規表現使って置換でいいんじゃないでしょうか。
1.3ならjakrta oroですか?
0287nobodyさん02/10/14 01:23ID:???
ガイシュツならすみません。

動的に作成したinputタグのnameを拾う方法はあるのでしょうか?

<form method="POST">
<input name="<%= temp[i][j] %>" type=text>
</form>

で、たとえばこの入力フィールドに"10"が
入っているか確認する場合、
if(temp[i][j].equals("10"))
とはできないですよね?
(変数名は、temp[i][j]の値そのものなので)

たとえば、POSTで投げられてくる値を
Iteratorとかで順番に拾えないのでしょうか?
0288nobodyさん02/10/14 02:29ID:???
>>285
書き込みフォームに WRAP="HARD" +鯖側 <PRE> で良いんでない? まぁ
普通は 1 文字づつ評価して <BR> に書き換えるわな。どうせ < → &lt; の処理とか
やってるでしょ。

>>287
何言ってるかぜんぜんわかんねーんだけど request.getParameter(temp[i][i]).equals("10") の
事か? request.getParameterNames() か? request.getParameterValues(temp[i][i]) か?
日本語勉強してこいよ。
028928702/10/14 08:10ID:???
>>288
言いたいことがうまく伝わらなかったようですが、
どの辺を調べればよいかはよくわかりました。
ありがとうございました。
0290M02/10/14 09:39ID:a3rDJN9b
>>288
返答ありがとです。

WRAP="HARD" +鯖側 <PRE> では<PRE>が優先されるようです。
ページが横に伸びてしまいました。

< → < の処理は次のようにやっててうまく処理されます。
でも改行の処理のやりかたがわかりません。
'\n','\r\n'はchar変数じゃないのです。

/** HTMLエンコードが必要な文字 **/
static char[] htmlEncChar = {'&', '"', '<', '>'};
/** HTMLエンコードした文字列 **/
static String[] htmlEncStr = {"&", "gg"", "<", ">"};



0291nobodyさん02/10/14 17:54ID:???
>>290
入力側で <TEXTAREA ... WRAP="HARD"> でって意味なんだけど、ちゃんと伝わってる?
それから鯖側で <BR> 変換やるなら↓でいいんでないの。

static char[] htmlEncChar = {'&', '"', '<', '>', '\n', '\r'};
static String[] htmlEncStr = {"&amp;", "&quot;", "&lt;", "&gt;", "<BR>", ""};
0292M02/10/14 23:38ID:a3rDJN9b
>>291
そうですよねー。
でも何回やっても<BR>に変換されない。。。。
もう少し頑張ってみます。ありがとうございました。
0293 02/10/14 23:55ID:???
>>292
ちゃんと htmlEncChar.length とか htmlEncStr.length 分のループ
してるか? 「4 回固定回数ループ」やってるんじゃねーだろーな。
てか、説明すんのめんどくせー

public static String escapeHTML(String text){
  StringBuffer content = new StringBuffer(text.length());
  for(int i=0; i<text.length; i++){
    for(int j=0; j<htmlEncChar.length){
      if(text.charAt(i) == htmlEncChar[j]){
        buffer.append(htmlEncStr);
      } else {
        buffer.append(text.charAt(i);
      }
    }
  }
  return buffer.toString();
}
0294M02/10/16 04:04ID:icD2I6vX
http://www.atmarkit.co.jp/fjava/rensai/jsp2_03/jsp2_03_1.html
↑このソースを変えてみた。

static public String HTMLEscape(String input) {
input = substitute(input, "&", "&;");
input = substitute(input, "<", "<;");
input = substitute(input, ">", ">;");
input = substitute(input, "\"", "";");
input = substitute(input, "\n", "<BR>");//追加
input = substitute(input, "\r", "");//追加
return input;
}

でもだめぽ。(′д`⊂)
0295nobodyさん02/10/16 06:21ID:???
>>294 のサイトだが…
すげぇ! こんな無駄な再帰を使うソースは初めて見た。しかもサーバサイド
想定なのに無駄な String/StringBuffer インスタンス作りまくりと来た
もんだ。まぁ表題見れば書いた人間のレベルが分かるか。
0296nobodyさん02/10/16 13:48ID:jmKbXjPs
Java で作成しているアプリがあるんですが、みなさんのお知恵をお貸しください。
管理者が ServerSide に生成した Session の中身を全て調べて、特定のセッションに対して値を更新/削除/追加する、って事をしたいんですけど、これを実現するためにはどうすれば良いのでしょうか?

サーバ・サイドのセッション・オブジェクトを全てリストとかで取得できるんでしょうか?
0297nobodyさん02/10/16 14:37ID:???
>>296
できません。データベースでやってください。
0298x02/10/16 15:08ID:0vsiXYHc
これって本当か?

↓ ↓ ↓
http://www.dream-express-web.com/space-trust.htm
0299nobodyさん02/10/16 15:46ID:???
>>297
やっぱり無理ですか…。
ありがとうございました。
0300nobodyさん02/10/16 16:54ID:???
>>299
無理っつーか、普通そゆことsessionでやらんだろ、ということ。
>>297の指摘通りDB使いなよ
0301nobodyさん02/10/16 23:19ID:R5uZ9QcZ
毎日使ってるPC(Windows)からTelnetしてLinuxのサーバに接続してます。
そこでサーバのTomcatやResinを立ち上げると
Telnetの画面がそのままコンソールになるようで
Telnetを閉じるとともにTomcatやResinまで落ちてしまいます。
Telnetを閉じても起動したままにできませんか?
(cronの1回だけバージョンとかあればよいのだろうか・・)
0302nobodyさん02/10/17 00:11ID:???
nohup でも使っとけ
0303nobodyさん02/10/17 00:13ID:???
>>301
disown
0304nobodyさん02/10/17 00:15ID:7NQKU9UN
>296
SessionFacade使え。
0305nobodyさん02/10/17 01:19ID:???
>>301
その Tomcat や Resin を立ち上げるコマンドの後ろに & を付けれ。
RPM で入れたんなら /etc/rc.d/init.d/tomcat ってコマンド無いか?
って俺それしか知らんのやけど >>302-304 のやり方って何すか?
0306nobodyさん02/10/17 01:43ID:Xvd1/r7V
サーブレットでHTMLのボタンを押して
クライアント側でサーバ内にあるGUIアプリケーション(Javaのクラスファイル)
を実行させることってできるんでしょうか。

例えば
クライアントがボタンを押す

Javaで作ったサーバ内にある
オリジナルの音楽再生プレイヤーが呼び出されて実行される
というようなことってできますか?

気になってしょうがないのでよろしくお願いします。
0307nobodyさん02/10/17 01:51ID:???
>306
気にすんな。
030830102/10/17 02:10ID:bSTwbaaG
>>305
&つけたらいけました。コンソールにやはり起動メッセージ出ますが
閉じても起動しっぱなし。感謝です!
>>302の方法ではTelnet終了したら落ちてしまった。
>>303は調べたけどzsh?

ちなみにこの現象はResinのみ。
Tomcatはコンソール支配されないです。嘘ついてゴメン
0309nobodyさん02/10/17 02:29ID:???
>>306
出来る。

>>308
激しく疑問なんだが Resin ってシェルから叩ける start/stop 用のコマンド
って付いてないのか? 止めるとき ps aux でプロセス見て PID で kill して…
と激しく面倒だぞ。
031030602/10/17 02:43ID:???
>309
Appletで作ったゲームはよく見るんですけど
GUIアプリケーションを実行させるサイトに出くわしたことがないので
気になってました。ありがとうございました。
でも、実行するクライアントはちょっと勇気がいりそうですね。
0311nobodyさん02/10/17 03:00ID:???
>>310
ちょっとまて、クライアントのボタンを押すとサーバ側でウィンドウが
立ち上がるような動きをするんだよな?

ちょっと自信が無いが Unix なら DISPLAY 変数をちゃんと設定しておいて
やれば大丈夫だと思う。Windows はどうなんだろう。サービス起動じゃな
ければ大丈夫かな。
0312306=31002/10/17 03:30ID:???
>>311
Vectorに登録されているようなGUIアプリケーションが
あたかもブラウザ上で呼び出して実行されている、
というような動作をさせることができるかな、と…

安易に大それた質問をしてしまってすいませんでした。
自分はまだあまり知識が無いので、できるとわかっただけで十分です。
ありがとうございました。
0313306=31002/10/17 03:40ID:???
例えば動画ファイルをクリックしてRealPlayerが起動するのは
クライアント側のGUIアプリケーションが起動するってことですよね。
そうじゃなくてサーバ側のRealPlayer(Java仕様)をブラウザ上で実行させる
ことができるかどうか気になったんです。

自分でも少しパニックになってきたので、放置していただいて結構です。
0314nobodyさん02/10/17 11:50ID:6ucWf4YE
んと、>>294の逆で、<TEXTAREA>タグとかから改行込みで入力された文字列の改行を<BR>に置換するのって、どーやればいいのでしょう?

単純に\nを<BR>で置き換える、ぢゃだめぽ。
0315hmk02/10/17 12:34ID:???
>>314
ドザから送られてきた改行は\r\nになってるっぽ?
0316nobodyさん02/10/17 13:21ID:???
>>313
それは無理。

>>314
\r\n を <BR> に置き換えれば良いんと違うか? 何が問題やねん。
0317nobodyさん02/10/17 14:02ID:???
>>313
HTTP上でX-WINDOW類似の仮想ターミナルやりたいってことね。
探せばそんな製品あるかもよ。まずはぐぐってみたら。

ひょっとして作ろうっての?
無理。
少なくとも>>313には絶対無理。
0318nobodyさん02/10/17 15:47ID:???
>>317
ああ、その手の奴なら VNC のアプレット版があるよ。鯖側で VNC 鯖起動しておいて
アプレット版の VNC クライアントでブラウザ上に鯖画面を丸ごと表示する奴が。
多分 >>313 が考えてるのとは違うだろうけど。
031930302/10/17 22:28ID:???
>>308
Linuxって言うから、bashだと思ったのだが。
disownはbashとか、zshの組み込みコマンド。
032030102/10/18 00:35ID:y14T4jTt
>>309
うむぅ、そうですねぇ、自分もResinはkillで止めてます。

>>319
bash: disown: /opt/resin-2.1.5/bin/httpd.sh: no such job
こういったメッセージが出てしまうのであきらめていたのです。。。
032131402/10/18 10:22ID:AgYFvi+M
>>315
>>316

……Unicodeにした後は\nだけ置換すればいいと信じきっていた自分が激しく鬱だ(T_T)
アドバイスありがとうございました(拝)
0322nobodyさん02/10/18 15:06ID:???
>>321
\n を <BR> に変換、\r を削除、が良いと思うが対 Mac でどうなるか分からん。
0323nobodyさん02/10/22 23:14ID:3vYtKYtk
MVCモデルで開発する時ってさぁ、ServletとJSPとBeanはそれぞれ別のチームで開発するでしょ?
で、Beanチームは単体起動での確認とか比較的簡単にできそうだけど、
JSPやServletチームはどうやって単体で稼動確認取ればいいのかなぁ?
JSPはBeanがないと動かないでしょ?
Servletに至ってはBeanとJSP(ダミーでもいいけど)がないとまともに動かない。
みんなはこういう問題ってどうやって解決してるの?

032430302/10/22 23:30ID:???
>>320

おおっそんな勘違いしてたんか!!
disownは、既に実行中のジョブに対して使うんだよ。
例えば、($で始まるのは、コマンド入力)
$./httpd.sh&
$jobs
[1] +running httpd.sh
$disown
$jobs
(何も出力されない)

ってなるの。disownに%1とか%2とかジョブ番号を指定すること
もきる。例えば、disown %2なら、jobsで[2]って表示されてる
プロセスを切り離しできる。
0325nobodyさん02/10/23 02:37ID:???
>>323
そればっかはダミーと言うかスタブ作るしかないな。後で差し替えが利くように
インターフェース切ってファクトリパターン使ったり、リフレクション使ったり
なるべく MVC 間の結合度を下げるようにする。
0326nobodyさん02/10/25 18:13ID:VrJoiV/x
JavaMail使ってPOSTする方法を教えて
0327nobodyさん02/10/25 19:33ID:???
>>326
そんなことできんの?
つーか URLConnection で十分じゃん。
つーか HTTP の POST の話?
0328nobodyさん02/10/26 01:40ID:???
■DOMAPIを使ってXMLを読み込んで、適当に変換処理を行った後
 JSP等でHTML出力する
■TransformerオブジェクトでXML+XSLT変換処理を行った後
 JSP等でHTML出力する

XMLの内容(量)によるとこもあるだろうが、どちらが高速に変換させて
出力処理をさせることが出来るんでしょう?
※あくまで出力処理の範囲で、コーディングの開発は無視
0329...02/10/29 02:39ID:???
ApacheとTomcatの連携がうまくいかず困っております。
Tomcatを startup.sh で起動すると
mod_jk.conf-auto が作成されるとあるのですが、
これが作成されません。何か条件があるのでしょうか?

#それぞれ独立しての稼動はできております
#server.xmlのPort8080の部分はコメントアウトしております
#Apache1.3.26 Tomcat3.x Debian
0330nobodyさん02/10/29 09:28ID:???
>>329
Tomcatのバージョンは?
Tomcat4ならmod_webappを使ったほうが簡単
0331...02/10/29 19:54ID:???
Tomcat3.3.1で不可能でしたので3.2.1にしたところあっさり解決してしまいました。
数々のモジュールを組み込んでおり、自分自身が混乱してました。
お騒がせいたしました。
0332nobodyさん02/10/29 20:40ID:2+2rI4fz
あぱし2.0.X用mod-jkのwin32バイナリ、いつの間にかリリースされてますな。
ttp://jakarta.apache.org/builds/jakarta-tomcat-connectors/jk/release/v1.2.0/bin/win32/
0333nobodyさん02/10/30 13:03ID:3yGzF2Oi
Connectionクラスをinit()で作成して使いまわそうしたんですけど、うまくいきません。
いまはdoGet()が呼ばれる毎に作成しています。これってコスト高い?



0334nobodyさん02/10/30 23:31ID:???
>>333
コストが高いかどうかは使われ方しだい。ちゃんと負荷テストやれ。
商用 AP サーバなら普通はコネクションプールを使う。
0335nobodyさん02/10/31 00:25ID:???
商用じゃなくても使う
0336ジョン・プレーヤ・スペシャル02/10/31 19:41ID:FYPcLGlN
質問といううかグチ。
仕事でJSPでメール送るプログラム組むなんて事を安請け合い
したんだけどさぁ、まぁ、sendmailでちょちょいでしょうなんて
perlライクに考えていたわけですよ。
テストサーバにjavaやらtomcat入れてとりあえずJSPが動くようにする
この頃からperlとは違いすぎるなぁと不安になる。
えーとメールを送るのは・・・・どうやらjavaMAILとJRFという
ライブラリを使うことがわかる。
JSPハンドブックを買ってサンプルプログラムを打ち込んで(ソース付け炉や!)
動かしてみる、、、エラーの嵐、、まるでベーマガの頃に戻ったかの
ように本を見ながらデバック、デバッグ、デバッグ、文法エラーはなく
なってコンパイルまでは出来ているみたいだが、変なエラーがドバっと
出る。どうやらSMTPサーバが「Could not connect」らすぃ。
サーバの事はよくわからんのだよ、JSPくん!
SMTPサーバってそのサーバのIPじゃいけないのか?sendmailの設定
が問題なのか?さっぱりわけワカメ。ギャーーー!誰か変わってぇぇ!
0337nobodyさん02/10/31 21:24ID:D/zYL1kU
http://www4.big.or.jp/~tan-y/programming/javamail.html
「SMTPによるメール送信」を読めば救われるかも。
>props.put("mail.smtp.host", smtpHost);
>Session sess = Session.getDefaultInstance(props, null);
このへんがキモかと思われる。
0338ジョン・プレーヤ・スペシャル02/11/01 22:02ID:???
>>337 sama
ありがとうございます。でも、SMTPが通ってなかったわけでは
なくて、実はもっと、、、もっと初歩的なスペルマミスでっすた。
はぁぁぁ
でも、遠回りしてイロイロ調べたせいでJSP/サーブレットの事が
なんとなくわかってきたぞ。なんか言語覚えるのってココまでが
大変で、これからはけっこう楽なんだよな(楽観)。
0339nobodyさん02/11/05 22:01ID:R2YenpcU
Tomcat4.1でサーブレットのお勉強をしようと思い、導入してみたのですが・・・
動きません・・・
Tomcatはjakarta-tomcat-4.1.12-LE-jdk14.exe
JAVAはSDK1.4.1
OS Win2000
を使っています。webappsの下にaというフォルダをつくり、web.xmlやclassesなどの
ディレクトリをつくって、server.xmlを編集しました。フォルダaにあるindex.htmなど
は見れるのですが、サーブレットが動きません。サーブレット自体は以前のヴァージョンの
Tomcatで動作確認済みです。プリーズヘルプミー!
0340nobodyさん02/11/05 22:12ID:???
とりあえずserver.xmlは元に戻してみたら。書かなくても動くし。
てゆうかwebappsの直下に前バージョンで動いていたヤツをjarで固めて置いて置けばいいじゃん。
Tomcatが起動時に勝手に解凍して配置してくれるんだから。

0341nobodyさん02/11/05 22:23ID:R2YenpcU
>>340
レスありがとうございます。server.xmlをもとにもどしてやってみます。
以前のヴァージョンはアンインストしちまいました。
手元にはclassファイルしかないのでとりあえずserver.xmlをもとにもどし
てみます。

034233902/11/05 22:39ID:R2YenpcU
server.xmlをもとにもどしてやってみたら404でした。
exampleフォルダのclassesにクラスファイルを入れた動いたのですが・・・
どうしたら任意のフォルダからサーブレットを動かせるのでしょうか?
0343nobodyさん02/11/05 22:57ID:???
そもそもそのディレクトリはTomcatが起動時に正しくコンテキスト化してくれてるかな?
localhost_log.YYYY-MM-DD.txtみたいなログファイルで起動時に例外が発生してないかどうか
確認したほうがいいかも。(コンソールには起動時例外は表示されなかっちょうな気がする)

Tomcatは起動時に、webappsの下にフォルダがあり、かつその下のweb-infディレクトリに
web.xmlがあるものを自分のコンテキストだと認識するらしいから、まずweb.xmlを疑った
ほうがいいかも。




0344nobodyさん02/11/05 22:58ID:???
表示されなかっちょうな気がする
   ↓
表示されなかったような気がする
034533902/11/05 23:14ID:R2YenpcU
>>343
コンテキスト化とはなんでしょう?
ログファイルを確認したところ起動時に例外が発生したような形跡はないように
思います。普通に「Webアプリケーションディレクトリ a を配備します」というような
感じになってました。
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>

</web-app>
0346nobodyさん02/11/05 23:27ID:???
web.xmlが空やねん・・・。
web.xmlには普通Servletのマッピング情報を書くんだよ。
例えばこんな感じ。(うろ覚えなので間違っているかも)

<?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>TestServlet</servlet-name>
  <servlet-class>sample.test.TestServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>TestServlet</servlet-name>
  <url-pattern>/servlet/TestServlet</url-pattern>
 </servlet-mapping>
</web-app>

これで、WEB-INF/classesの下にあるsample.test.TestServletという名前のServletが
http://localhost:8080/xxxxx/servlet/TestServletで呼び出せるようになるはず。
(微妙にミスってたらごめん)

J2EEではアプリケーション単位でxmlファイルに構成情報を記述して、自己完結性の高い
パッケージ配布方式を実現しようとしているから、web.xmlはしっかり勉強しておいたほうがいいよ。
だっていちいちWebアプリをインストールする度にserver.xmlみたいなミドルウエアの根幹に
手を入れるのは面倒くさいし危険でしょ?
ここら辺を抑えておくと、やがてEJBのような高度なものをやることになっても、
デプロイの仕組みがちゃーんと理解できるようになる。基本は一緒だから。


0347nobodyさん02/11/06 00:33ID:???
>>344

土佐弁みたいでカコイイぞ。>なかっちょう
034833902/11/06 00:34ID:brJh6AGy
>>346
動きました! ありがとうございます。
しかし、新しいアプリの度にweb.xmlを更新しなくてはならないのでしょうか? exampleフォルダにいれた場合はweb.xml
を更新せずともサーブレットが動作しました。
また、以前のヴァージョンのときもweb.xmlは345に書き込んだ通りで動きました。

そのあたりをご教授願います。
0349nobodyさん02/11/06 00:38ID:QtBZH+Bh
質問なのですが、
Javaの開発でIISって使えるのでしょうか?
それともアプリケーションサーバーはWASとかでないと
無理なのでしょうか?
0350nobodyさん02/11/06 01:27ID:???
>>349
IIS は Java の動くアプリケーションサーバではありません。
WAS 以外にも Tomcat, WebLogic, iPlanet, JRun などもありますので要件に
あったものをどうぞ。
0351nobodyさん02/11/06 01:29ID:???
>>348
examples はあらかじめ出来上がった web.xml が入ってたから。
前バージョンで web.xml に記述が無くてもサーブレットが動いていたのは
Servlet Invoker という、サーブレットを起動するサーブレットがデフォ
ルトで server.xml に設定されていたから。
035233902/11/06 03:10ID:brJh6AGy
>>351さん
なるほど。よくわかりました。ありがとうございます。

しつこくてすいませんがまだ質問があります・・・
しかしもってexamplesにあるweb.xmlに追記せずに動いたということはexamplesにあるweb.xmlには
 <servlet>
  <servlet-name>TestServlet</servlet-name>
  <servlet-class>sample.test.TestServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>TestServlet</servlet-name>
  <url-pattern>/servlet/TestServlet</url-pattern>
 </servlet-mapping>
というような一つのクラスファイルのみにむけた記述以外にも何か他に特別な記述があったのでしょうか?
0353nobodyさん02/11/06 20:46ID:???
>>352
そういう記述があったか、もしくは Servlet Invoker が有効になってて /servlet/org.hoge.SampleServlet
というクラス名指定の呼び出しをしていたかのどちらかだろう。
0354nobodyさん02/11/07 01:38ID:+oMkddUQ
アプリケーションAのWEB-INF/classes/packageName/ 以下にクラスが
あって、アプリケーションBのServletも、アプリケーションAのクラスと
同じパッケージ下に置きたい場合は、どこに、アプリケーションB用の
サーブレット等のクラスを構築したら良いでしょうか?

やはり、アプリA/WEB-INF/classes/packageName/ 以下に
アプリBのサーブレットを置かなくてはダメなのでしょうか?

ポイントは、アプリBから、現状、アプリAのフォルダに配置してある
共通クラスを利用する必要があるのと、会社のドメインのTLDから
パッケージ名をつけているので、共通化したいです。


0355nobodyさん02/11/07 01:57ID:???

アプリA/WEB-INF/classes/net/2ch/hiroyuko/umaibou.class
アプリB/WEB-INF/classes/net/2ch/hiroyuko/umaibou.class
これじゃダメ?

ソースだけは一括管理しておいてコンパイルは2回行う
javac -d アプリA/WEB-INF/classes net\2ch\hiroyuko\*.java
javac -d アプリB/WEB-INF/classes net\2ch\hiroyuko\*.java

0356nobodyさん02/11/07 02:01ID:???
ln -s アプリA/WEB-INF/classes アプリB/WEB-INF/classes

classes まるごとじゃなくてもサブパッケージごとでリンク張れ。
Windows だと? 2000 以降ならパーティション丸ごとディレクトリにマウント
できるだろ。
0357nobodyさん02/11/07 02:06ID:???
パーティションのマウントでは無理だな、スマソ
0358nobodyさん02/11/07 03:22ID:???
>>354
共通部分のクラスを jar にまとめて $JAVA_HOME/lib/ext に入れとくとか
CLASSPATH に設定しておくとか。
035935402/11/08 01:18ID:uREFPWAh
ありがとうございます。
大体の方針はわかりました。

ところで、InvokerServletはOffにして、ServletMapping経由で
サーブレットにアクセスさせるなら、classes以下にサーブレットクラスを
配置しなくても動くんでしょうか?これできるならクラスパス設定すれば
解決しますね。あとは、共通領域に置くか、否かという話になりますね。

(ちなみに、Tomcat4.1.12(? 最新を利用)です。)
0360nobodyさん02/11/08 02:54ID:???
>>359
実運用時は Web アプリケーション jar にまとめて WEB-INF/lib にぶち込んで
おくのが普通。この場合 CLASSPATH を通す必要がなく、Web アプリケーション
コンテキストでクラスローダーが分けられる。WEB-INF/classes 以下のクラスは
オートリロード対象なので、(オートリロードがオンになってるなら) 開発時に
チョコチョコ修正するところだと思っておけば良い。システムの CLASSPATH 環境
変数にサーブレットやそれを含む jar を通すのはあまり一般的ではない。
0361nobodyさん02/11/08 03:04ID:???
> Web アプリケーション jar にまとめて
  ↓
Web アプリケーションで使うクラスを jar にまとめて
036235402/11/08 11:18ID:JbsLZRZL
うーん。Winで開発して、Linuxが本番なので、やはり共通部分は
jar化してサーバースコープで共有化しておいて、サーブレットは、
WEB-INF/lib以下にjar化しろってのが正解ですか。

開発がWinであることと、数ヵ月後の保守を考えたら、各Webアプリの
サーブレットには、共通モジュールとは違うパッケージ名をつけた方が
良さそうですね。jp.co.companyを頭につけちゃうと、jpのフォルダが
クラスパスの最初に見つかってしまう場所に置かなきゃいけないんですよね?

ショートカットなどのOS固有の方法は、扱いが複雑になるので避けたいです。
036335402/11/08 11:45ID:JbsLZRZL
自己レスですが、カレントも含め、ちゃんと全部のクラスパスを指定しておけば、
パッケージ階層以下の構造が複数のフォルダに分かれても、クラスの検索が
可能なんですね。

サンプル作って確認しました。スマソです。
ということで、パッケージ名は今のまま、本番運用時には共通モジュールを
jar化して切り出すことにします。

結局、時間をかけて、358さんの内容を理解したって感じです。
ありがとうございました。
0364nobodyさん02/11/08 17:23ID:B5HgIdqz
invokerをoffにした場合、WEB-INF配下にweb.xmlがないと動きませんよね。
その場合のもっとも簡単なweb.xmlの記述の仕方を教えてください。
要するに、サーブレットが起動すれば(classファイルを認識してくれれば)
いいレベルです。
0365nobodyさん02/11/10 20:02ID:ykyYofKk
jspで扱ってるrequestオブジェクトの中身を、JAVAクラス内で使うには、

public void proc(HttpServletRequest req) {}

と記述する他方法は無いのでしょうか。
0366名無しさん@Emacs02/11/11 01:15ID:???
>>365
requestオブジェクトは、jspの場合、何も宣言しなくても使えるか
ら、そんな訳の分らん錯覚に陥ってるんだろう。
jspファイルから生成されたjavaのソースファイルを見れば分るが、
jspのページを生成する_jspServiceメソッドは、コンテナが、
(予め生成した)requestやresponseオブジェクトへの参照を渡してる
から、requestとかがjsp内で使えるんだよ。

要するにjavaの基本と同じで、参照を何らかの形で渡さないと使えない。
最も、customタグのように、ハンドラ作って、jspcに組み込めば、引数に
渡さなくてもいいようにできるけど、だったらcustomタグ使うか、
requestオブジェクト渡した方がまし。
0367nobodyさん02/11/15 22:05ID:???
TomcatでIP制限する方法ってありますか?
それと、Apache+Tomcatでクラスファイルをオートリロードする方法。
知ってる方がいたら是非教えてください!
0368名無しさん@Emacs02/11/15 22:43ID:???
>>367
フィルタ使うか、OS側で制限するしかない。
■ このスレッドは過去ログ倉庫に格納されています