web框架:spring+hibernate+jQuery
前端jsp部分代码:
<div class="container-fluid" style="padding-left: 0px; padding-right: 0px;">
<div class="col-xs-10 col-sm-10 col-md-8 col-md-offset-2"
style="margin: 0 auto;float:none">
<div class="col-sm-12 list_title bg_blue text_white"
style="margin-bottom: 20px;" align="left" >点击下面的下载链接,下载表格</div>
<span>文本下载:</sapn><a class="btn btn-md btn-submit bg_red" href="<c:url value="/fileserver/downloadservlet?filename=模板"/>">模板.doc</a>
</div>
</div>
在服务器端添加配置选项:在web.xml里添加servlet配置
<!-- Servlet -->
<servlet>
<servlet-name>nsl</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:nsl-servlet.xml</param-value>
</init-param>
<!--
<init-param> <param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/nsl-servlet.xml</param-value> </init-param>
-->
</servlet>
<servlet-mapping>
<servlet-name>nsl</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet>
<description>FileServlet</description>
<display-name>FileServlet</display-name>
<servlet-name>FileServlet</servlet-name>
<servlet-class>servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/fileserver/upload</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DownLoadServlet</servlet-name>
<servlet-class>servlet.DownLoadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownLoadServlet</servlet-name>
<url-pattern>/fileserver/downloadservlet</url-pattern>
</servlet-mapping>
在conf下的system.properties文件里配置数据库连接的参数(下载的文件路径一般会存放在数据库里)
name value
system.name csoa(数据库名)
savePath D:\***\(用tomcat发布的web项目的本地存放路径)
urlPath http://localhost:****(****为tomcat接口,一般为8080)/****(****为项目名称)/download/(web访问已发布的项目的网址)
服务器端servlet下载对应java代码:
package servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.nsl.web.util.WebUtils;
public class DownLoadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//得到要下载的文件名
Properties p=WebUtils.getProperties("/system.properties");
String fileSaveRootPath =p.getProperty("savePath");
response.setContentType("text/html");
javax.servlet.ServletOutputStream out = response.getOutputStream();
String filepath=request.getRealPath("/") + "download/";
String filename=new String(request.getParameter("filename")).toString();
System.out.println("DownloadFile filepath:" + filepath);
System.out.println("DownloadFile filename:" + filename);
File file = new File(filepath + filename+".doc");
if (!file.exists()) {
System.out.println(file.getAbsolutePath() + " 文件不存在!");
return;
}
// 读取文件流
FileInputStream fileInputStream = new FileInputStream(file);
// 下载文件
// 设置响应头和下载保存的文件名
if (filename != null && filename.length() > 0) {
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + new String(filename.getBytes("utf-8"),"iso8859-1") + ".doc");
if (fileInputStream != null) {
int filelen = fileInputStream.available();
//文件太大时内存不能一次读出,要循环
byte a[] = new byte[filelen];
fileInputStream.read(a);
out.write(a);
}
fileInputStream.close();
out.close();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass().getName());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
到此从服务器端下载文件结束。