frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

再び・トランザクショントークン。

鉄は熱いうちに打て。

そんな訳で、木曜日に会社から退散しようと思ったら

丁度、同僚さんの席にて流れていたMLに

私宛のご指示を見かけたような見かけてないような。

ん?んあ?じっくり読めなかったけど、これかな?

トランザクショントークン」

そんな訳で、久々のトランザクショントークンです。

昨年の夏に、学校の課題でやりましたね

今回は、それをJSPで実装です。

出来ないこたないだろう…と思ってましたが、

念の為、ローカルでテストしてみました。

ちなみに今回はランダム文字列生成に RandomStringUtils は使わないで

sessionID + 現在の時刻(ミリ秒) を uniqKey としてみました。

それにしても、久々の Java は、いろいろ忘れていて大変。

もっと復習しないとな。

■前提

・ページA.jsp 上でフォームを用意。

・ページA.jsp 上でサブミットボタンを連打。

・ページB.jsp 上に結果が表示される。

・サブミットボタンが二重押しされている場合はNG、そうでなければOK

■ページA.jsp

<%@ page language="java" pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" %>
<%@ page import="java.lang.*" %>
<%
String uniqKey = session.getId() + String.valueOf(System.currentTimeMillis());
session.setAttribute("uniqKey", uniqKey);
%>
<html>
<body>
<form method="post" action="ページB.jsp">
name: <input type="text" name="name" />
<input type="hidden" name="uniqKey" value="<%= uniqKey %>" />
<input type="submit" value="submit!" />
</form>
<a href="/JspTest/jsp/ページB.jsp?uniqKey=<%= uniqKey %>&name=test">submit! with "test" String as name</a>
</body>
</html>

■ページB.jsp

<%@ page language="java" pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" %>
<%@ page import="java.lang.*" %>
<%
String uniqKeyInSession = (String)session.getAttribute("uniqKey");
String uniqKeyInRequest = request.getParameter("uniqKey");
String result = ("".equals(uniqKeyInSession) || "".equals(uniqKeyInRequest) || !uniqKeyInSession.equals(uniqKeyInRequest))
? "NG"
: "OK";
String name = request.getParameter("name");


String uniqKey = session.getId() + String.valueOf(System.currentTimeMillis());
session.setAttribute("uniqKey", uniqKey);
%>
<html>
<body>
<p style="font-size:110%;"><%= result %></p>
<p>uniqKey in Session: <%= uniqKeyInSession %></p>
<p>uniqKey in Request: <%= uniqKeyInRequest %></p>
<p>name in Request: <%= name %></p>
</body>
</html>