■■ Servlet/JSP(EJB含む) 質問スレ ■■
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/06/08 11:03ID:Kkr1yl67というわけでつくたよ。
0341nobodyさん
02/11/05 22:23ID:R2YenpcUレスありがとうございます。server.xmlをもとにもどしてやってみます。
以前のヴァージョンはアンインストしちまいました。
手元にはclassファイルしかないのでとりあえずserver.xmlをもとにもどし
てみます。
0342339
02/11/05 22:39ID:R2YenpcUexampleフォルダのclassesにクラスファイルを入れた動いたのですが・・・
どうしたら任意のフォルダからサーブレットを動かせるのでしょうか?
0343nobodyさん
02/11/05 22:57ID:???localhost_log.YYYY-MM-DD.txtみたいなログファイルで起動時に例外が発生してないかどうか
確認したほうがいいかも。(コンソールには起動時例外は表示されなかっちょうな気がする)
Tomcatは起動時に、webappsの下にフォルダがあり、かつその下のweb-infディレクトリに
web.xmlがあるものを自分のコンテキストだと認識するらしいから、まずweb.xmlを疑った
ほうがいいかも。
0344nobodyさん
02/11/05 22:58ID:???↓
表示されなかったような気がする
0345339
02/11/05 23:14ID:R2YenpcUコンテキスト化とはなんでしょう?
ログファイルを確認したところ起動時に例外が発生したような形跡はないように
思います。普通に「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には普通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のような高度なものをやることになっても、
デプロイの仕組みがちゃーんと理解できるようになる。基本は一緒だから。
0348339
02/11/06 00:34ID:brJh6AGy動きました! ありがとうございます。
しかし、新しいアプリの度にweb.xmlを更新しなくてはならないのでしょうか? exampleフォルダにいれた場合はweb.xml
を更新せずともサーブレットが動作しました。
また、以前のヴァージョンのときもweb.xmlは345に書き込んだ通りで動きました。
そのあたりをご教授願います。
0349nobodyさん
02/11/06 00:38ID:QtBZH+BhJavaの開発でIISって使えるのでしょうか?
それともアプリケーションサーバーはWASとかでないと
無理なのでしょうか?
0350nobodyさん
02/11/06 01:27ID:???IIS は Java の動くアプリケーションサーバではありません。
WAS 以外にも Tomcat, WebLogic, iPlanet, JRun などもありますので要件に
あったものをどうぞ。
0351nobodyさん
02/11/06 01:29ID:???examples はあらかじめ出来上がった web.xml が入ってたから。
前バージョンで web.xml に記述が無くてもサーブレットが動いていたのは
Servlet Invoker という、サーブレットを起動するサーブレットがデフォ
ルトで server.xml に設定されていたから。
0352339
02/11/06 03:10ID:brJh6AGyなるほど。よくわかりました。ありがとうございます。
しつこくてすいませんがまだ質問があります・・・
しかしもって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:???そういう記述があったか、もしくは Servlet Invoker が有効になってて /servlet/org.hoge.SampleServlet
というクラス名指定の呼び出しをしていたかのどちらかだろう。
0354nobodyさん
02/11/07 01:38ID:+oMkddUQあって、アプリケーション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:???classes まるごとじゃなくてもサブパッケージごとでリンク張れ。
Windows だと? 2000 以降ならパーティション丸ごとディレクトリにマウント
できるだろ。
0357nobodyさん
02/11/07 02:06ID:???0358nobodyさん
02/11/07 03:22ID:???共通部分のクラスを jar にまとめて $JAVA_HOME/lib/ext に入れとくとか
CLASSPATH に設定しておくとか。
0359354
02/11/08 01:18ID:uREFPWAh大体の方針はわかりました。
ところで、InvokerServletはOffにして、ServletMapping経由で
サーブレットにアクセスさせるなら、classes以下にサーブレットクラスを
配置しなくても動くんでしょうか?これできるならクラスパス設定すれば
解決しますね。あとは、共通領域に置くか、否かという話になりますね。
(ちなみに、Tomcat4.1.12(? 最新を利用)です。)
0360nobodyさん
02/11/08 02:54ID:???実運用時は Web アプリケーション jar にまとめて WEB-INF/lib にぶち込んで
おくのが普通。この場合 CLASSPATH を通す必要がなく、Web アプリケーション
コンテキストでクラスローダーが分けられる。WEB-INF/classes 以下のクラスは
オートリロード対象なので、(オートリロードがオンになってるなら) 開発時に
チョコチョコ修正するところだと思っておけば良い。システムの CLASSPATH 環境
変数にサーブレットやそれを含む jar を通すのはあまり一般的ではない。
0361nobodyさん
02/11/08 03:04ID:???↓
Web アプリケーションで使うクラスを jar にまとめて
0362354
02/11/08 11:18ID:JbsLZRZLjar化してサーバースコープで共有化しておいて、サーブレットは、
WEB-INF/lib以下にjar化しろってのが正解ですか。
開発がWinであることと、数ヵ月後の保守を考えたら、各Webアプリの
サーブレットには、共通モジュールとは違うパッケージ名をつけた方が
良さそうですね。jp.co.companyを頭につけちゃうと、jpのフォルダが
クラスパスの最初に見つかってしまう場所に置かなきゃいけないんですよね?
ショートカットなどのOS固有の方法は、扱いが複雑になるので避けたいです。
0363354
02/11/08 11:45ID:JbsLZRZLパッケージ階層以下の構造が複数のフォルダに分かれても、クラスの検索が
可能なんですね。
サンプル作って確認しました。スマソです。
ということで、パッケージ名は今のまま、本番運用時には共通モジュールを
jar化して切り出すことにします。
結局、時間をかけて、358さんの内容を理解したって感じです。
ありがとうございました。
0364nobodyさん
02/11/08 17:23ID:B5HgIdqzその場合のもっとも簡単なweb.xmlの記述の仕方を教えてください。
要するに、サーブレットが起動すれば(classファイルを認識してくれれば)
いいレベルです。
0365nobodyさん
02/11/10 20:02ID:ykyYofKkpublic void proc(HttpServletRequest req) {}
と記述する他方法は無いのでしょうか。
0366名無しさん@Emacs
02/11/11 01:15ID:???requestオブジェクトは、jspの場合、何も宣言しなくても使えるか
ら、そんな訳の分らん錯覚に陥ってるんだろう。
jspファイルから生成されたjavaのソースファイルを見れば分るが、
jspのページを生成する_jspServiceメソッドは、コンテナが、
(予め生成した)requestやresponseオブジェクトへの参照を渡してる
から、requestとかがjsp内で使えるんだよ。
要するにjavaの基本と同じで、参照を何らかの形で渡さないと使えない。
最も、customタグのように、ハンドラ作って、jspcに組み込めば、引数に
渡さなくてもいいようにできるけど、だったらcustomタグ使うか、
requestオブジェクト渡した方がまし。
0367nobodyさん
02/11/15 22:05ID:???それと、Apache+Tomcatでクラスファイルをオートリロードする方法。
知ってる方がいたら是非教えてください!
0368名無しさん@Emacs
02/11/15 22:43ID:???フィルタ使うか、OS側で制限するしかない。
0369nobodyさん
02/11/16 01:44ID:???Apache と連携してるなら Apache 側で出来ないのか?
オートリロードの設定は $TOMCAT_HOME/conf/server.xml の中で。
0370nobodyさん
02/11/16 03:18ID:???ユーザ管理はmysqlでやってます。
JDBCRealm使ってる方居ますか?
検索しても引っかからないんです。
0373367
02/11/16 15:52ID:???apachedと連携してると、server.xmlのcontextでreloadable="true"にしててもservletクラスのアンロード、リロードがされないんですよ...
tomcatオンリーならOKなんですが。
0374367
02/11/16 16:11ID:???フィルタによるプログラムセキュリティのレベルはどのくらいなものでしょう?外部からフィルタを通さずにプログラムを実行されてしまう、なんてことはあり得ないのでしょうか?
0375nobodyさん
02/11/16 22:19ID:???368ではないが、バグと設定ミスがなければ、おき得ない。
0376nobodyさん
02/11/17 17:58ID:dnX2K2BK実際やってみたところhttp://localhost:8080/が表示されませんでした。
またそれはなぜなのでしょうか?(すごく漠然とした質問ですが・・・)
0377370
02/11/18 22:28ID:???server.xmlとweb.xmlに書き足すだけで動くんですね。
認証部分の実装は一切してません。
0379novadyさん
02/11/19 11:35ID:???webapps以下には適応されません。
どのようにしたら良いかお教えください。
0380nobodyさん
02/11/19 12:49ID:???0381novadyさん
02/11/19 14:59ID:???listingsとmod_jk.conf-autoに手を加えて解決しました。
0382370
02/11/19 23:48ID:???その1
ttp://www.ingrid.org/jajakarta/tomcat/tomcat-4.0b5/src-ja/catalina/docs/JDBCRealm-howto.html
に翻訳されたものがありました。最近出来たみたい。
標準のserver.xmlはuser.xml(users.xml?)を使う設定になってます。
ここをコメントアウトします。「Realm」で検索すれば見つかります。
その近くに各種DB用のテンプレートがありました。
あとは上記のURLの様にやれば出来ると思います。
connectionNameとconnectionPasswordは設定したほうが良いかも。
0383370
02/11/19 23:58ID:???その2
ttp://kamakura.cool.ne.jp/oppama/ssja/tomcatauth.html
にMemoryRealmでのやり方が書いてました。
これを参考にしてweb.xmlを書き足せば動くと思います。
動かない場合はlogs/catalina.outを読めば分かると思います。
実はパスワードの暗号化はまだやってないんですけどね。
0384370
02/11/20 00:10ID:???>>378が正解。
apacheと連動させる場合はserver.xmlのapache-tomcat部分も
書きかえる必要があります。
0385nobodyさん
02/11/20 14:49ID:B0p7tRKQweb.xmlにmime-typeを追加すれば出来るのですが、あらゆる拡張子をダウンロードさせたいため、
mime-typeに指定なしのファイルをダウンロードさせるなにか良い方法はあるでしょうか?
0386nobodyさん
02/11/20 15:12ID:dpW8VNzdDB Server 自体が落ちているとかっていう情報を
拾うことは出来るんでしょうか?
DB は Oracle なんですが。
0387名無しさん@Emacs
02/11/20 23:59ID:???例外になったら落ちてんじゃない?
0388m
02/11/21 23:59ID:2Ed6O/dE| つ 「,"|
.!,'っ_ ⊂_,!
∩ ∩ / ・ ヽつ ミ
| つ 「,"| ギュッ ▼,__ |
.!,'っ_ ⊂_,! (゚Д゚ ,)・| ミ
/ ・ ヽつ ∩ ∩ (| 、)|
 ̄ ̄ ̄ ̄ ̄ ̄\ ▼,__ | | つ 「,"| | ・・| ミ
