全くの初心者から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();
%>
タイトルの本第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オブジェクトに正しくデータがセットされていない可能性があるので、そのあたりをチェックしてみてください。
プログラムの方はあまり問題がないように見えるのですが、本書に付属のCD-ROMは使われていますでしょうか。セッションが切れてしまうということは前後の処理に問題があるのかも知れません。
このコードでは、userという名前のついたHashMapにログイン情報が格納されていて、user.get("name")でユーザーの名前が取得できるようになっています。この値がnullの場合にセッションタイムアウトのページへジャンプします。
ログインしたにもかかわらずセッションがタイムアウトしてしまう場合は、HashMapオブジェクトに正しくデータがセットされていない可能性があるので、そのあたりをチェックしてみてください。
投稿:竹形 誠司[takegata]/2012年 09月 22日 15時 10分
/更新:2012年 09月 22日 15時 11分