■■ Servlet/JSP(EJB含む) 質問スレ ■■
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/06/08 11:03ID:Kkr1yl67というわけでつくたよ。
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(何文字?)まで設定できるのですか?
なんかわけわからい質問かもしれませんが、回答お願いします。
(いきなり先輩に調べろといわれて途方に暮れてます・・・)
0463nobodyさん
02/12/20 15:02ID:YqeBsIL9自分でsessionid設定するの?
0464nobodyさん
02/12/20 15:14ID:YqeBsIL9最適なデバッグ環境ってどんな設定したらいいんでしょう。
最初自分は適当にサブレ作ってWAR作ってTomcatに放り込んで再起動し、
とりあえず動かしてSystem.outって感じだったのですが、
あまりにウザいので、デプロイは直接Classの保存先を任意webappの
classesに指定し、web.xmlも直で書き換える形にしました。
しかし、デバガとTomcatを連動する方法がわかりません。
やっぱEclipse単体だと、WSADみたいな事はできないのか?
0465nobodyさん
02/12/20 16:46ID:umD3XVVz設定じゃなくて、取得かな?
なんか、sessionIDを取って、取ったIDをDBにInsertするので、
DBのカラムの桁数の設定の参考にしたいそうです。
(DBはOracle9です。)
/* 今までASPしかやったことない(しかも数ヶ月)私にはJSPは敷居が高いなぁ・・・(涙
(でも次の仕事でつかわないといけないし・・・) */
0466nobodyさん
02/12/21 20:12ID:R2Psu5PAWebSphere AES 4.0で、
あるWebアプリケーションから別のアプリケーションにディスパッチを
行う場合に、セッション情報が失われます。
TomCat4.0.4、3.3系では可能です。
WebSphere AES 4.0でセッション情報を引き継がせる方法はないでしょうか?
0468nobodyさん
02/12/22 01:59ID:???とりあえず、 request.getSession().getId().length() を、
どこぞにout。
参考↓
ttp://java.sun.com/j2ee/sdk_1.3/ja/techdocs/api/index.html
0469468
02/12/22 02:01ID:???Servletの doGet (あるいはdoPost) の引数でも良い。
0470nobodyさん
02/12/22 14:08ID:5C2ox88FのところHIDDENフィールドなんですかね?コーディング大変だけど・・・
SessionオブジェクトなんかはCookieを無効にされたら一発でアウトだし、
URL Rewriting はセキュリティ的に問題あるし・・・
0473age
02/12/22 15:13ID:5C2ox88Fあるらしいのですが、見つかりません・・・
どなたか場所をおしえてください・・・
0474nobodyさん
02/12/22 15:25ID:???0475nobodyさん
02/12/22 16:28ID:xvh5bsxKべつのServlet Context(別のWAR)では、Sessionは別になるってことは
Servlet Spec2.2 からの常識だろ。
Sessionを共有したいのなら、ひとつのWARにしろ。
0476nobodyさん
02/12/22 19:24ID:???IBMのWAS使ってるのなら、WASv4.0.4からはEARワイド(WAR間)でセッション共有できる
独自拡張機能があるでよ。WASv5なら最初から入ってる。
0478nobodyさん
02/12/23 13:04ID:sOBBiOysもっとも簡単なテストの方法は何ですか?
Tomcatを再起動させるしかないのでしょうか?
0479nobodyさん
02/12/23 13:51ID:???運がよければ実行される。
Tomcatの再起動じゃdestroy()は走らないでしょ
0480nobodyさん
02/12/24 12:35ID:SRQOAFB0WASv4.0.3を使用しています。
WASv4.0.4のEARワイド(WAR間)でセッション共有できる
独自拡張機能の詳しい資料や参考URLとか、ありませんか。
0481nobodyさん
02/12/24 18:05ID:dttvkCa8>>480
そんなもの、使うな。
Specじゃないけど、用意されているっていうことは、
そのデメリットを本当に考慮している人だけが後ろめたい気持ちで
コッソリと使うものだ。
素人は、素直にSpecどおりにしておけ。傷が広がらないうちに。
0482nobodyさん
02/12/24 23:47ID:???はい。このリリースノートみてみ。
ftp://ftp.software.ibm.com/software/websphere/appserv/support/fixpacks/was40/fixpack4/docs/404rn.html
でも479氏の言うとおりだと思うね。
積極的に使っていい機能ではありえない。
これを前提とするとポータビリティ性は根底から皆無になるよ。
将来的にまたWASがすっぱりこの機能を削るかもしれないことも
考えよう。
おんなじようなものとしては、WASv5でのセッション同期化機能も
そうだろうな。synchronized(session){...}や
synchronized(session.toString().intern()){...}を
しなくてもよくなるというものだろうけど
これも使うときは要注意ではないかな。
0483nobodyさん
02/12/26 16:04ID:eh9DbOkaWASを V4.0.4にしました。
どうしてもWebApp間でセッション共有を行う為に独自の拡張機能を使用したいのです。
V4.0.4の新機能に、
@「Enterprise Application内でのWeb Application間のSessionの共有」
というものがあります。
また、拡張機能として、
A「Provide session sharing across Web modules in an enterprise application」
というものがあります。
これは、sessionshare.xml というファイルをWASのproperties配下に配置し、
内容は、セッションを共有したいEnterpriseAppnamesをカンマ区切りで記述する
と、セッションマネージャーがそのファイルを参照し、Enterprise Application内の
複数のWeb modulesでセッションを共有できるようになるそうです。
実際試したのですが、1つのear内に複数のwebAppを作成した場合は、複数のwebApp間
でのセッションの共有はできるようになりました。
しかし、複数のearにまたがるwebAppでは、セッションの共有はできませんでした。
Aの拡張機能としては、正しいと思います。
@の新機能は、V4.0.4をインストールした時点で使用できるのか、
それとも何か設定をしないといけないのかが分かりません。
ご存知の方、どうか教えてもらえないでしょうか。
参考URL:http://www-6.ibm.com/jp/domino01/software/websphere.nsf/NewsWeb/92
C9F03BD3ADD24849256C210024EFAB?openDocument&&ViewName=NewsWeb
0484nobodyさん
02/12/26 23:03ID:???> しかし、複数のearにまたがるwebAppでは、セッションの共有はできませんでした。
これはできませんよ。設定がどうこうではなく,EAR間の
セッション(HttpSession)共有はありえないのです。
ちょっと考えてみればなぜかはわかると思いますが。
もしそんなことをしたいというのであれば,それはEAR/WARの
パッケージングの粒度を見直すべきです。前提がそもそも
誤っているということですね。そうなるとHttpSessionではなく
アプリ側で独自のセッション引継ぎを実装するしかないでしょう。
0485nobodyさん
02/12/27 00:46ID:JMAqBuKIそのサーバーがファイヤーウォール内にあるので、
逆プロキシで外部からアクセスするようにしました。
しかし、逆プロキシ経由すると、そこで
sessionオブジェクトが消えてしまうみたいなんです。
こういう場合sessionオブジェクトは使えないんでしょうか?
なんとか動くようにしたいんですけど、
なにかいい手はありませんか?
0486nobodyさん
02/12/27 00:53ID:GgzWBaJJhttp://berry6.hp.infoseek.co.jp/
パートナーのいない人は急げ!
まったり、しっとり過ごしましょ(o^.^o)
0487nobodyさん
02/12/27 01:08ID:RsSYigkg「WASv4.0.4のEARワイド(WAR間)でセッション共有できる
独自拡張機能」というのは、
「EAR内での複数のWAR間でセッション共有できる」
ということなんですね。
EAR間ではセッションは共有できない、またできる
べきものではないのですね。わかりました。
どうもありがとうございました。
0488nobodyさん
02/12/27 01:35ID:???ですが対策ありますか?
0489nobodyさん
02/12/27 05:32ID:???どういう状況下でそうなったか、まず書け。
「Servletが」とは「同じServlet」なのか「別のServlet」なのか。
「1回のPOST」は本当に1回なのか。
0490488
02/12/27 12:04ID:???「Servletが」とは「同じServlet」のことです。
それが一度に何度も実行されないように下記の
対策2のようなonsubmitをformに施しております
ttp://www.atmarkit.co.jp/fjava/javafaq/servlet/servlet12.html
しかしサーブレット側ではdopostが2−4回程コールされてしまうので
ござる。
0492nobodyさん
02/12/27 12:14ID:???そのonSubmitに書いたコードが間違っている。
にしてもこのページ良くないなぁ。
なんにも考えない奴がこのページ見たらJavaScript挟むだけでだけで安心しちゃうよ。
クライアントサイドスクリプトなんていくらでも改変・悪用が可能なんだから、
サーバー側での対処は必須。
クライアントJavaScriptはユーザーの利便性向上以上の目的で使ってはいけない。
0494490
02/12/27 12:42ID:???アドバイスありがとうございます
しかしonSubmitに書いたコードが間違っているとは思えないのです
submitを連打した場合はalertで警告を出し、return false;
していて、動きもそのとおりだから。
この2chでも書き込みすると2回書き込まれちゃうときってありますよね。
それを100%防ぐのはムリなんですかね?
あとstrutsに関してこんなサイトみつけました。
ttp://www.freeml.com/message/struts-user@freeml.com/0000867
このようなことはJSP&サーブレットでもできるものでござるか?
0495nobodyさん
02/12/27 13:04ID:???じゃぁネットワーク監視してPOSTが2回飛んでないことを確認したら?
アクセスログでも良いけど。
そうでなかったら受け取ったServletが自分自身のdoPostを余分に呼んでる。
>このようなことはJSP&サーブレットでもできるものでござるか?
できる。
ていうかサーバーサイドで対処する方法なんていくつもあるんだから、
その中から要求仕様に合ったものを自分で選べばヨシ。
0496485
02/12/27 17:51ID:pFyW/X+iプロキシがセッションidを削ってました。どうもです。
Apacheのmod_proxyを使ってるんですけど、
削らないように設定する方法はわかりませんか?
あと、セッションidが削られるのを直せないとしたら、
sessionの代用は何をつかうのがいいでしょうか?
Stringを1つ保存するくらいなんですけど、
やっぱりクッキーでしょうか?
0500_
02/12/29 12:12ID:LE3o8C1xhttp://freeweb2.kakiko.com/dengeki/indexe.htm
0501nobodyさん
02/12/29 12:14ID:???0502497
02/12/29 13:30ID:TRvxBQ36>その場合ユーザー認証はどのようにして
やっぱりDB使うしかないんじゃないかな。
そういうケースとか、"ロードバランサかましてる"時とか、
Session情報を保持できない時の常套手段。
■ このスレッドは過去ログ倉庫に格納されています