しかばねだYO!> (゚Д゚ ,)・| !,'っ_ ⊂_,! ヽ.._人
______/ (| 、)| / ・ ヽつ ⊂二⊃ ミ
| ・・| ▼,__ | .⊂二⊃
ヽ.._人 (゚Д゚ ,)・| ⊂二⊃ ミ
⊂二⊃ (| 、)| ⊂二⊃
⊂二⊃ | ・・| ⊂二⊃ ミ
⊂二⊃ ヽ.._人
⊂二⊃ ヾ⊆≡⊇ ″ みょーん
_________ ⊂二⊃____ ヾ⊆≡⊇ ″__________
0389nobodyさん
02/11/22 18:06ID:b/1bts2bjava言語で制作したいです
手伝って下さい
実際に稼動し売上の50%あげます
0391nobodyさん
02/11/23 17:05ID:fnU7YKt0JavaBeansのオブジェクトを転送してjspファイルで使用したいのですが、
この場合、2行めのrequestオブジェクトに設定した名前と8行目に設定した
id="obj"のとこは一致させないといけないのでしょうか?
自分はforwardで呼び出されたjspが8行目で値が取り出され使用されていると思っているのですが。
0:呼び出し元:サーブレット部(CtrlServlet.java)
1:myJavaBean myObj = new MyJavaBean();
2:request.setAttribute("obj",myObj);
3:
4:RequestDispatcher rd = getServletContext().getRequestDispacther("/Output.jsp");
5:rd.forward(request,response);
6:
7:呼び出し先:JSP部(Outout.jsp)///////
8:<jsp:useBean id = "obj" class="ctrlServlet" scope="request"/>
0392nobodyさん
02/11/23 17:57ID:UbdTqBExjarでWARファイルを作成してJBossにデプロイしたらエラーがでました。
エラーメッセージは以下の通り
[ERROR,AutoDeployer] DeploymentInfo failed:file:/D:/ProgramFiles/JBoss-2.4.6_Tom
cat-4.0.3/jboss/deploy/ROOT.war
org.jboss.deployment.J2eeDeploymentException: Error while starting ROOT.war: Err
or during deploy, Cause: org.jboss.deployment.DeploymentException: Error during
deploy, Cause: java.lang.IllegalArgumentException: addChild: Child name '' is n
ot unique
どなたかヒントください・・・
0393nobodyさん
02/11/24 00:43ID:???> id="obj"のとこは一致させないといけないのでしょうか?
その通り。request、sessionなんてあたりのオブジェクトは
「名前の文字列=関連付けられたオブジェクト」
という形でAtrributeに登録される。
0394既出でつか?
02/11/25 18:43ID:???日本語オンラインドキュメントが公開されたみたいですよ?
http://java.sun.com/j2ee/sdk_1.3/ja/techdocs/api/index.html
0395354
02/11/26 01:34ID:2NlroRg/ものですが、WindowsのTomcat4では、相互のパスをクラスパスに
書くことで、相互参照ができていたのですが、
LinuxのTomcat4に持っていったら動かなくなりました。
具体的には、自分のアプリのWEB-INF/classesの絶対パスをクラスパスに
設定すると(catalina.shに記述)、HttpServletExceptionが出て正常に動作しません。
そのパスを変えると正常に動作します。
Linuxに限りクラスパスに、自己アプリケーションのWEB-INF/classesを書いては
いけないなどの話ってあるのでしょうか???
ここでお聞きした話どおり、共通部をjarにまとめることで、目的の動作自体は
できてるのですが、WinでできてLinuxでできないというのが、どうも解せないところで。
0396nobodyさん
02/11/26 04:12ID:???>ものですが、WindowsのTomcat4では、相互のパスをクラスパスに
>書くことで、相互参照ができていたのですが、
>LinuxのTomcat4に持っていったら動かなくなりました。
単にclasspathが通ってないだけだろ。
System.out.println(System.getProperty("java.class.path"));
とでもして確かめてみれば?
そんな面倒な事しなくても、CATALINA_HOME/shared/classes or lib に配置するのでは
ダメなのか?試したことないが。
0397nobodyさん
02/11/26 07:01ID:yx5pl41J環境はTURBOLINUXです。
WNINDOWS2000serverの方がTOMCAT+MYSQLの構築は簡単なんですかねぇ?
0398nobodyさん
02/11/26 08:22ID:???0399nobodyさん
02/11/29 15:24ID:???ディレクトリの一覧がクライアント返りますよね。この画面をServlet
で制御したいのです。実際のディレクトリをみてファイルを一覧を取
得して動的にページを作ればいいわけすが,.warにまとめてしまうと
「実際のディレクトリ」が存在しないので,この手が使えません。
.war内の特定のディレクトリ内にあるリソースの一覧を取得する方法
はないのでしょうか?
0400nobodyさん
02/11/30 03:18ID:N3cPDgWW関数の中でhtmlを吐き出すときこういう↓書き方は無理なんですか? out.printしないとだめぽ?
%>
<HTML>
<HEAD>
<TITLE>test</TITLE>
<%
0401nobodyさん
02/11/30 11:00ID:q4zNHxedフラグ検査だけを関数に切り出して、
<%! func定義 %>
<% if (func() == true){ %>
テキスト情報
<%}%>
などとやる。
そうすれば、Servlet翻訳時に自動的にif文の間にout.printlnが挿入される。
0402nobodyさん
02/11/30 23:17ID:VzfGXbBxつまり一番外のスコープでしかむりぽってことでつか?
0404nobodyさん
02/12/02 00:31ID:FZnx/Sv6サブルーチンにしといて…みたいなことはできないんでつか?
もちろんout.printすればできるだろうけど、
out.print("<HTML>");
out.print("<HEAD>");
// (ここらへんにTITLEやらMETAやらSTYLEやらSCRIPTやらイパーイ)
out.print("</HEAD>");
↑これじゃ嬉しくないっすよね。
ソースのごちゃごちゃさはPerlでCGI書くときとかわらん…
ダブルクォートはいちいちエスケープせなあかんし。
ASPならできるのにな(ぼそっ
なんか漏れが激しく勘違いしてるなら指摘してください。
0405nobodyさん
02/12/02 00:51ID:???↑の部分を別ファイルにして <jsp:include page="そのファイル.jsp" flush="true" />
とやっときませう。
…JSP からじゃないのかな。サーブレットなら request.getRequestDispatcher("そのファイル.jsp").include(request, response)
してくれ。
0407nobodyさん
02/12/02 08:44ID:j/3KH6Gx0408bloom
02/12/02 08:53ID:Ss+94/LChttp://www.agemasukudasai.com/bloom/
0409nobodyさん
02/12/03 06:45ID:Vbwn1Jvx0410nobodyさん
02/12/04 02:12ID:6EZVQnk90411nobodyさん
02/12/05 11:12ID:???0412nicebodyさん
02/12/05 22:16ID:9IL6Ad5Cサーブレット作ってみたんですが、よく分からんことがあります。
catch(Exception e){}とかだけだと、ちゃんと動くのに、
catch(NullPointerException nullpo){}とかを足すと、動かなくなって
しまいます。 どんな時にどんな例外が発生するのか、ほとんど知らんですが、
どの程度catchすればいいんでしょ?トリアエズ今は、知ってる限りのExceptionを
連ねて、コンパイル時にエラーが起きたものだけ削ってます。
ダメ??
0413nobodyさん
02/12/05 22:29ID:???何でもいいのでServletのサンプルを一度見たほうがいいよ。
Exceptionは、
try {
:
}
catch( 自分で定義したException e ) {
:
}
catch( Javaに登録されているException e ) { // NullPointerExceptionとかIOExceptionとか
:
}
catch( Exception e ) { // java.lang.Exception(全ての例外の基底クラス)
:
}
finally {
:
}
という感じに記述する。
とりあえず、「ユーザ定義例外(もしあれば)」→「Javaに登録されている既知の例外(もし必要ならば)」→「Exception(これか必ずつける習慣をつけよう)」→「finally」の順に記述しよう。
知ってる限りのExceptionを並べるというのは意味がない。
NullPointerExceptionを記述するとエラーが出るというのは、try節の中に書いてある君のコードに、NullPointerExceptionを報告するコードが存在しないことを意味する。
「報告」の意味は、throwsでJavaの本を調べれ。てゆうか後は面倒くさいのでJavaの本を読んでくれ。
0414nicebodyさん
02/12/05 23:07ID:???ありがとうです。
もっと勉強しなくちゃです。っていうか、
僕の持ってる本にはfinary{}なんて書いてなかった。
0415nobodyさん
02/12/05 23:16ID:???DB接続を行う処理の場合は「必須」です。
てゆうかコネクションの解放にfinallyを使わない厨房ソースが多いこと・・・。
0416nicebodyさん
02/12/05 23:21ID:???あ、なるほど。DB接続とかをclose()しないといけないってことですね?
tryの中には書いていたけど、catchの方は気にしてなかったです。
0417nobodyさん
02/12/06 00:47ID:???さらにfinallyの中にさらにtry...catchを入れるのが由!(今月号の日経OSでも載ってたNE)
ちなみにfinallyは正常ケースだろうがcatch節に飛んだケースだろうが、そのメソッドを抜ける際に必ず実行されるYO!
0418miya
02/12/06 03:57ID:ICF5OpxXWin2k + Tomcat4.1 + Apache2 で連携していて
環境変数 CLASSPATH にC:\classesを追加しています
/アプリケーションコンテキスト/WEB-INF/classes/TestServletから
CLASSPATHに設定したC:\classesディレクトリ以下のクラスファイル
が見えなくなっています。 コンパイル時は何ともないのに実行時に
NoClassDefFoundErrorが発生してしまいます。
だれかたすけてください。うぅ。
0419nobodyさん
02/12/06 08:32ID:???Tomcatなら環境変数CATALONA_HOMEを通して、common/libまたはcommon/classに必要なJARまたはclassを置く。
そうすればTomcatが起動時に勝手にこいつらにPathを通してくれる。
また、特定のWebアプリケーションからしか参照しないclassであれば、WEB-INF/classesまたはWEB-INF/libに配置してWAR化すること。
0420nobodyさん
02/12/06 08:33ID:???↓
CATALINA_HOME
0421nobodyさん
02/12/06 10:57ID:Kdf5QYtbなんでできなくなったんですか?
0422nobodyさん
02/12/06 20:02ID:aSWE3JmD困っていると言うか、疑問なんですけれど、web.xmlで設定した<url-pattern>が、
tomcat単体ではちゃんと反映されるのに、apache経由だと404になってしまいます。
これは正常なことなのか、はたまた僕の設定が甘いのか、ググってもイマイチ
それらしい答えがありません。はたしてどうなんでしょうか?
0424nobodyさん
02/12/07 03:45ID:6B+N2QJlそ、そうか?
0425nobodyさん
02/12/07 03:50ID:NfROD7dM結局、激しくインクルードファイルに分割するってことは
CGIやASPと同じくデザイナーさん泣かせなわけですね。
デザインとプログラムの分離は無理と。
0426miya
02/12/07 08:42ID:dCIzefcY419番さん、ありがとうございます。なんとか理解できました。これで先に
すすむことができます。近いうちにまた壁にぶつかるとおもうけど・・・。
J2EEも勉強しなくちゃいけないですね。
0427バイク犬
02/12/08 09:12ID:???計ってるのですが、やはり、DocumentRootを共有するってのは出来ないん
でしょうか?
webapps以下に、シンボリックリンクでapacheのDocumentRootを置いて
みたのですが、その場合、すべてtomcatに転送されている感じで、phpや
cgiが動きません。cgiはplain/textに、phpはmimeを吐かない書類として
実行されません。
上の方にproxyでとか、mod_jkを利用する方法なども見かけたのですが…
0428nobodyさん
02/12/08 19:32ID:???0429webApp
02/12/09 01:37ID:6eYifm2a複数端末でのユーザの2重ログインチェックを行いたいのですが。
ある端末Aのログイン画面で「user001」というユーザで
ログイン認証を行った場合、端末Aにユーザが
ログインしている間はその端末Aや
他の端末Bのログイン画面で「user001」というユーザで
ログイン認証を行えないようにしたいのです。
セッション変数を使用するという手もあるとおもうのですが、
1つのブラウザの範囲内でしかセッション変数の格納や取得ができないもの
と思っています。
全てのブラウザのセッション変数を管理するようなしくみなどないもので
しょうか?
なにかいい方法がございましたらご教授お願いします。
0430nobodyさん
02/12/09 01:55ID:???DB使いたくないならStateful Session Beans。
0431workaholic
02/12/09 03:01ID:???俺も以前仕事でそんな処理を書いたことあるけど、
>>430 の言うように、さくっとDBで管理したよ。
つーか 完全にClientが別なのに(端末A,端末B)ステ付Session Beansで、
管理ってできるんだっけ???
0432430
02/12/09 11:39ID:???0433webApp
02/12/09 12:20ID:10t8e7Hwあの後、Stateful SessionBeanを調べてみましたが
どうも、別端末からは出来ないようです。
やはり、DBで管理しないといけないですか。
そうなると、ユーザがログアウトした場合を考えると
ログアウトボタンなどで正しい方法でログアウトして
くれる場合はよいのですが、ブラウザの×ボタンを押さ
れた場合、DBの情報を更新することが出来るのでしょうか。
0434workaholic
02/12/09 12:39ID:rnIhPMMejavaScript使って、onUnload(あるいはonBeforeUnload)等のイベント拾って、
「ログアウト」の旨を伝える内容を、自動submit。
それ以外の方法取りたかったら、もっとキっついClientサイドの
処理書かないといけない。ActiveX使うとか。
...っつても、処理内容はjavaScriptでやるのと同じだから、意味無し。
ギャフン。
0435430
02/12/09 13:08ID:???監査証跡の場合によく使う手口です。記録に残るのでタイムアウトでログアウトさせたという明確な証拠として残る。
ちなみに監査証跡にするんだったら、ユーザの1つ1つのアクションすべてに対してロギングするよ。
(いつ誰がどのページに遷移してどんな操作を行ったか、とか)
ユーザ管理(アクセス権管理やログオン制御も行う)+監査証跡という組み合わせって一般的だと思うんだけど。
0436nobodyさん
02/12/09 22:31ID:???まぁ 1 台構成ならファイルでも出来るわな。File#createNewFile() はアトミック性が
保証されてるし。
1) ログイン時に適当なディレクトリに <userid>.lock ファイルを作る。ファイル
作成に成功すればログイン完了、失敗すれば二重ログイン扱い。
2) ロックファイルの作成に成功した場合、File#deleteOnExit() を仕掛けておく。
さらに一定時間経過したロックファイルを削除しなければならないので以下を処理が
必要。
1) ログインが完了したユーザのセッションに HttpSessionBindingListener を
実装したオブジェクトをぶち込んでおく。このオブジェクトは valueUnbound()
時に自分のロックファイルを削除する。
2) 適当なスレッドを立ててロックファイルの最終更新日から一定時間経過したもの
を消すようなサーブレットを作成 (この場合、リクエストのたびに
File#setLastModified() が必要)。このサーブレットをサーブレットコンテナの
スタートアップに登録。init() でロックファイルをすべて消す処理を入れておくと
良い。
ただ、ブラウザの×ボタンを押した時にはしばらくの間ログインできなくなるがな。
2重ログインを防止しようとすると避けられない問題。さもなくば同一 IP からの
2重ログインを許可するしかない。
0437436
02/12/09 22:36ID:???端末には無効なのであしからず。
0438nobodyさん
02/12/10 01:48ID:uIXkTSgkString[][] my_Array = (String[][])rs.getArray("name");
等とすると
「この型は declaration には不適合です。
java.lang.String[][] から java.sql.Array には変換できません。」
と言われてしまいます。配列をキャストする、変換する方法ってないのでせうか?
0439438
02/12/10 04:04ID:???0440nobodyさん
02/12/10 04:05ID:B9fPQtcJJakartaのOROやLog4jなど利用しよと思うんですけど、
今はstartup.shでCLASSPATHをガツガツ追加して動かしてるんですが、
もっとスマートに導入する方法あると思うんですけど、
教えてください。
■ このスレッドは過去ログ倉庫に格納されています