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 );
 }
%>

HOME