struts2的高级主题

来源:互联网 发布:淘宝店开店流程及费用 编辑:程序博客网 时间:2024/05/01 03:33

题目:使用令牌防止表单重复提交

使用<s:token/>表单标签

struts2对解决表单重复提交提供了支持,通过联合使用页面中的自定义的标签和拦截器来防止重复请求。struts2使用一下逻辑完成这个工作:

        1.准备以隐藏字段的方式嵌入唯一令牌的页面

        2.将这个唯一令牌隐藏在用户会话中

        3. 将准备好的页面返回到用户浏览器中

        4.在表单提交时,比较两个令牌(提交的页面中的令牌和隐藏在用户会话中的令牌)。

        5.如果令牌不匹配,返回invalid.token结束

 

其实,网页只是在不应该多次提交的表单中包含了<s:token/>标签

使用<s:token/>的步骤

        1.设计带有token标签的网页

            ex:

            <s:form>

                      <s:token/>

                             <s:textfield key="username" label="Username"/>

                             <s:textfield key="password" label="Password">

             </s:form>

 

         2.使用令牌拦截器声明动作映射

         <action name="a"  class="A">

               <interceptor-ref name="mytokenstack"/>

               <result name="success">/login_success.jsp</result>

               <result name="invalid.token">/duplicatepage.jsp</result>

         </action>

        <!--

           注解:mytokenstack拦截器栈包含了token拦截器,要检查重复提交就必须包含这个拦截器。当检测到一个重复提交请求时这 个 拦截器会返回invalid.token

        -->

 

         3.支持基本令牌的拦截器栈

 

         <interceptor-stack name="mytokenstack">

                              <interceptor-ref name="token"/>

                              <interceprot-ref name="defaultStack"/>

         </interceptor-stack>

 

然后部署应用就行了,就可以对重复提交进行有效的防止。

其实还有支持高级令牌的拦截器sessionStack,不多做详述;

令牌拦截器规则的例外:根据方法名决定是否拦截的拦截器栈也不多说。

 

 

题目:自动显示等待页面

步骤如下:

            1.为长时间运行的动作声明动作映射

                    <action name="search" class="SearchAction">

                         <interceptor-ref name="waitStack"/>

                         <result name="success">resultPage</result>

                         <result name="wait">waitPage</result>

                    </action>

            2.长时间动作运行的拦截器栈

                   <interceptor-stack name="waitStack">

                          <interceptor-ref name="defaultStack"/>

                          <interceptor-ref name="execAndWait"/>

                   </interceptor-stack>

            3.在长时间运行过程中显示的waitPage页面

                   <html>

                          <head>

                                 <title>Please wait</title>

                                 <meta http-equiv="refresh" content="2;url=resultPage"/>

                         </head>

                         <body>

                                 Proccessing    your request,Please wait a moment.................

                         </body>

                    </html>

原创粉丝点击