1)通过重定向:详解结果分析一章
2)通过Session Token (Session 令牌)
分析第二种
首先必须用struts2提供的表单标签库。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'token.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<s:form action = "token.action" theme = "simple">
username:<s:textfield name = "username"></s:textfield>
password:<s:password name = "password"></s:password>
<s:token></s:token>
<s:submit name = "submit"></s:submit>
</s:form>
</body>
</html>
<action name = "token" class = "action.TokenAction">
<result name = "success" type = "redirect">/tokenSuccess.jsp</result>
<!-- invalid.token 是struts2 提供的 -->
<result name = "invalid.token" >/tokenFail.jsp</result>
<interceptor-ref name = "token"></interceptor-ref>
<interceptor-ref name = "defaultStack"></interceptor-ref>
</action>
当客户请求页面时,服务器会通过token标签生成一个随机数,并且将该随机数放在session当中,
然后将将改随机数发向客户端;如果客户第一次提交,那么会将该随机数发往服务器端,服务器端会接受到该
随机数并且与session中所保存的随机数进行比较,这是两者的值是相同的,服务器认为是第一次提交,
并且将本性服务器端的这个随机数值;如果此时再次重复提交,那个客户端发向服务器端的随机数还是之前的那个,而服务器的随机数已经发生了变化,二者不同,服务器就认为这是重复提交,进而转向invalid.token所指向的页面。