■■ Servlet/JSP(EJB含む) 質問スレ ■■
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/06/08 11:03ID:Kkr1yl67というわけでつくたよ。
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をガツガツ追加して動かしてるんですが、
もっとスマートに導入する方法あると思うんですけど、
教えてください。
0443nobodyさん
02/12/10 19:23ID:B9fPQtcJレスどうも。
rpmでインストールしたせいか、$TOMCAT_HOME/lib/に相当する、
/var/tomcat4/libが存在しないんすよ。
とりあえず、/var/tomcat4/shared/classesに入れてみたんですけど
駄目でした・・・
自分でも怪しいとこ探してみます。
どもでした。
0444nobodyさん
02/12/10 23:26ID:???0445nobodyさん
02/12/10 23:43ID:???できない。というより意味がない。<%= %>でだめな理由は?
ELはJSP記述を補完するものであって完全にリプレースするものではないよ。
0446nobodyさん
02/12/11 10:17ID:???どこかに落ちていない?
0447nobodyさん
02/12/11 11:09ID:???http://tool-ya.ddo.jp/2ch/trash-box/
0448nobodyさん
02/12/11 17:42ID:LEQcc0R2来年になったら.NETに押されて過去の遺産になるとかいってるやつが
うちの近所にいるのですが、本当でしょうか?
この前雑誌で見た、ASP.NETのWEBアプリの開発の容易さは大衆受け間違いなしと思うのですが
どうでしょう?
0449nobodyさん
02/12/11 20:46ID:GqIGiZUNJavaにも新しい展開が生まれていくと思われ。
少なくともフレームワークやJSP系は徐々に洗練され
始めてるでしょ。好みはそれぞれだと思うけど。
まあ、もし「.NET」が普及するんであれば、その恩恵で
かつてのVBのような展開で、糞みたいなWebアプリが次々
登場するでしょう。
※個人的にはさらに単価が安くなりそうで鬱。
0450438
02/12/12 01:55ID:???Array my_Array = rs.getArray("name");
String[][] my_Values = (String[][])my_Array.getArray("name");
やっぱり分かりません…
0452nobodyさん
02/12/12 03:00ID:???Array myArray = rs.getArray("name");
Object array = myArray.getArray();
System.out.println(array.getClass());
java.sql.Array#getArray()で返って来る実際の型を調べろ
0453438
02/12/12 17:22ID:???型変換の問題は何とかなりました。アリガトございます。
試しに一次元配列のSQLテーブルを作成し、
Array my_Array = rs.getArray("name");
String[] my_Values = (String[])my_Array.getArray();
と試したところ、問題なく配列を取り出せ、また、二次元配列に
SQLテーブルを作成し直して
Array my_Array = rs.getArray("name");
String[][] my_Values = (String[][])my_Array.getArray();
を試すとやはり
This method is not yet implemented.
となります…postgres.jdbc2ドライバーのせいなのかなぁ…
0454438
02/12/12 17:32ID:???String[] my_Values = (String[])my_Array.getArray();
から
for (int i=0; i< my_Values.length; i++) {
for (int j=0; i< 4; j++) {
ma_Values2[i][j] = (String[])(my_Values[i]);
}
}
これならいけ…るかな…と思ったのですが、SQLテーブルが
多次元な次点で、
This method is not yet implemented.
となります…
0456webApp
02/12/15 01:50ID:WeZJArdXレスありがとうございます。
ロックファイルの案を参考にさせて頂きました。
EASサーバが3台構成なので、DBを使用して二重ログインチェック
を行うことにしました。
1.ログインが完了したユーザのユーザID(ユニーク)、日付をDBに登録する。
登録に成功すると、ユーザ認証成功、登録に失敗するとユーザ認証失敗。
2.ログイン認証が成功したユーザのセッションにHttpSessionBinding
Listener を実装したオブジェクトを格納しておく。
このオブジェクトは valueUnbound()時にユーザのユーザIDに該当する
DBのデータを削除する。
3.アプリケーションの画面で業務終了ボタン等のイベントで、ユーザIDに
該当するDBのデータを削除する。
4.ブラウザの×ボタンを押された場合は、セッションタイムアウト時に、2.
の処理が実行されるので、しばらく待つことになる。
0457nobodyさん
02/12/15 08:45ID:???業務終了って言葉が出てきたからには社内システムだと思うが、×ボタンを押した
時にしばらくその人の作業が出来なくなるのは業務的にまずくないか? あと、
それだけだと WebSphere の再起動や異常終了時にユーザロックが残ったままに
なる。3台のうち1台が異常終了した場合、その1台のセッションを使っていた
人のロックだけをはずす手順は分かるか? ロードバランサーがラウンドロビンとか
だとさらにややこしくなると思うが。
0458nobodyさん
02/12/15 13:22ID:6PApFmgW2重ログインの管理については、DBにログイン情報を登録するのは
良いが、セッションオブジェクトを使うのではなく、単純に、普通のクッキーを
使うのはどう?
クライアントのイベントに依存する処理は、なんか危険。
要は、再ログインをどう許すか?という話なのだから、
1.ログイン時にユーザーに対してクッキーを発行
期間は、適度に永続的にして、ブラウザを閉じても消えないようにする。
データは、鯖が作成するセッションIDを入れる。
また、DBに画面アクセス日付とセッションIDを登録。
2.次回ログイン時に、このユーザーIDがセッション中かそうでないか?を判断
3.もしも前回ログイン時間の間隔がログイン中と判断されれば、クッキーに
以前のセッションIDが格納されているか?をチェックして、もし持っている
なら同一ユーザーと判断し、ログインOK
もし、データがないなら、違うマシンからのアクセスなので、ログイン失敗
4.前回ログイン時間との間隔が、セッションの範囲を超えているならば、
新規セッションとみなして、再度、1の処理を行いログインOK
弱点は、セッションの活性化というか、あらゆる画面のセッションチェックで
DBに書いてあるユーザーログイン時間を更新しなくてはならないこと。
あと、セッションオブジェクトと連動できないため、セッション変数が使うときに
ログイン時に戻してあげる必要があること。セッション変数をシリアライズして、
DBに格納しておく必要ありか?
0459nobodyさん
02/12/20 01:51ID:H52mPG7bセッション変数の値を保持することができません。
あるコンテキストAでのセッションIDとForwardしたコンテキストBのセッ
ションIDの値は同じなのですが、セッション変数が無効になります。
他のコンテキストへは、セッション変数は引き継げないものでしょうか?
0460nobodyさん
02/12/20 01:51ID:H52mPG7bpublic class SampleAction extends org.apache.struts.action.Action {
public ActionForward perform(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
ServletContext context = getServlet().getServletContext();
ServletContext forwardContext = context.getContext("/B");
RequestDispatcher dispatcher =
forwardContext.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
//セッションIDの出力 ← ID0000WJ3VLHFLPNH11MSIGWW4Y3A:-1が出力される
System.out.println("AでのセッションID"+request.getRequestedSessionId());
//セッション変数の格納
request.getSession().setAttribute("test","ok");
//セッション変数の取得 ← okが出力される
System.out.println(request.getSession().getAttribute("test"));
dispatcher.forward(request,response);
return null;
}
}
0461nobodyさん
02/12/20 01:52ID:H52mPG7bpublic class SampleAction extends org.apache.struts.action.Action {
public ActionForward perform(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
ServletContext context = getServlet().getServletContext();
//セッションIDの出力 ← Aと同じID0000WJ3VLHFLPNH11MSIGWW4Y3A:-1が出力
される
System.out.println("BでのセッションID"+request.getRequestedSessionId());
//セッション変数の取得 ← okではなく、nullが出力されてしまう
System.out.println(request.getSession().getAttribute("test"));
}
}
すみません。459〜461です。
0462nobodyさん
02/12/20 13:21ID:umD3XVVz(何文字?)まで設定できるのですか?
なんかわけわからい質問かもしれませんが、回答お願いします。
(いきなり先輩に調べろといわれて途方に暮れてます・・・)
■ このスレッドは過去ログ倉庫に格納されています