Tokenページ重複コミット防止


どこか間違ったところがあったら、皆さんに指摘してもらいたいです.
操作:
1.以前のプロジェクトでは、コミット後、メンテナンスページに戻るため、コミット後、後退するのではなく、リフレッシュし続けると、最初のコミット操作が行われていました.
2.メンテナンスページに戻ってソースコードを見ると、なぜ新しく生成された「32ビットランダムコード」がページの非表示ドメインで変わったのか、提出するときは、初めての「32ビットランダムコード」を出力するのか、非表示ドメインのコードは確かに変わったが、提出するのはあなたがもう一度クリックした「提出ボタン」動作ではなく、初めて提出する動作なので、リフレッシュは最初にコミットされたアクションを実行します
注意:
1.token.jspはhtml:formラベルを使用する必要があります
覚えておいてください.StrutsはActionにアクセスするたびにトークンを生成し、セッションに保存します.Actionの関数にsaveToken(request)を使用している場合は、このトークンは、このActionがForwardからのjspが生成した静的ページにも保存されます.
ActionのメソッドでisTokenValidを使用すると、Strutsはあなたのrequestからこのトークン値を取得し、Sessionのトークン値と比較します.両者が等しい場合は、重複コミットではなく、等しくない場合は、重複コミットです.
もちろん、actionが継承した親クラスでフォームの重複コミットを制御することもできます.これにより、すべてのサブクラスに重複コミットを防ぐコードを別々に書く必要がなくなります.
index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
</head>
  
  <body>
    <html:link action="token.do?method=token">Token</html:link>
  </body>
</html>

TokenAction.java

public class TokenAction extends DispatchAction {
	
	public ActionForward token(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		TokenForm tokenForm = (TokenForm) form;
		//saveToken       ,         ,            
		this.saveToken(request);
		return mapping.findForward("token");
	}
	
	public ActionForward add(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		TokenForm tokenForm = (TokenForm) form;
		//    ,         
		if(isTokenValid(request,true)){
			System.out.println("    ");
			this.resetToken(request);
		}else{
			System.out.println("    ");
			//      
			this.saveToken(request);
			return mapping.getInputForward();
		}
		return mapping.findForward("token");
	}
}

token.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> 
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
 
<html> 
	<head>
		<title>JSP for TokenForm form</title>
	</head>
	<body>
		<html:form action="/token.do?method=add">
			             ,   value  "32    <br>
			  : <html:password property="username"/><br/>
			   : <html:text property="password"/><br/>
			<html:submit/><html:cancel/>
		</html:form>
	</body>
</html>

struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="tokenForm" type="com.dahai.struts.form.TokenForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action
      attribute="tokenForm"
      input="/token.jsp"
      name="tokenForm"
      parameter="method"
      path="/token"
      scope="request"
      type="com.dahai.struts.action.TokenAction" >
      <forward name="token" path="/token.jsp"/>
      </action>
  </action-mappings>

  <message-resources parameter="com.dahai.struts.ApplicationResources" />
</struts-config>

ポイントは2つです.
1.ページにジャンプするクラスでsaveToken(HttpServeretRequest request)メソッドを呼び出す
2.ページの呼び出し先クラスの追加方法でisTokenValid(H ttpServeretRequest request,boolean arg 1)メソッドを呼び出す