リクエスト、セッション、アプリケーションでデータ保持
リクエスト、セッション、アプリケーションを使ってページ間でデータ保持します。
リクエストは1回の通信間でデータ保持、セッションはブラウザでアクセスしてからブラウザを閉じるか一定時間を過ぎるまで保持、アプリケーションはWEBサーバを起動してから終了するまで保持します。
プロジェクト作成は こちらを参考にして下さい。
サーブレット
POSTで呼ばれたメソッドの引数(HttpServletRequest)からSession、Applicationを取得できます。
package test;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/Count")
public class Count extends HttpServlet {
private static final long serialVersionUID = 1L;
public Count() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Sessionを取得
HttpSession session = request.getSession();
// Applicationを取得
ServletContext application = getServletContext();
String hdn = (String) request.getParameter("hdn");
// クリアボタンで各情報をクリア
if (hdn != null && hdn.equals("clear")) {
session.invalidate();
application.removeAttribute("count2");
response.sendRedirect("count.jsp");
return;
}
// requestを処理
String count0 = request.getParameter("count0");
if (count0 == null || count0.length() == 0 || count0.equals("null")) {
count0 = "1";
} else {
count0 = "" + (Integer.parseInt(count0) + 1);
}
request.setAttribute("count0", count0);
// sessionを処理
Integer count1 = (Integer) session.getAttribute("count1");
if (count1 == null) {
count1 = 1;
} else {
count1++;
}
session.setAttribute("count1", count1);
// applicationを処理
Integer count2 = (Integer) application.getAttribute("count2");
if (count2 == null) {
count2 = 1;
} else {
count2++;
}
application.setAttribute("count2", count2);
RequestDispatcher dispatch = request.getRequestDispatcher("count.jsp");
dispatch.forward(request, response);
}
}
Jsp
<%@ page language="java" contentType="text/html; charset=UTF8"
pageEncoding="UTF8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>セッション、アプリケーション</title>
<script type="text/javascript">
//テキスト読み込み時に実行
document.addEventListener("DOMContentLoaded", function() {
//+1ボタン押下時
document.getElementById("id1").onclick = function() {
document.getElementById("id3").value = "count";
frm.submit();
};
//クリアボタン押下時
document.getElementById("id2").onclick = function() {
document.getElementById("id3").value = "clear";
frm.submit();
};
}, false);
</script>
</head>
<body>
<form action="/test/Count" method="post" name="frm">
<input type="button" id="id1" value="+1" />
<input type="button" id="id2" value="クリア" /> <br />
リクエスト:<input type="text" name="count0" value="<%=request.getAttribute("count0")%>" /> <br />
セッション:<%=session.getAttribute("count1")%> <br />
アプリケーション:<%=application.getAttribute("count2")%>
<input type="hidden" id="id3" name="hdn" />
</form>
</body>
</html>
実行
http://localhost:8080/test/count.jsp にアクセスすると実行できます。ページのトップへ戻る