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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/06/08 11:03ID:Kkr1yl67
って無いよな?
というわけでつくたよ。
0441nobodyさん02/12/10 04:56ID:???
>>440
$TOMCAT_HOME/lib/
以下にjarファイルをコピ。
0442nobodyさん02/12/10 08:39ID:???
>>438
java.sql.Arrayのドキュメントみれ
0443nobodyさん02/12/10 19:23ID:B9fPQtcJ
>>441
レスどうも。
rpmでインストールしたせいか、$TOMCAT_HOME/lib/に相当する、
/var/tomcat4/libが存在しないんすよ。
とりあえず、/var/tomcat4/shared/classesに入れてみたんですけど
駄目でした・・・
自分でも怪しいとこ探してみます。
どもでした。

0444nobodyさん02/12/10 23:26ID:???
JSTLの式言語で ${ メソッドの呼出し } みたいなことってできないんですか? たとえば ${ java.util.List#get() }みたいなこと。
0445nobodyさん02/12/10 23:43ID:???
>>444

できない。というより意味がない。<%= %>でだめな理由は?
ELはJSP記述を補完するものであって完全にリプレースするものではないよ。
0446nobodyさん02/12/11 10:17ID:???
ファイルアップロード機能付き掲示板のソースって
どこかに落ちていない?
0447nobodyさん02/12/11 11:09ID:???
>>446
http://tool-ya.ddo.jp/2ch/trash-box/
0448nobodyさん02/12/11 17:42ID:LEQcc0R2
Servlet&JSPの未来は明るいのでしょうか?
来年になったら.NETに押されて過去の遺産になるとかいってるやつが
うちの近所にいるのですが、本当でしょうか?

この前雑誌で見た、ASP.NETのWEBアプリの開発の容易さは大衆受け間違いなしと思うのですが
どうでしょう?
0449nobodyさん02/12/11 20:46ID:GqIGiZUN
>>448
Javaにも新しい展開が生まれていくと思われ。

少なくともフレームワークやJSP系は徐々に洗練され
始めてるでしょ。好みはそれぞれだと思うけど。

まあ、もし「.NET」が普及するんであれば、その恩恵で
かつてのVBのような展開で、糞みたいなWebアプリが次々
登場するでしょう。

※個人的にはさらに単価が安くなりそうで鬱。
045043802/12/12 01:55ID:???
>>441
Array my_Array = rs.getArray("name");
String[][] my_Values = (String[][])my_Array.getArray("name");
やっぱり分かりません…
045143802/12/12 01:58ID:???
>>450
レス番までも間違えました…>>442さんへ、です。
0452nobodyさん02/12/12 03:00ID:???
>>450
Array myArray = rs.getArray("name");
Object array = myArray.getArray();
System.out.println(array.getClass());

java.sql.Array#getArray()で返って来る実際の型を調べろ
045343802/12/12 17:22ID:???
>>452
型変換の問題は何とかなりました。アリガトございます。
試しに一次元配列の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ドライバーのせいなのかなぁ…
045443802/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.
となります…
0455nobodyさん02/12/14 04:54ID:???
>>454
自分で実装してcontributeしる!
0456webApp02/12/15 01:50ID:WeZJArdX
>>436
レスありがとうございます。
ロックファイルの案を参考にさせて頂きました。

EASサーバが3台構成なので、DBを使用して二重ログインチェック
を行うことにしました。

1.ログインが完了したユーザのユーザID(ユニーク)、日付をDBに登録する。
  登録に成功すると、ユーザ認証成功、登録に失敗するとユーザ認証失敗。

2.ログイン認証が成功したユーザのセッションにHttpSessionBinding
  Listener を実装したオブジェクトを格納しておく。
  このオブジェクトは valueUnbound()時にユーザのユーザIDに該当する
  DBのデータを削除する。

3.アプリケーションの画面で業務終了ボタン等のイベントで、ユーザIDに
  該当するDBのデータを削除する。

4.ブラウザの×ボタンを押された場合は、セッションタイムアウト時に、2.
  の処理が実行されるので、しばらく待つことになる。
0457nobodyさん02/12/15 08:45ID:???
>>456
業務終了って言葉が出てきたからには社内システムだと思うが、×ボタンを押した
時にしばらくその人の作業が出来なくなるのは業務的にまずくないか? あと、
それだけだと WebSphere の再起動や異常終了時にユーザロックが残ったままに
なる。3台のうち1台が異常終了した場合、その1台のセッションを使っていた
人のロックだけをはずす手順は分かるか? ロードバランサーがラウンドロビンとか
だとさらにややこしくなると思うが。
0458nobodyさん02/12/15 13:22ID:6PApFmgW
>456
2重ログインの管理については、DBにログイン情報を登録するのは
良いが、セッションオブジェクトを使うのではなく、単純に、普通のクッキーを
使うのはどう?
クライアントのイベントに依存する処理は、なんか危険。

要は、再ログインをどう許すか?という話なのだから、

1.ログイン時にユーザーに対してクッキーを発行
  期間は、適度に永続的にして、ブラウザを閉じても消えないようにする。
  データは、鯖が作成するセッションIDを入れる。

  また、DBに画面アクセス日付とセッションIDを登録。

2.次回ログイン時に、このユーザーIDがセッション中かそうでないか?を判断

3.もしも前回ログイン時間の間隔がログイン中と判断されれば、クッキーに
  以前のセッションIDが格納されているか?をチェックして、もし持っている
  なら同一ユーザーと判断し、ログインOK
  もし、データがないなら、違うマシンからのアクセスなので、ログイン失敗

4.前回ログイン時間との間隔が、セッションの範囲を超えているならば、
  新規セッションとみなして、再度、1の処理を行いログインOK


弱点は、セッションの活性化というか、あらゆる画面のセッションチェックで
DBに書いてあるユーザーログイン時間を更新しなくてはならないこと。

あと、セッションオブジェクトと連動できないため、セッション変数が使うときに
ログイン時に戻してあげる必要があること。セッション変数をシリアライズして、
DBに格納しておく必要ありか?
0459nobodyさん02/12/20 01:51ID:H52mPG7b
StrutsのフレームワークでActionクラスから別のJSPにForwardする時に、
セッション変数の値を保持することができません。
あるコンテキストAでのセッションIDとForwardしたコンテキストBのセッ
ションIDの値は同じなのですが、セッション変数が無効になります。

他のコンテキストへは、セッション変数は引き継げないものでしょうか?
0460nobodyさん02/12/20 01:51ID:H52mPG7b
コンテキストAのActionクラス
public 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:H52mPG7b
コンテキストBのJSPから呼ばれるActionクラス
public 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
servletのsessionidについて質問ですが、stringのsessionidの場合、最大何桁
(何文字?)まで設定できるのですか?

なんかわけわからい質問かもしれませんが、回答お願いします。
(いきなり先輩に調べろといわれて途方に暮れてます・・・)
0463nobodyさん02/12/20 15:02ID:YqeBsIL9
>>462
自分でsessionid設定するの?
0464nobodyさん02/12/20 15:14ID:YqeBsIL9
唐突なんですが、EclipseとTomcatで開発する時、
最適なデバッグ環境ってどんな設定したらいいんでしょう。

最初自分は適当にサブレ作ってWAR作ってTomcatに放り込んで再起動し、
とりあえず動かしてSystem.outって感じだったのですが、
あまりにウザいので、デプロイは直接Classの保存先を任意webappの
classesに指定し、web.xmlも直で書き換える形にしました。
しかし、デバガとTomcatを連動する方法がわかりません。

やっぱEclipse単体だと、WSADみたいな事はできないのか?
0465nobodyさん02/12/20 16:46ID:umD3XVVz
>463
設定じゃなくて、取得かな?
なんか、sessionIDを取って、取ったIDをDBにInsertするので、
DBのカラムの桁数の設定の参考にしたいそうです。
(DBはOracle9です。)

/* 今までASPしかやったことない(しかも数ヶ月)私にはJSPは敷居が高いなぁ・・・(涙
(でも次の仕事でつかわないといけないし・・・) */



0466nobodyさん02/12/21 20:12ID:R2Psu5PA
459〜461で追加です。

WebSphere AES 4.0で、
あるWebアプリケーションから別のアプリケーションにディスパッチを
行う場合に、セッション情報が失われます。
TomCat4.0.4、3.3系では可能です。

WebSphere AES 4.0でセッション情報を引き継がせる方法はないでしょうか?

0467nobodyさん02/12/22 00:13ID:???
>>466
管理コンソールかどこかに設定なかったっけ?
0468nobodyさん02/12/22 01:59ID:???
>>465
とりあえず、 request.getSession().getId().length() を、
どこぞにout。

参考↓
ttp://java.sun.com/j2ee/sdk_1.3/ja/techdocs/api/index.html
046946802/12/22 02:01ID:???
あ、ちなみにrequestは、JSPの暗黙インスタンスでもいいし、
Servletの doGet (あるいはdoPost) の引数でも良い。
0470nobodyさん02/12/22 14:08ID:5C2ox88F
Session管理って、もっとも確実でセキュリティの高い方法は、結局
のところHIDDENフィールドなんですかね?コーディング大変だけど・・・

SessionオブジェクトなんかはCookieを無効にされたら一発でアウトだし、
URL Rewriting はセキュリティ的に問題あるし・・・
0471nobodyさん02/12/22 14:10ID:???
>>470
Cookie も HIDDEN も URL Rewrite も平文パケットが飛ぶのは同じ
素直に SSL 使いなはれ
0472nobodyさん02/12/22 14:19ID:???
>>470
てゆーかHiddenって...。ソース見られたら終わりでは..。
0473age02/12/22 15:13ID:5C2ox88F
Servlet API のクラスの仕様が乗っている J2EE DOC ってのが
あるらしいのですが、見つかりません・・・

どなたか場所をおしえてください・・・
0474nobodyさん02/12/22 15:25ID:???
http://java.sun.com/j2ee/sdk_1.3/ja/techdocs/api/index.html
0475nobodyさん02/12/22 16:28ID:xvh5bsxK
Servlet Specよめ。
べつのServlet Context(別のWAR)では、Sessionは別になるってことは
Servlet Spec2.2 からの常識だろ。

Sessionを共有したいのなら、ひとつのWARにしろ。
0476nobodyさん02/12/22 19:24ID:???
>>475

IBMのWAS使ってるのなら、WASv4.0.4からはEARワイド(WAR間)でセッション共有できる
独自拡張機能があるでよ。WASv5なら最初から入ってる。
0477nobodyさん02/12/22 23:22ID:???
>>474
ありがとう!
0478nobodyさん02/12/23 13:04ID:sOBBiOys
destroyメソッドを実行させたいのですが、
もっとも簡単なテストの方法は何ですか?

Tomcatを再起動させるしかないのでしょうか?
0479nobodyさん02/12/23 13:51ID:???
System.gc();
運がよければ実行される。

Tomcatの再起動じゃdestroy()は走らないでしょ
0480nobodyさん02/12/24 12:35ID:SRQOAFB0
>476
WASv4.0.3を使用しています。
WASv4.0.4のEARワイド(WAR間)でセッション共有できる
独自拡張機能の詳しい資料や参考URLとか、ありませんか。
0481nobodyさん02/12/24 18:05ID:dttvkCa8
>>476
>>480
そんなもの、使うな。
Specじゃないけど、用意されているっていうことは、
そのデメリットを本当に考慮している人だけが後ろめたい気持ちで
コッソリと使うものだ。

素人は、素直にSpecどおりにしておけ。傷が広がらないうちに。
0482nobodyさん02/12/24 23:47ID:???
>>478

はい。このリリースノートみてみ。

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:eh9DbOka
>>481
WASを 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:???
>>481

> しかし、複数のearにまたがるwebAppでは、セッションの共有はできませんでした。

これはできませんよ。設定がどうこうではなく,EAR間の
セッション(HttpSession)共有はありえないのです。
ちょっと考えてみればなぜかはわかると思いますが。

もしそんなことをしたいというのであれば,それはEAR/WARの
パッケージングの粒度を見直すべきです。前提がそもそも
誤っているということですね。そうなるとHttpSessionではなく
アプリ側で独自のセッション引継ぎを実装するしかないでしょう。
0485nobodyさん02/12/27 00:46ID:JMAqBuKI
Tomcatでjspを使ったのWebアプリを動かしてるんですけど、
そのサーバーがファイヤーウォール内にあるので、
逆プロキシで外部からアクセスするようにしました。
しかし、逆プロキシ経由すると、そこで
sessionオブジェクトが消えてしまうみたいなんです。
こういう場合sessionオブジェクトは使えないんでしょうか?

なんとか動くようにしたいんですけど、
なにかいい手はありませんか?
0486nobodyさん02/12/27 00:53ID:GgzWBaJJ


http://berry6.hp.infoseek.co.jp/
パートナーのいない人は急げ!
まったり、しっとり過ごしましょ(o^.^o)

0487nobodyさん02/12/27 01:08ID:RsSYigkg
>>484
「WASv4.0.4のEARワイド(WAR間)でセッション共有できる
独自拡張機能」というのは、
「EAR内での複数のWAR間でセッション共有できる」
ということなんですね。
EAR間ではセッションは共有できない、またできる
べきものではないのですね。わかりました。
どうもありがとうございました。
0488nobodyさん02/12/27 01:35ID:???
1回のPOSTでservletが数回実行されてしまうの
ですが対策ありますか?
0489nobodyさん02/12/27 05:32ID:???
>>488
どういう状況下でそうなったか、まず書け。
「Servletが」とは「同じServlet」なのか「別のServlet」なのか。
「1回のPOST」は本当に1回なのか。
049048802/12/27 12:04ID:???
簡単に書いてしまい申し訳ない
「Servletが」とは「同じServlet」のことです。
それが一度に何度も実行されないように下記の
対策2のようなonsubmitをformに施しております
ttp://www.atmarkit.co.jp/fjava/javafaq/servlet/servlet12.html
しかしサーブレット側ではdopostが2−4回程コールされてしまうので
ござる。
0491nobodyさん02/12/27 12:06ID:???
>>485
同じような問題に遭遇したことがあるが解決法はしらない
誰かおしえてくれー
0492nobodyさん02/12/27 12:14ID:???
>>490
そのonSubmitに書いたコードが間違っている。

にしてもこのページ良くないなぁ。
なんにも考えない奴がこのページ見たらJavaScript挟むだけでだけで安心しちゃうよ。

クライアントサイドスクリプトなんていくらでも改変・悪用が可能なんだから、
サーバー側での対処は必須。
クライアントJavaScriptはユーザーの利便性向上以上の目的で使ってはいけない。
0493nobodyさん02/12/27 12:16ID:???
>>485,491
そのプロキシがヘッダ弄ってるんじゃない?
049449002/12/27 12:42ID:???
>>492
アドバイスありがとうございます
しかし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:???
>しかしonSubmitに書いたコードが間違っているとは思えないのです

じゃぁネットワーク監視してPOSTが2回飛んでないことを確認したら?
アクセスログでも良いけど。
そうでなかったら受け取ったServletが自分自身のdoPostを余分に呼んでる。


>このようなことはJSP&サーブレットでもできるものでござるか?

できる。

ていうかサーバーサイドで対処する方法なんていくつもあるんだから、
その中から要求仕様に合ったものを自分で選べばヨシ。
049648502/12/27 17:51ID:pFyW/X+i
>>493
プロキシがセッションidを削ってました。どうもです。

Apacheのmod_proxyを使ってるんですけど、
削らないように設定する方法はわかりませんか?

あと、セッションidが削られるのを直せないとしたら、
sessionの代用は何をつかうのがいいでしょうか?
Stringを1つ保存するくらいなんですけど、
やっぱりクッキーでしょうか?
0497nobodyさん02/12/28 12:10ID:???
>>485
sessionidが削られる環境=cookieも削られる、筈。
ていうか、同一。
049849702/12/28 12:12ID:???
あ、>>485 ていうか、>>496 へのレス。
049949002/12/29 12:07ID:???
>>497
その場合ユーザー認証はどのようにして
実現します?
0500_02/12/29 12:12ID:LE3o8C1x






http://freeweb2.kakiko.com/dengeki/indexe.htm




0501nobodyさん02/12/29 12:14ID:???
Cookieでなく URL-rewriting にしたら?
050249702/12/29 13:30ID:TRvxBQ36
>>499

>その場合ユーザー認証はどのようにして

やっぱりDB使うしかないんじゃないかな。
そういうケースとか、"ロードバランサかましてる"時とか、
Session情報を保持できない時の常套手段。
0503nobodyさん02/12/29 13:52ID:???
どうしてSessionそのものとSessionを維持する手段を分けて考えられないのかね。
ここの連中はアホばっかり?

Cookie使えないならURLリライティング使えばいいだろ
DB云々なんてのは全然関係ない、レイヤの違う話。
0504nobodyさん02/12/29 15:16ID:???
>>503
>>501で既出な話をそこまで偉そうに言えるお前がすごい。
050549702/12/29 15:20ID:5NDJvXMb
>>503
あのね、漏れは、>>499

>その場合ユーザー認証はどのようにして実現します?

の、問いに対して「自分だったらこういうアプローチを取る」と、
答えただけなんだけど。...ていうか仕事で実際そうしてるし。

501=503 ?? 自分の意見が無視されたのが、そんなにくやしいのかね。
ていうか、「ユーザ認証の処理」に対して「URLリライティング」を適用するっていうのを、
>>499に具体的に提示してやれよ。それこそ、「レイヤが違うん」じゃないの?

話聞けよ。アホ。
0506nobodyさん02/12/29 15:54ID:???
ユーザー認証とSessionをごっちゃにしてる>>497の勘違いを指摘せずに
「DB使うしかない」なんて更に見当違いの話持ち出したってそれこそ泥沼だな・・・

Sessionさえ維持できれば497が既に知ってるであろうユーザー認証の手段が使える。


>の、問いに対して「自分だったらこういうアプローチを取る」と、
>答えただけなんだけど。...ていうか仕事で実際そうしてるし。

DBを使うことと認証がどうしてリンクするの?
きちんと理解できてないのならもう少しよく勉強した方がいいよ。
DB?コンテナが用意してくれているセッション管理の機構を自分で再実装してるのかね(笑
それともユーザー名とパスワードをリクエスト毎に持ちまわってるのかね(笑
050749702/12/29 20:30ID:V00Mpbw5
>>506
>DBを使うことと認証がどうしてリンクするの?

確かに話飛び過ぎたかもしれんが、漏れがやった具体的な方法というのは
>>506がシステム屋なら知ってると思うが)一般的に「そのWebシステムを使用するユーザ(例えばその会社の社員)」についての
情報ってのは、普通ソレ専用のDBに溜めてある。
で、単純にAPサーバにあるWebシステムに「ログオン」する時に、そこに保存してあるIDやパスとの比較を
行い、以降の処理を行う。

...っていうか普通のSEだったら、こんなの「何あたりまえの事言ってんの?」って感じだと
思うんだが...。
で、この後、

>Sessionさえ維持できれば497が既に知ってるであろうユーザー認証の手段が使える

これって、要するに「ログオン状態(State)の変遷の保持」の事言いたいんだよな。
で、ここでポイントになるのが漏れが>>502で言った、
「ロードバランサとかかましている時」=「Session状態をC/Sで一致させる為の手段が無い時」
に、どうするのか、って事。

いくらURLRewrite使ってもさ、もしロードバランサとかでAPサーバ振り分けられちゃったら、
「そのSessionIDに一致するインスタンスがサーバにない」って事になるよな。
(つーかクラスタ組めばいい感じになるAPサーバも世の中にはあるが)

要するにだ。もう一度>>502の漏れの書き込みを読んでみろよ。漏れの経験上の一意見として、

>そういうケースとか、"ロードバランサかましてる"時とか、Session情報を保持できない時の常套手段。

として、DBを使うって、言った、んだよ。
お前、実務経験無いだろ。学生か?
050849702/12/29 20:41ID:V00Mpbw5
>>507
自己レス。すまん。つーか「状態変遷の保持」。つまり、>>506>>503で言った

>どうしてSessionそのものとSessionを維持する手段を分けて考えられないのかね。

漏れは「Sessionが維持できない」ケースとして、例を出したんだよ。「こんな事あったな」って。
でその時はログオン後、仕方が無いので、要所要所でDBから読んで処理した。
(全部のWebページ毎、では無いが)
特に、インターネットに接続された外部のユーザがアクセスしてくる
システム(ただしそれほどクリティカルでない)で、かつそれぞれクラ環境がバラバラで、
Cookie使用禁止な所もあれば、プロキシの設定がアレな所もある。

最初は普通にSessionで管理していたんだが、客側の都合で「このままで動くようにしてくれ」
言われてしまった。で、こんな処理を書いた訳だ。

実際Sessionで管理できれば楽なんだけどな。ま、こんなケースもあると。
0509nobodyさん02/12/29 22:40ID:???
おちけつ
0510nobodyさん02/12/30 01:22ID:???
どうも自分の間違いを素直に認められない方のようで(笑

>>502
>>その場合ユーザー認証はどのようにして
>やっぱりDB使うしかないんじゃないかな。

「その場合」で無い場合(=Cookieが使用できる場合)のユーザー認証に
DBは必須ではないような書き方ですね。

>情報ってのは、普通ソレ専用のDBに溜めてある。

へー「DB」っていうのはそう言う意味で使ってたの。502と矛盾してますよ。
しかしずいぶん程度の低い話になったね。

>で、ここでポイントになるのが漏れが>>502で言った、
>「ロードバランサとかかましている時」=「Session状態をC/Sで一致させる為の手段が無い時」
>に、どうするのか、って事。

話がすり替わってるよ。
いつの間にこんな特殊な(※)環境の話になったのかね。
409の環境に関する情報は「Cookieが使えない」ぐらいしか出てないようだけど(笑
※素朴なServletコンテナの実装からすると特殊な、という意味ね。念のため

>お前、実務経験無いだろ。学生か?

実務経験あってもわかってなきゃ意味ね−な。理解してる学生バイトの方が数倍使えるよ(笑
051149702/12/30 03:37ID:5wRLF/Jd
>>510
今このスレ遡って読み返してみた。正直な話、いつの間にか話飛んでたよ。
間違いがあったのは認める。...ムカつくけどな、お前。
ガキの噛み付き方丸出しだし。
(って、それに煽られて興奮気味になんだかわからない事書き込みしてる漏れも相当ガキ丸出しだが....)

つーか元の話ってのは、「Sessionが削られている」から始まって「ユーザ認証ってどうしてます?」
って話だろ?
それで、漏れは>>508に書いたような事が勝手に頭によぎってそう書いたんだよ。
つーか「理解してる学生バイト」(ちなみにシステム屋で学生バイトなんているのか?)
ならわかると思うが、

>話がすり替わってるよ。いつの間にこんな特殊な(※)環境の話になったのかね。

と思うなら、

>へー「DB」っていうのはそう言う意味で使ってたの。502と矛盾してますよ。

矛盾なんて無ェだろ。

つーか、もう、なんか元の話と関係無くなってるので、この辺で。
他の方々、アホさらしてすんません。
0512初心者02/12/30 07:07ID:UlqXA/Qv
これからJSPを始めようとしているんですが、誰か、
>>34>>55で紹介されてる、

Apache_1.3.22-Mod_SSL_2.8.5-OpenSSL_0.9.6b-WIN32.zip
OpenSSL-0.9.6c-Windows.zip
jakarta-tomcat-4.0.3.zip
の3点をうぷして頂けないでしょうか?

後、>>55さんのページに書かれてた LawWebOffice モジュール とは何ですか?
これも必要なんでしょうか?

よろしくお願いします。
0513nobodyさん02/12/30 12:50ID:???
>>512
場を和ませようとしたのか?
まずぐぐれ
0514nobodyさん02/12/30 17:21ID:???
なんか荒れてるねー。つーか荒れてる訳では無いのか。
不毛な争いはちょっと置いといて...。

>>512
とりあえず
Apache関係の日本の総本山 → http://www.apache.jp/
JAKARTAプロジェクト関係の日本の総本山 → http://www.ingrid.org/jajakarta/
行ってみれ。
0515まーまー02/12/30 17:36ID:???
>>511 (497?)
オレもSEのはしくれなので言いたい事はわかるんだけど、
相手の環境考えなきゃ。それこそその筋の人間なら、頭の中で話つながるんだけど、
自宅でサーバ立てようって向きには、「何言ってんの?」って思われても仕方が無いと思う。

>>510
Sessionと、Session維持を分けて考えろとか、良いとこ突っ込んでんだけどねー。
君、口悪すぎ(笑)

肩持つ訳じゃないけど、511は本人も言ってる通り、「そういう例」を
ただ何の気無しに言ったんだと思うよ。経験した話として。
たぶん、これってただそれだけの話。
0516初心者02/12/30 17:42ID:UlqXA/Qv
いや、マジなんすけど。
直でぐぐってもヒットしないし、>>514さんの辺りを見ても中々見つかりません。
0517nobodyさん02/12/30 20:34ID:???
>>516
ttp://www.apache.org/
ttp://jakarta.apache.org

このくらい、押さえとけ。
0518初心者02/12/30 22:14ID:UlqXA/Qv
>>517
バージョンの違う奴なら落として>>56のページを真似してみたんですけど、
どうしても上手く起動しません。
Apacheのhttpd.confの継ぎ足した所のSSLについての部分でエラーが起きている
みたいなんですが、ページに書いてあるのと同じバージョンなら上手くいくので
はないかと思いまして。
0519nobodyさん02/12/30 22:28ID:???
2ちゃのServlet関係スレってレベル低いね〜
質問者は仕方ないとして、答えてる奴の8割くらいは、ただの素人だな…

たまにマトモな奴もいるようだけど…

0520nobodyさん02/12/30 22:32ID:???
>>518
Apache2.0系とApache1.3系はモジュールの実装の仕方が違うぞ!
ついでに、Tomcat3.X系と4.X系も違う!

古いバージョンが欲しいのなら、>>517 のサイトをくまなく探せ!
必ずあるから!
0521初心者02/12/30 22:48ID:UlqXA/Qv
>>520
ありがとうございます。
Apacheは、Apache_1.3.27-Mod_SSL_2.8.12-OpenSSL_0.9.6h-Win32.zip
SSLは、OpenSSL-0.9.6h-Win32.zip
Tomcatは、jakarta-tomcat-4.0.6.zip
を解凍して使用しました。

http://members.tripod.co.jp/emasuken/open/apache_mod_ssl_tomcat.txt
の通りにしようとしたら、出来ない所がいくつかありまして。
たとえば、c:\app\opensslの下にbinディレクトリは存在しませんでした。

>>517のサイトも、もう一度まわってみます。
0522nobodyさん02/12/30 23:51ID:???
>>519 のレベルの高い回答望む。俺ら素人だから。
0523nobodyさん02/12/31 00:33ID:???
(・∀・)バカガツレタ
0524初心者02/12/31 08:15ID:UeevlrXN
やっぱり、全く同じバージョンのは見つかりませんでした。
OpenSSLを解凍してもbinディレクトリが出来ない場合、作ればいいのでしょうか?
0525初心者02/12/31 08:31ID:UeevlrXN
SSLキーの作成って所が全く上手くいかないんですよね。
コマンドプロンプトで、以下のように命令を送ると、
C:\app\openssl\bin>openssl req -config openssl.cnf -new -out my-server.csr

以下のエラーが出ます。
Using configuration from openssl.cnf
error on line -1 of openssl.cnf
812:error:02001002:system library:fopen:No such file or directory:.\crypto\bio\bss_file.c:104:fopen('openssl.cnf','rb')
812:error:2006D002:BIO routines:BIO_new_file:system lib:.\crypto\bio\bss_file.c:106:
812:error:0E064002:configuration file routines:CONF_load:system lib:.\crypto\conf\conf_lib.c:91:
0526nobodyさん02/12/31 12:28ID:???
>>524

Apach Tomcat OpenSSL

の内、どれが見つからないんだ?
で、お望みのバージョンはいくつなんだ?

Tomcat4.0.3と4.0.6は、セキュホ対策以外は同じ物だぞ!
0527nobodyさん02/12/31 12:53ID:???
>>525

http://bitlink.co.jp/server/win_apache.htm
0528nobodyさん03/01/01 05:43ID:3/OpWna1
質問なんですが、今ここにAServletとBServletがあるとします。
これらはそれぞれ、本来は別々のリクエストで起動するのですが、
ある時だけ、AServletからBServletにdispatchする事があります。
その際に、getParameterする値を書き換える事はできるでしょうか。
要するに"get"に対して、"setParameter"みたいな...。

...って、本当はこんな事しなくても、MVCで言えばちゃんとServletが
コントローラに徹していて、実際のモデル(ビジネスロジック)をBeanに
分けて実装してあれば、わざわざdispatchなんかしなくても完結できるんですけどね....。
0529初心者03/01/01 08:10ID:G2l2vXwo
>>526
>>527
おお、ありがとうございます。
とりあえず、SSLを実装しない形では、他のサイトを探してJSPが走る形には出来ました。
(まだ、さわり程度のサンプルjspしか試していませんが)
>>527さんの所も読んでみて、SSLの実装にもチャレンジしてみますね。
0530nobodyさん03/01/01 18:31ID:OtnMrmxA
HttpSessionオブジェクトを使用したセッション管理を行った場合、
SessionIDが付加された形でクライアントのrequestが送信されて
きますよね?
ってことはセッション管理は各クライアント毎ということになりますから、
クライアントが同一ならブラウザを何個立ち上げてもHttpSessionオブジェクト
は共有されるはずですよね?

Servletで上記のセッション管理をgetSessionを使用して実現してみると
クライアントごとに値が保持されるのですが、
(同一クライアントであれば、ブラウザを何個起動しなおしても値は保持される)

JSPの暗黙オブジェクトであるsessionを使用して同一の機能を実現して
みると、ブラウザごとに値が保持されてしまいます。
(ブラウザを起動するたびに値が初期化されてしまいます)

これはなぜなのでしょうか?
0531nobodyさん03/01/01 19:12ID:gMpGNAZi
>>530

直接、HttpのRequestとResponseをみてみるのが早いかと。

Requestで、cookie は同一のものが送られている?
Responseで、set cookie は同一のものがセットされている?

それをまず、確認してみたら?
0532nobodyさん03/01/01 20:25ID:WxVSzOcR
>>530
Sessionの寿命って、どう設定してる?
ていうか、この場合の「クライアント」の定義って、
「その瞬間、サーバにリクエストを投げたヤツ」って思うんだけど。
つまり、「ハード的な台数の別」でなくて、立ち上げたブラウザの個数分、
クライアントなんだと思うが。その辺の認識は、どうか。
053353203/01/01 20:36ID:WxVSzOcR
ちなみに「Session」というのは、1回の「HTTP Request→Response」チェーンの事を言うのであって、
「このクライアントはさっきから接続したままです」っていう「状態」を表すものは、
HTTPにはそもそも存在しない(HTTPはStateless Protocol)。従って、
「Sessionの維持された状態」を表すには、他の、何か別の物を利用して実現するしなければならない。
それが例えばJavaServletの場合、HttpSession(と、その周辺)の機構だったりする。
..って考えた場合、「クライアント」ってどこを指してる?

(いや、話には全然関係無いんだけど、よく混同してる人がいるので、念のため。)
053453003/01/01 20:44ID:OtnMrmxA
>>532
SessionIDってクライアント端末のCookieに保存されるのですよね?
だったらSessionのスコープって「ハード的な台数の別」になるのでは
ないのですか?なんか私アホなこと言ってる?
Sessionの寿命は各セッションオブジェクトの寿命であって
Sessionのスコープとは関係なくないですか?

>>531
Cookieを使用したセッション管理の話ですか?
それこそ各クライアント端末に格納されるのですから
各クライアント端末ごとにセッション管理されるはずですよね?
(何個ブラウザを立ち上げても値は共有されるはず)
ちょっとやってみます。
053553003/01/01 20:49ID:OtnMrmxA
>>533
HTTPがステートレスであることはわかります。
私が使用している「セッション」はHttpSessionオブジェクトを使用して
実現される値保持の状態を指します。
また「Session」という言葉はHttpSessionオブジェクトを指しています。
「クライアント」とはクライアント端末を指します。
0536nobodyさん03/01/01 20:57ID:RNLf2SvW
★★★★★★★★★★★★★★★★★★★★★★★★
激安を超えた!超激安!
新品アダルトDVDが1本500円から!
個人でも1本から買える!オンラインDVD激安問屋!
GO!GO!DVDドットコム!
http://55dvd.com/
只今福袋も売り出し中! 売り切れ御免!
★★★★★★★★★★★★★★★★★★★★★★★★
0537nobodyさん03/01/01 21:18ID:gMpGNAZi
>>534

Cookieは同一PCでブラウザを複数起動しても必ず同じものが送られるとは限らないよ。
IEとネスケでも、違うポリシーだったような。
(ネスケの場合は、同じCookieを、IEの場合は、ブラウザのプロセスごとに違うCookieだったかな?)

メモリー上のみのクッキーの場合は、ブラウザを新たに起動すれば違うCookieを送るときもある。

このへん、最近のIEの場合は、どうなっているかわからないので、
まー、とりあえず確かめて報告してくれると嬉しいなり。
053853003/01/01 21:43ID:OtnMrmxA
>>537
うーん、先入観ってこわいですねぇ・・・
Cookieってクライアント端末に格納されるっていう話だったので
てっきり一端末一Cokkieファイルみたいなイメージに囚われていました。

IEにて試してみたら、CookieおよびHttpSessionによる両セッション管理とも
ブラウザのプロセスごとに異なるセッションとして値を保持しました。

537さんは「違うCookieを送るときもある」と表現していますが、
この実験結果から、IEの場合はブラウザのプロセスごとに必ず異なるセッション管理
を行うと考えてよさそうですね。

ところで、HttpSessionを使用した場合、Cookie情報としてSessionIDのみ
クライアントに送信され、次回のrequestからそのSessionIDが付加されますが、
このSessionIDはメモリに保存されているのですか?
0539nobodyさん03/01/01 22:03ID:gMpGNAZi
>>538
> このSessionIDはメモリに保存されているのですか?

そうでしょう。
細かいことは、CookieについてのRFCを読んだほうがいいと思うけれど。
(わたしも詳しくは知らないです。)

あた、そこらへんのCookieの寿命・スコープを制御したかったら、
session関係のAPIだけではだめで、
javax.http.Cookie あたり、特に setMaxAge(..)
あたりが参考になるかと。
0540nobodyさん03/01/02 11:46ID:ovQ10hvA
JSPで、HTMLエスケープてどうやるでしょうか?
beanからgetPropertyでとってきたものXSS脆弱性だらけで
私困っています。どうか教えてください。
■ このスレッドは過去ログ倉庫に格納されています