- PR -

JSPページの自動更新

投稿者投稿内容
ドレッドノート
会議室デビュー日: 2005/05/29
投稿数: 6
お住まい・勤務地: 佐賀
投稿日時: 2005-05-29 19:26
はじめましてドレッドノートといいます。JSPについて質問します。

最初のJSPページでユーザIDとパスワードを入力して、サーブレットで認証の処理をして正しければ成功ページを表示するというサーブレットプログラムなのですが・・・
現在ログイン中のユーザを調べるため、管理者IDで認証した場合にユーザの情報を表示する管理者ページmanage.jspを作成しています。ページの説明としては、

・ユーザ情報はサーブレットクラスとは別のManageクラスでクラスフィールド(static List userId)として定義
・ユーザがログインするとリストに追加して、ログアウトすると削除する
・管理者IDで認証したら、管理者用JSPページにforwardし、static List userIdを表示する
・表示中にもユーザのログイン・ログアウトによりstatic List userIdが変化するため、ページの自動更新によってユーザ情報を更新する
・自動更新は、manage.jspで<META HTTP-EQUIV="refresh" CONTENT="10">として行う

という感じなのですが、これでやったら「ページは、情報を再送信しなければ、更新できません。」というエラーメッセージが出ました。再試行のボタンを押せば、ユーザ情報が更新されるのですが、これでは自動更新の意味がありません。

そこで、他の掲示板で質問したところ
<META HTTP-EQUIV="refresh" CONTENT="10; url=/manage.jsp">
というように、転送にしてみました。すると、エラーメッセージは出なくなりました。しかし、forwardでJSPページを表示した時は表示されているstatic List userIdが、自動更新すると表示されなくなりました。タイトルや見出しなどは表示されているのでページエラーではなく、static List userIdだけ消えてしまいます。

色々試したのですが、わかったのは変数には値があるけど自動更新したらManageクラスなどにある変数の値が表示されなくなるということだけでした。
このような状況の場合JSPページを自動更新したら他のクラスにある変数が読めなくなるのですか?

taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2005-05-29 23:15
ちょっとコードが想像できないのですが、
Manageクラスを読み取ってJSPにforwardするサーブレットを作成して、
転送先URLとしたらいかがでしょうか?
ロス
常連さん
会議室デビュー日: 2005/03/25
投稿数: 26
投稿日時: 2005-05-30 13:09
表示できなくなる原因は、とくに今回関係ないと思いますが、サーブレットへのrequestが別と判断されたためだと思います。
userIdListをrequestにsetAttributeしていませんか?

本題です。

送り先をjspではなく、servletのほうにしてみてはいかがでしょう?
# やりたいことはtaroさんと同じ意味です^^;
# が、manager.jspを表示するクラスってもうあると思いますし・・・
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-05-30 15:17
POSTメソッドでリクエストした画面を再表示しようとしたために、そのようなメッセージが
出ているのだと思います。ですので、

引用:

ドレッドノートさんの書き込み (2005-05-29 19:26) より:
・管理者IDで認証したら、管理者用JSPページにforwardし、static List userIdを表示する


ここをforwardではなくredirectにすればよいのではないですか。
ドレッドノート
会議室デビュー日: 2005/05/29
投稿数: 6
お住まい・勤務地: 佐賀
投稿日時: 2005-05-30 16:43
taroさんとロスさんの転送先URLをサーブレットにする方法も、
ukさんのredirectにする方法も最初のログインを行うJSPページに戻ってしまいました。

redirectなどでSession情報のない新しいページにジャンプすると、システムが強制的にログインページを表示するようなサーブレットプログラムで、これは開発してるシステムの重要な部分で変更ができません。

ちなみに、window.open()でmanage.jspを開いたらリロードした場合と同様にstatic List userIdだけ表示されません。

少しわかったのですが、JSPページをリロードするとHTMLのソースは読むのですが、<% %>でかこったJavaプログラムの動作をしていません。JSPはこういう仕様なのですか?
じじ
会議室デビュー日: 2005/01/04
投稿数: 10
お住まい・勤務地: 大田区
投稿日時: 2005-05-30 17:05
<META HTTP-EQUIV="refresh" CONTENT="10; url=/manage.jsp">

ってありますがサーブレットにアクセスしてないんじゃないですか?

uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-05-30 17:07
引用:

ドレッドノートさんの書き込み (2005-05-30 16:43) より:
taroさんとロスさんの転送先URLをサーブレットにする方法も、
ukさんのredirectにする方法も最初のログインを行うJSPページに戻ってしまいました。
redirectなどでSession情報のない新しいページにジャンプすると、システムが強制的にログインページを表示するようなサーブレットプログラムで、これは開発してるシステムの重要な部分で変更ができません。


いったいどこにリダイレクトしてるんですか? リロードでmanage.jspが表示できるのであれば
manage.jspにリダイレクトすれば表示できるはずですが。

引用:

少しわかったのですが、JSPページをリロードするとHTMLのソースは読むのですが、<% %>でかこったJavaプログラムの動作をしていません。JSPはこういう仕様なのですか?


いいえ。もし期待通りの結果がでていないとすれば、なんらか問題があるはずです。例外が発生
しているのにそれを握りつぶすようなコーディングをしていませんか? コードがどこまで実行
されているか、デバッグコードを入れてみて確認してみてください。
ドレッドノート
会議室デビュー日: 2005/05/29
投稿数: 6
お住まい・勤務地: 佐賀
投稿日時: 2005-05-31 15:54
manage.jspのソースです。

<%@page language="java" contentType="text/html; charset=EUC_JP" import="java.util.*,manage.Management"%>

<html>

<head>
<title>利用状況</title>
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="cache-control" CONTENT="no-cache">
<MEAT HTTP-EQUIV="expires" CONTENT="0">
<META HTTP-EQUIV="refresh" CONTENT="10; url=/jsp/manage.jsp">
</head>

<body>
<div align="center">
<h2>現在の利用状況</h2>
<hr>
<%
Iterator manageIterator = Management.manageSession.iterator();
while(manageIterator.hasNext()){
Map manageMap = (Map)manageIterator.next();
%>
<table border="1" width="100%">
<tr>
<td><%= manageMap.get("userId") %></td>
<td><%= manageMap.get("ipAddr") %></td>
<td><%= manageMap.get("macAddr") %></td>
<td><%= manageMap.get("date") %></td>
</tr>
</table>
<%
}
%>
</div>
</body>

Management.manageSessionが、最初の投稿で書いたstatic List userIdです。パッケージmanageのクラスManagementにあります。

リロードしたら<% %>の中がどうしても処理されません。
<% String s = "debug";%>
<%= s %>
という感じで先頭にコードを追加してもforwardで表示した時は表示されますが、10秒後にリロードしたら処理されてませんでした。

どこか例外の処理を握りつぶしてますか?上のソースの場合は、taroさんやロスさんが提示してくれたリロードでサーブレットにはアクセスする方法ではないです。

スキルアップ/キャリアアップ(JOB@IT)