回false
String saved =(String) session.getAttribute(\ if (saved == null) {
return false; 为什么令牌属性\会不存在呢,那是因为当用户正常提交后,会调用this.resetToken(request);//清空当前会话中的token值。也就是说resetToken(request)方法中调用了 session.removeAttribute(\n.TOKEN\
当用户重复提交时,我说了\此方法在这里可要也可不要。\,下面我们分
析下,如果不调用这个方法,会话中就不会再重新保存token值,那么再刷新的时候,session中的token
值总是为null,isTokenValid(request)直接返回false,如果调用this.saveToken(request)的话, session中会重新添加token属性值。这个时候isTokenValid(request)会进行下面第三步的判断。 3.从当前会话中取得token的值与当前request中得到的token值比较,相同返回true,不同返回false
String token = request.getParameter(\ if (token == null) {
return false; return saved.equals(token);
如果是重复刷新,那么每次request中的令牌值都是一样的,但每次刷新当前会话中的令牌值都被重新替换了,所以会返回false
注:使用struts的表单提交Token机制时,提交的表单一定要写成
动态方法调用
在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多
第一种方式:指定method属性
这种方式我们前面已经用到过,类似下面的配置就可以实现
type=\ 第二种方式:感叹号方式(需要开启),官网不推荐使用这种方式,建议大家不要使用. 用这种方式需要先开启一个开关 package chapter3.action; public class Chapter3Action { public String result1(){ return \} public String result2(){ return \} } Jsp中访问方式 href=\basePath/chapter3/chapter3Action!result1\result1 {basePath}/chapter3/chapter3Action!result2\ 如果配置了后缀,必须这样写: /chapter4/chapter4Action!create.action XML中配置方式 class=\ name=\ name=\ name=\ 第三种方式:通配符方式(官网推荐使用) 首先得关闭开关 chapter3_*这里的*就是你呆会要匹配的字符串,即你在后面的请求中得这样写 http://...../ chapter3_create 或 http://...../ chapter3_update 注意,这时你action中必须有create和update方法与之匹配,甚至还可以这样匹配 但是这时一定要有对应的JSP页面存在,并且相应的路径不能错,这就对我们的命名进行了强制性的规定,一定要规范. 课堂示例: Action public class Chapter4Action extends ActionSupport { public String list(){ return \} public String create(){ return \} public String index(){ return \} } XML: name=\ 访问Servlet API 有时我们需要用到Request, Response, S 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Struts2考试题分析(4)在线全文阅读。
相关推荐: