竹形誠司 ブログ
ご質問    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
業務アプリケーション短期開発入門 10.3について
by 猫太[neko3]
全くの初心者からJSPの勉強しようと励んでおりますがどうしても判らない事があり書き込みしました。
タイトルの本第10章 伝票一覧画面 ですが本のとおり書き込みましたが実際にログインをしトップ画面から経費清算をクリックしてもセッションタイムアウトとなってしまいます。
ログイン画面からのセッションは巧くのですが伝票一覧画面にはどうやっても巧くつながりません。


お忙しいところ恐縮ですが何かアドバイスをお願い致します。


<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.util.Date"%>
<jsp:useBean class="java.util.HashMap" id="user" scope="session"/>
<%
String userName = (String)user.get("name");
if(userName==null){
    response.sendRedirect("../login/session_timeout.jsp");
    return;
}
int userId = (Integer)(user.get("id"));
int userLevel = (Integer)(user.get("level"));

int intPage =0;
int intMaxItem=5;    //1ページの件数(もっと大きくてもよい)
String strPage=request.getParameter("page");
if(strPage!=null){
    intPage=Integer.parseInt(strPage);
}

Class.forName("com.mysql.jdbc.Driver");
String strConn="jdbc:mysql://localhost/jspdb"
+"?user=Mulder&password=TrustNo1"
+"&useUnicode=true&characterEncoding=Windows-31J";
Connection conn = DriverManager.getConnection(strConn);


StringBuffer sbSql = new StringBuffer();
sbSql.append("SELECT expense_slip.*,user.name FROM expense_slip");
sbSql.append(" JOIN user ON expense_slip.user_id=user.id");
sbSql.append(" WHERE status>=0");
if(userLevel<1){
    sbSql.append(" AND user_id = ?");
}
sbSql.append(" ORDER BY id DESC");
sbSql.append( " LIMIT ");
sbSql.append(intPage * intMaxItem);
sbSql.append(",");
sbSql.append(intMaxItem);

PreparedStatement pstmt = conn.prepareStatement(sbSql.toString());
if(userLevel<1){
    pstmt.setInt(1,userId);
}
ResultSet rs = pstmt.executeQuery();


String[] aryStatus={"申請中","承認済み","差し戻し"};
SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
NumberFormat nf = NumberFormat.getNumberInstance();
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<TITLE>経費清算</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="../login/style.css">
</HEAD>
<BODY>
<H1>経費清算</H1>
<DIV CLASS="main">
<INPUT TYPE="button" VALUE="先頭ページ"
ONCLICK="location.href='list.jsp?page=0'">
<INPUT TYPE="button" VALUE="前ページ" <%if(intPage==0){%>disabled<%}%>
ONCLICK="location.href='list.jsp?page=<%=intPage-1%>'">
<INPUT TYPE="button" VALUE="次ページ"
ONCLICK="location.href='list.jsp?page=<%=intPage+1%>'" ID="nextButton">

<TABLE>
<TR>
    <TH>番号</TH>
    <TH>日付</TH>
    <TH>氏名</TH>
    <TH>合計</TH>
    <TH>状態</TH>
    <TH>操作</TH>
</TR>
<%
int intCount=0;
while(rs.next()){
    intCount++;
    %>
    <TR>
    <TD CLASS="right"><%=rs.getInt("id")%></TD>
    <TD CLASS="center"><%=df.format(new Date(rs.getLong("date")))%></TD>
    <TD><%=rs.getString("name")%></TD>
    <TD CLASS="right"><%=nf.format(rs.getInt("total"))%></TD>
    <TD CLASS="center"><%=aryStatus[rs.getInt("status")]%></TD>
    <TD CLASS="center">





        詳細</TD>
    </TR>
<%}%>
</TABLE>
<SCRIPT TYPE="text/javascript">
if(<%=intCount%>!=<%=intMaxItem%>){
    var obj=document.getElementById("nextButton");
    obj.disabled=true;
}
</SCRIPT>
<P>
新規登録
トップ・ページ
ログアウト
</P>
</DIV>
</BODY>
</HTML>
<%
rs.close();
pstmt.close();
conn.close();
%>

投稿:猫太[neko3]/2012年 09月 15日 14時 41分
RE:業務アプリケーション短期開発入門 10.3について
by 竹形 誠司[takegata]
竹形です、返事が遅くなりすみません。

プログラムの方はあまり問題がないように見えるのですが、本書に付属のCD-ROMは使われていますでしょうか。セッションが切れてしまうということは前後の処理に問題があるのかも知れません。

このコードでは、userという名前のついたHashMapにログイン情報が格納されていて、user.get("name")でユーザーの名前が取得できるようになっています。この値がnullの場合にセッションタイムアウトのページへジャンプします。

ログインしたにもかかわらずセッションがタイムアウトしてしまう場合は、HashMapオブジェクトに正しくデータがセットされていない可能性があるので、そのあたりをチェックしてみてください。
投稿:竹形 誠司[takegata]/2012年 09月 22日 15時 10分 /更新:2012年 09月 22日 15時 11分