在项目开发过程中,发现有个页面会提交两次,一直没有找到原因,后来发现产生这个Bug的原因是UI设计师在JSP页面中加入了下面这些代码:
<style> body {background:#ffffff url();} </style>
他的目的是设置页面背景颜色,页面图片的地址为空,这个写法在IE中没有问题,但是在FireFox和谷歌浏览器中会有问题,会以GET方式提交当前页面,通过FireBug请求的头信息为(说明页面不知道图片地址,会向后台发GET请求):
Accept image/png,image/*;q=0.8,*/*;q=0.5
其实这是一个CSS规范语法问题,如果把url的参数设为"有效图片地址"就没有问题了(不需加单引号或双引号),另外去掉url函数也没有问题:
<style> body {background:#ffffff url(a.jpg);} </style>
<style> body {background:#ffffff} </style>
回到主题,在Java文件中,判断页面提交方式的代码如下:
String method = org.apache.struts2.ServletActionContext.getRequest()
.getMethod();
boolean isPostMethod = "POST".equalsIgnoreCase(method);
if (!isPostMethod) {
System.out.println("prepare() GET 方式提交");
} else {
System.out.println("prepare() POST 方式提交");
}