首页 > 技术文章 > 关于struts2中action请求会执行两次的问题

cRaZy-TyKeIo 2014-02-10 18:00 原文

关于struts2中action请求会执行两次的问题
    在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行两次了。继续查找,发现调用的是返回json数据格式的action,如果是调用返回页面的action就不会有这种问题。
    结合网上的搜索,总结了一下:
        1.  json格式下, firefox中的yslow插件会发送第二个 HTTP GET 请求得到页面的信息。.
        2.  ajax模式下,调用的action方法不能为get*方式命名,内中机理未知。
结论:action中方法最好不要以get开头

 

最近在用struts2遇到一个怪问题,struts2的默认方法老是执行两次,搞了大半天都没有找到,在最后即将放弃时终于找打了,原来是响应的页面有一个图片标签,而图片标签请求的地址不存在,它就默认再次请求了当前请求的url,造成了两次执行struts2的方法。为此特做下次笔记,给自己和大家分享,同时还在网络上搜索其它几个造成的方法。
        1,被响应的图片URL不存在,导致请求原谅url而执行了两次;
        2,ajax模式下,调用的action方法不能为get*方式命名,内中机理未知;
        3,提交标签中用到JS脚本去执行的话,如写成<input type="submit" ... onclick="save()>的话,submit要执行一次,onclick="save()也要执行一次,去掉其中一个即可;


json格式下, firefox中的yslow插件会发送第二个 HTTP GET 请求得到页面的信息。.
谨记action 如果用到JSON ( type="json")  中方法名不要用get开头,
*.action  注意用json最好action方法名不要以get开头,json把Acion类中所有的已get开头的方法返回值封装

 

jsp: 
<!--使用按钮提交form--> 
<s:form action=""> 
<input type="button"onclick="search()"value="search"/> 
</s:form>

解决办法:
<s:form action="" onsubmit="return false;">
原因是,form表单提交会被struts2当作action执行.

结论:尽量用html自带的form 标签

推荐阅读