1、在表单中加入<s:token/>标签
2、在动作类中加入token的拦截器
<!--如果单单写 name="token" 会丧失 defaultStack 拦截器提供的 那些功能, 默认是 defaultStack 提供的那些功能
但是一写其他拦截器,所以它也要加上-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
3、增加一个名称为invalid.token的结果视图
<!--实际上用到了token的拦截器, 拦截器返回值就是 invalid.token字符串,通过源码可以看到-->
<result name="invalid.token">/success.jsp</result>
global-results定义全局结果处理
jsp页面中
1 <s:form action="token" namespace="/" > 2 <s:token></s:token> 3 <s:textfield label="姓名" name="userName"/> 姓名 4 <br/> 5 <s:textfield label="年龄" name="age"/> 年龄 6 <br/> 7 <s:textfield label="密码" name="password"/>密码 8 <br/> 9 <s:textfield name="birthday"/>生日 10 <br/> 11 <s:submit value="提交" /> 12 </s:form>
struts.xml中
1 <constant name="struts.devMode" value="true" /> 2 <struts> 3 <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant> 4 <constant name="struts.custom.i18n.resources" value="itcast"></constant> 5 6 <!--只要继承了mypackage的 默认 都有个 返回结果 name="error"的,在token那个action那里就不用写 name="error" 结果处理了--> 7 <package name="mypackage" extends="struts-default"> 8 <global-results> 9 <result name="error">/error.jsp</result> 10 </global-results> 11 </package> 12 <package name="token" extends="mypackage"> 13 <action name="token" class="cn.itcast.action.PersonAction"> 14 <!--如果单单写 name="token" 会丧失 defaultStack 拦截器提供的 那些功能, 默认是 defaultStack 提供的那些功能 15 但是一写其他拦截器,所以它也要加上--> 16 <interceptor-ref name="defaultStack"></interceptor-ref> 17 <interceptor-ref name="token"></interceptor-ref> 18 <!--实际上用到了token的拦截器, 拦截器返回值就是 invalid.token字符串,通过源码可以看到--> 19 <result name="invalid.token">/token.jsp</result> <!--无效的时候返回的页面 一般返回到success.jsp就可以了--> 20 <result name="success">/success.jsp</result> 21 <result name="input">/submit.jsp</result> 22 </action> 23 </package> 24 </struts>
类中的提交之后 试试打印userName字段,重复刷新时页面会转到/token.jsp页面
为了让interceptor-ref name=""只写一句就引用了
<interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"></interceptor-ref>
参考 http://www.cnblogs.com/friends-wf/p/3766425.html
1 <package name="mydefault" extends="struts-default"> 2 <interceptors> 3 <interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor> 4 <interceptor-stack name="mydefaultstack"> <!-- 集总定义的栈内容 --> 5 <interceptor-ref name="defaultStack"></interceptor-ref> 6 <interceptor-ref name="permissionInterceptor"></interceptor-ref> 7 </interceptor-stack> 8 </interceptors> 9 </package> 10 <package name="user" namespace="/user" extends="mydefault"> 11 <action name="login" class="cn.itcast.domain.User" method="login"> <!--用于处理 login.jsp 中提交的表单,登录的请求--> 12 <result name="success">/</result> 13 <result name="login">/login.jsp</result> 14 </action> 15 <action name="user_*" class="cn.itcast.domain.User" method="{1}"> 16 <interceptor-ref name="mydefaultstack"></interceptor-ref> <!--拦截器 引用-->