struts2的token令牌
1、javaweb控制表单重复提交
   (1)在jsp页面上使用隐藏域<input type="hidden" name="token.html" value="1sdfsdfsdfsdfsdfsdfsdf">
          这样做,每次正常跳转到该页面隐藏域都会产生不同的value的值,此时属于正常操作
          如果提交表单的时候,出现隐藏域的值相同,说明表单重复提交
   (2)在Action类中
       先获取session中存放的token的值,String sessionToken = session.getAttibuter("sessionToken");

       首先会获取页面表单隐藏域(token.html)的值,String token = request.getParameter("token.html");
       同时放置到session中,session.setAttibuter("sessionToken",token);

       判断表单是否重复提交
          if(sessionToken.equal(token)){//表单重复提交

          }
          else{//表单没有重复提交

          }
2、struts实现表单重复提交
  (1)在某个页面验证表单重复提交,此时要添加<s:token>标签,该标签可以产生如下代码:
          <!-- 
              s:token用来判断表单是否重复提交的标签,这个标签会产生如下代码
                  <input type="hidden" name="struts.token.name" value="struts.token" />
                  <input type="hidden" name="struts.token" value="FDHJG5ZGWNCY5XOR9DG5O0HT0NPM7DMI"/>
          -->

          <s:token/>
  (2)由于token拦截器没有放置到默认栈中,所以当使用token表单重复提交的时候,需要在struts.xml中加载token拦截器
         <!-- 重新加载拦截器,添加token拦截器 -->
   <interceptors>
   <interceptor-stack name="defaultStack">
    <interceptor-ref name="token"></interceptor-ref>
    <!-- 在token拦截器的后面加载默认栈 -->
    <interceptor-ref name="defaultStack"></interceptor-ref>
   </interceptor-stack>
   </interceptors>
  (3)需要在指定的Action的配置文件struts.xml中,使用invalid.token返回到对应的错误页面
        <!-- 验证表单重复提交的时候,需要添加invalid.token返回值,使用该值跳转到错误的页面 -->
  <result name="invalid.token">/model/message.jsp</result>
  (4)如果加载表单重复提交的拦截器,那么此时对访问当前Action中所有的方法都进行拦截器,
       我们希望对Action中某个方法进行表单重复提交的校验,此时,添加includeMethods参数定义:
         <interceptors>
   <interceptor-stack name="defaultStack">
    <interceptor-ref name="token">
     <!-- 
         includeMethods:表示只针对某个方法进行表单重复提交的校验,而不是所有的方法,
         如果要对当前Action多个方法进行校验,此时可以用逗号分开
        -->
     <param name="includeMethods">save</param>
    </interceptor-ref>
    <!-- 在token拦截器的后面加载默认栈 -->
    <interceptor-ref name="defaultStack"></interceptor-ref>
   </interceptor-stack>
   </interceptors>
  (5)在错误页面显示表单重复提交的错误信息,错误信息通过标签s:actionerror显示
        <!-- 使用s:actionerror标签用来显示表单重复提交的错误信息 -->
    <s:actionerror/><br>
  (6)实现国际化,将表单重复提交改成中文
      struts.messages.invalid.token=The form has already been processed or no token was supplied, please try again.