java-web-struts2-2.0-防止重複提交之設置-intercept

在用struts2.0標籤開發中,經常要使用form提交.

通常:

1)寫一個action類
 此action類完成提交後的保存動作.

2)寫一個靜態jsp頁面
 寫form,以及輸入input,和提交button.

3)設置struts*****.xml文件
配置action名稱以及映射的類和返回結果名稱等.

問題:

在點擊"提交"後,我們通常會彈出一個提示信息的頁面,用戶此時有可能會按f5刷新當前提交的action,從而將多個相同的數據保存到了後臺數據庫,並且造成了潛在的安全危險!
如何避免重複提交呢?

1) 用<s:token>!
如在輸入界面的jsp裏,設置token標誌:

<form name="myname" action="myaction.do" method="post">

<input type="text" name="stuName" value="" .../>

... ...

<s:token/>

<input type="button" οnclick="mymethod(this.form);" .../>

</form> 

2) 在struts****.xml文件裏配置攔截器:

<!-- 保存 -->
  <action name="Save"
   class="com.yourcom.app.Action.Dataform.saveAction"
   method="Save">
   <interceptor-ref name="defaultStack" />
            <interceptor-ref name="token" />
            <result name="invalid.token">/Info/NoBack.jsp</result>                       
           
   
  </action>

3)寫一個名稱爲NoBack.jsp的提示文件,當重複f5刷新時,將顯示本頁內容,提示"不可重複提交,或者頁面已經過期"

<s:token/>在最終生成頁面時,自動生成一個unique id,通過它攔截器才能知道頁面是否是同一次提交.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章