关于有时候Servlet会被执行两次的问题

时间:2024-01-13 22:53:08

用<a>标签做了下载跳转,为什么点一次,servlet会被执行两次?

写了一个最简单的文件下载

点击超链接向servlet发送一个请求,然后下载该文件。
可是每次该servlet都会被访问两次,不知道是什么情况

JSP:

 <a href="down?path=xxx.mp3">下载</a>

Servlet:

//用的jspsmartupload插件,关键代码如下,每次都会输出两次‘我被访问了’

public void doPost(HttpServletRequest request, HttpServletResponse response)

{

    System.out.println("我被访问了");

    SmartUpload su = new SmartUpload();

    su.initialize(this.getServletConfig(), request, response);

    su.setContentDisposition(null);

    su.downloadFile("/sound/"+request.getParameter("path"));

}

还有一个问题:点击超链接后,浏览器弹出了下载窗口,这个时候我点击下载窗口中的取消,后台会报错:

org.apache.catalina.connector.ClientAbortException: java.io.IOException: APR error: -730053

这个要怎么处理呢?
------发现原因--------------------
a标签的href属性中的url带参数在火狐浏览器的控制台网络显示只发送一次,但后台会执行两次,ie下正常,url后无参数的情况下两种浏览器都只执行一次。
------解决方案--------------------
使用JS监听按钮的click事件,写在对应js文件里面,如下

JSP:

<input type="button" id="downLoad" value="下载" name="downLoad" style="width:70px;height:25px"/>

JS:

$("#downLoad").click(function(){ 
  location.href = siteurl + "down?path=xxx.mp3";
});