JSP Tips1
Q
ページ間のセッション引渡しの方法。
A-1
<%@ page language="java" contentType="text/html;charset=Shift_JIS" session="true" %>
<% session.setMaxInactiveInterval(60*60); %>
session="true"を明示しなくてもデフォルトでsession="true"です
セッションを使用しないときはsession=false
session.setMaxInactiveIntervalでセッション有効時間を
設定する(上記は60分)
ブラウザで使用するJSPを開発するときは、
(Tomcatの場合)
session=trueもデフォルトだし
セッション有効時間も30分がデフォルトなので
これだけでもページ間でのセッションは保たれるので
あまり考えなくてもよかった...
そうi-modeとやらの開発をするまでは...
i-modeはページが変わると新しいセッションが発生するみたいで
ページが変わるごとにセッションが作られていきました。
そこで明示的に一つのセッションを使うようにすればいいので
encodeURLを使用するかjsessionid=xxxxx(セッションID)で
URLにセッションIDを付加する方法ととった。
jsessionの方法ではTomcat3.2.1ではうまく動作しました。
きれいではないソースを以下に載せておきます
わかりにくいのはゴメンナサイ。
例
//////////////
<%@ page language="java" contentType="text/html;charset=Shift_JIS"
import="java.util.*, java.text.*, LoginBean, DBSelectBean,
KeijiBean, TelopBean, NyuBean"
session = "true" %>
<%-- ********************************************************** --%>
<%-- LOGIN画面 --%>
<%--*********************************************************** --%>
<jsp:useBean id="db" scope="session" class="DBSelectBean" />
<jsp:useBean id="db_bbs" scope="session" class="DBSelectBean" />
<jsp:useBean id="db_telop" scope="session" class="DBSelectBean" />
<jsp:useBean id="db_nyu" scope="session" class="DBSelectBean" />
<jsp:useBean id="login" scope="session" class="LoginBean" />
<jsp:useBean id="bbs" scope="session" class="KeijiBean" />
<jsp:useBean id="telop" scope="session" class="TelopBean" />
<jsp:useBean id="nyu" scope="session" class="NyuBean" />
<%
try {
System.out.println("") ;
System.out.println("*****************") ;
System.out.println("*** loginServ.jsp Startスタート !! ***") ;
System.out.println("*****************") ;
response.setContentType("text/html; charset=Shift_JIS");
String forward = request.getParameter("forward") ;
String ses = request.getParameter("ses") ;
System.out.println("loginServ.jsp # forward = " + forward) ;
System.out.println("loginServ.jsp # ses = " + ses ) ;
System.out.println("loginServ.jsp # login.getForward() = " + login.getForward()) ;
if (forward!=null) {
login.setForward(forward) ;
System.out.println("loginServ.jsp # login.getForward() = " + login.getForward()) ;
}
System.out.println("loginServ.jsp # session.getId() = " + session.getId()) ;
System.out.println("loginServ.jsp # session.isNew() = " + session.isNew()) ;
System.out.println("loginServ.jsp # session.getMaxInactiveInterval() / 60.0 = " + session.getMaxInactiveInterval() / 60.0) ;
System.out.println("loginServ.jsp # login.getUsrLon = " + login.getUsrLon());
System.out.println("loginServ.jsp # login.getUsrPwd = " + login.getUsrPwd());
// WASorTOM MDBorDB2 の設定
db.setStwas("1") ;
db.setStdb2("0") ;
//***************************
// login画面から来た場合(forward=1)
//***************************
// System.out.println("loginServ # login.getFROM_LOGIN() = " + login.getFROM_LOGIN()) ;
if (login.getForward().equals(login.getFROM_LOGIN())) {
%>
<%-- loginから来た場合のみ作成したセッションIDを使う。 --%>
<%-- この後はこのセッションIDを使いまわす --%>
<%
if (db.getStwas().equals("0")) {
if (ses.equals("0")) {
ses = session.getId() ;
} else {
ses = ses ;
}
} else {
ses = session.getId() ;
}
System.out.println("loginServ.jsp # loginから来た") ;
String url1 = "" ;
if (db.getStwas().equals("0")) {
// このやり方はjsessionidで強制的にセッションIDをURLに振るやり方
// ただし、jsessionidはServletAPI2.2の時。
// それ以前のAPIの場合はサーブレットエンジンによって識別が異なる
url1 = "loginServ_fromlogin.jsp;jsessionid=" + ses + "?ses=" + ses ;
} else {
// このやり方が使えるサーブレットエンジン(コンテナ)であればこの方法がお勧め
url1 = response.encodeURL("loginServ_fromlogin.jsp")
;
}
System.out.println("loginServ.jsp # url1 = " + url1) ;
%>
<jsp:include page="<%= url1 %>" flush="true" />
<%
return ;
}
//***************************
// 入札成功の場合,(forward=10)
//***************************
if (login.getForward().equals(login.getNYUSTRUE())) {
String url10 = "" ;
if (db.getStwas().equals("0")) {
url10 = "main_nyustrue.jsp;jsessionid=" + ses + "?ses=" + ses ;
} else {
url10 = response.encodeURL("main_nyustrue.jsp") ;
}
%>
<jsp:include page="<%= url10 %>" flush="true" />
<%
return ;
}
//***************************
// 入札失敗の場合,(forward=11)
//***************************
if (login.getForward().equals(login.getNYUSFALSE())) {
String url11 = "" ;
if (db.getStwas().equals("0")) {
url11 = "main_nyusfalse.jsp;jsessionid=" + ses + "?ses=" + ses ;
} else {
url11 = response.encodeURL("main_nyusfalse.jsp") ;
}
%>
<jsp:include page="<%= url11 %>" flush="true" />
<%
return ;
}
//***************************
// 入札時間外の場合,(forward=12)
//***************************
if (login.getForward().equals(login.getNYUSTIMEFALSE())) {
String url12 = "" ;
if (db.getStwas().equals("0")) {
url12 = "main_nyustimefalse.jsp;jsessionid=" + ses + "?ses=" + ses ;
} else {
url12 = response.encodeURL("main_nyustimefalse.jsp") ;
}
%>
<jsp:include page="<%= url12 %>" flush="true" />
<%
return ;
}
//*********************************************
// 会員メニューの上のボタンが押されてた場合
//*********************************************
//***************************
// セッションが切れている場合
// (imodeではページが変わると常に新しいセッションになるので使用しない)
//***************************
/* if (session.isNew()) {
%>
<jsp:include page="loginServ_sessionFalse.jsp" flush="true" />
<%
return ;
}
if (login.getUsrLon().equals(login.getInitLoginUsr())) {
%>
<jsp:include page="loginServ_sessionFalse.jsp" flush="true" />
<%
return ;
}*/
//***************************
// セッションが切れていない場合
//***************************
String url00 = "" ;
if (db.getStwas().equals("0")) {
url00 = "loginServ_true.jsp;jsessionid=" + ses + "?ses=" + ses ;
} else {
url00 = response.encodeURL("loginServ_true.jsp") ;
}
%>
<jsp:include page="<%= url00 %>" flush="true" />
<%
System.out.println("loginServ正常終了!!") ;
} catch (Exception ex) {
System.out.println("loginServ # 例外処理");
System.out.println("loginServ $ ex = " + ex.getMessage() );
// ex.printStackTrace( out );
}
%>