自学Struts2的tokenInterceptor的想法

阅读更多
 
分类: Struts2 Java JavaScript   991人阅读  评论(4)  收藏  举报
struts exception token action login string
[xml]  view plain copy
 
  1. 本文引用不少网上资料,如没写着引用出处,请原凉。  

先说说tokenInterceptor的作用,防止客户重复提交表单,可以解决,客户在同一表单中点击两个提交,后退后,再提交,在提交完成后,对跳转的页面直接进行刷新,避免两次写入数据库。都可以很好的解决。

先说说什么是拦截器,拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。上面这段话是Max说的。觉得不错,很清晰明了。

我先来举个例子,大家一看就会明白的

struts.xml

[xml]  view plain copy
 
  1.   
  2.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  3.   
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.   
  8.     <include file="struts-default.xml"/>  
  9.   
  10.     <package name="default" extends="struts-default">  
  11.   
  12.         <default-interceptor-ref name="paramsPrepareParamsStack"/>  
  13.   
  14.     package>  
  15.   
  16.     <include file="strutsconfig/struts-workticket.xml" />  
  17.   
  18. struts>  

struts-workticket.xml

[xml]  view plain copy
 
  1.   
  2.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  3.   
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.   
  8.   
  9.   
  10.     <package name="demo" extends="struts-default" namespace="/demo">   
  11.   
  12.          
  13.   
  14.        <global-results>  
  15.   
  16.            <result name="error">/errInfo.jspresult>  
  17.   
  18.        global-results>  
  19.   
  20.        <global-exception-mappings>  
  21.   
  22.            <exception-mapping result="error" exception="java.lang.Throwable"/>  
  23.   
  24.        global-exception-mappings>  
  25.   
  26.          
  27.   
  28.         <action name="tokenInterceptor_*" class="com.hz.struts2.demo.web.action.TokenInterceptorAction" method="{1}">    
  29.   
  30.   
  31.   
  32.             <result name="demo">/web/demo.jspresult>  
  33.   
  34.             <result name="login">/index.jspresult>  
  35.   
  36.               
  37.   
  38.             <result name="invalid.token">/overPageInfo.jspresult>  
  39.   
  40.                
  41.   
  42.             <interceptor-ref name="defaultStack" />  
  43.   
  44.             <interceptor-ref name="token">  
  45.   
  46.                   
  47.   
  48.                 <param name="includeMethods">execute,checkLoginparam>  
  49.   
  50.                   
  51.   
  52.                 <param name="excludeMethods">toLoginparam>  
  53.   
  54.             interceptor-ref>  
  55.   
  56.               
  57.   
  58.         action>  
  59.   
  60.   
  61.   
  62.     package>  
  63.   
  64. struts>  

com.hz.struts2.demo.web.action.TokenInterceptorAction.java

[java]  view plain copy
 
  1. 这个没什么意思,不需要做任何改动,这就可以体现出拦截器的好出,大大减少啦代码量,提高了代码的复用性。  
[java]  view plain copy
 
  1. package com.hz.struts2.demo.web.action;  
  2.   
  3.   
  4.   
  5. public class TokenInterceptorAction extends AbstractAction {  
  6.   
  7.     @Override  
  8.   
  9.     public String execute() throws Exception {  
  10.   
  11.         System.out.println(" :: execute " + new java.util.Date());  
  12.   
  13.         return "demo";  
  14.   
  15.     }  
  16.   
  17.   
  18.   
  19.     /** 
  20.  
  21.      * Goto login page 
  22.  
  23.      */  
  24.   
  25.   
  26.   
  27.     public String toLogin() throws Exception {  
  28.   
  29.         System.out.println(" :: toLogin " + new java.util.Date());  
  30.   
  31.         //return "invalid.token";  
  32.   
  33.         return "login";  
  34.   
  35.     }  
  36.   
  37.   
  38.   
  39.     public String checkLogin() throws Exception {  
  40.   
  41.         System.out.println(" :: checkLogin " + " " + new java.util.Date());  
  42.   
  43.         return "login";  
  44.   
  45.     }  
  46.   
  47. }  

HTML

[html]  view plain copy
 
  1. >  
  2.   
  3. <html>  
  4.   
  5.   <head>  
  6.   
  7.     <title>indextitle>  
  8.   
  9.     <script type="text/javascript">  
  10.   
  11.         function submitForm(){  
  12.   
  13.             var url = "/demo/tokenInterceptor_checkLogin.action";  
  14.   
  15.             var token = "struts.token.name=struts.token";  
  16.   
  17.             var token2 = "struts.token=";  
  18.   
  19.             token2 += document.getElementsByName("struts.token")[0].value;  
  20.   
  21.             url += "?" + token + "&";  
  22.   
  23.             url += token2;  
  24.   
  25.             document.location.href = url;  
  26.   
  27.         }  
  28.   
  29.     script>  
  30.   
  31.   head>  
  32.   
  33.   
  34.   
  35.   <body>  
  36.   
  37.     <form action="/demo/tokenInterceptor_checkLogin.action" method="post">  
  38.   
  39.         <s:token id="tokenId" />  
  40.   
  41.         <br>  
  42.   
  43.           
  44.   
  45.         <input type="submit">  
  46.   
  47.         <input type="button" onclick="submitForm()" value="非表单提交">  
  48.   
  49.     form>  
  50.   
  51.   body>  
  52.   
  53. html>  

这是有表单的情况,下面提供一段js是没有表单的情况。正好在我系统里用到了这样的需求,一样粘上来这是我做的一个简单的demo,也是一刚开始学的时候,自己学着写的。在这过程中,我过我常容易出现错误的几个问题,都做了记号

总结

要想让自己的技术不会被淘汰,只有靠自己。我想作为一名IT人员都明白一个道理,没有自学能力的人,是没法成为IT精英的。

你可能感兴趣的:(struts,java,interceptor)