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定义全局结果处理
<s:form action="token" namespace="/" > <s:token></s:token> <s:textfield label="姓名" name="userName"/> 姓名 <br/> <s:textfield label="年龄" name="age"/> 年龄 <br/> <s:textfield label="密码" name="password"/>密码 <br/> <s:textfield name="birthday"/>生日 <br/> <s:submit value="提交" /> </s:form>
struts.xml
<constant name="struts.devMode" value="true" /> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant> <constant name="struts.custom.i18n.resources" value="itcast"></constant> <!--只要继承了mypackage的 默认 都有个 返回结果 name="error"的,在token那个action那里就不用写 name="error" 结果处理了--> <package name="mypackage" extends="struts-default"> <global-results> <result name="error">/error.jsp</result> </global-results> </package> <package name="token" extends="mypackage"> <action name="token" class="cn.itcast.action.PersonAction"> <!--如果单单写 name="token" 会丧失 defaultStack 拦截器提供的 那些功能, 默认是 defaultStack 提供的那些功能 但是一写其他拦截器,所以它也要加上--> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"></interceptor-ref> <!--实际上用到了token的拦截器, 拦截器返回值就是 invalid.token字符串,通过源码可以看到--> <result name="invalid.token">/token.jsp</result> <!--无效的时候返回的页面 一般返回到success.jsp就可以了--> <result name="success">/success.jsp</result> <result name="input">/submit.jsp</result> </action> </package> </struts>
为了让interceptor-ref name=""只写一句就引用了
<interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"></interceptor-ref>参考 http://www.cnblogs.com/friends-wf/p/3766425.html
<package name="mydefault" extends="struts-default"> <interceptors> <interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor> <interceptor-stack name="mydefaultstack"> <!-- 集总定义的栈内容 --> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="permissionInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> </package> <package name="user" namespace="/user" extends="mydefault"> <action name="login" class="cn.itcast.domain.User" method="login"> <!--用于处理 login.jsp 中提交的表单,登录的请求--> <result name="success">/</result> <result name="login">/login.jsp</result> </action> <action name="user_*" class="cn.itcast.domain.User" method="{1}"> <interceptor-ref name="mydefaultstack"></interceptor-ref> <!--拦截器 引用-->