1、在页面上面我们可以简单的写成:

<td align="center"">
<a href="<c:url value="/bbsfile?filename=20150417.XLS&saveasfilename=template.xls"/>">下载导入模板</a>
</td>

 2、在web.xml里面配置servlet向Java类的跳转:

  <servlet>
<servlet-name>bbsfile</servlet-name>
<servlet-class>com.zl.common.downloadfile</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>bbsfile</servlet-name>
<url-pattern>/bbsfile</url-pattern>
</servlet-mapping>

  3、编写下载文件的Java类:

/*
* Created on 2004-12-22
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.zl.common; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.activation.FileTypeMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.cd.util.ReadPropertiesFile;
import com.zl.base.core.Constants; public class downloadfile extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L; /**
* Default constructor.
*/
public downloadfile() {
super();
} /**
* Init method.
*
* @throws ServletException
* never.
*/
public void init() throws ServletException {
return;
} public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
service(request, response, true);
} public void service(HttpServletRequest request, HttpServletResponse response, boolean blnsyn)
throws ServletException, IOException {
try {
Object user = request.getSession().getAttribute(Constants.SESSION_USER); if (user != null) {
String mimeType = request.getParameter("mimeType");
String filename = request.getParameter("filename");
String oldfilename = request.getParameter("saveasfilename");
if (mimeType!=null) response.setContentType(mimeType);
if (oldfilename == null) {
response.setHeader("Content-Disposition", "attachment; filename=" + filename);
} else {
oldfilename = new String(oldfilename.getBytes("ISO-8859-1"),"UTF-8");;
response.setHeader("Content-Disposition", "attachment; filename="+ oldfilename );
// response.setHeader("Content-Disposition", "attachment;
// filename=" +oldfilename);
}
String uploadfilepath = ReadPropertiesFile.getInstance().getProperty("uploadfilepath", "c:/") + "announce/";
File file = new File(uploadfilepath + filename);
System.out.println("文件路径:"+uploadfilepath + filename);
if (!file.exists()) {
file.createNewFile();
}
FileTypeMap fMap = FileTypeMap.getDefaultFileTypeMap();
String filetype = fMap.getContentType(file);
response.setContentType(filetype);
response.setContentLength((int) file.length());
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
byte[] input = new byte[1024];
boolean eof = false;
while (!eof) {
int length = bis.read(input);
if (length == -1) {
eof = true;
} else {
bos.write(input, 0, length);
}
}
bos.flush();
bis.close();
bos.close();
}
} catch (Exception ex) { }
return;
} }

  其中ReadPropertiesFile类是定义文件保存位置的方法:

package com.cd.util;

import java.io.InputStream;
import java.util.Properties; /**
* 读取 sale.properties文件的内容
*
* @author lxk 2013-05-28 单例
*
*/
public class ReadPropertiesFile {
static private ReadPropertiesFile instance = new ReadPropertiesFile(); // 唯一实例
private Properties dbProps = null; private Properties getDbProps() {
return dbProps;
}
//默认的私有的构造方法
private ReadPropertiesFile() {
InputStream is = ReadPropertiesFile.class.getResourceAsStream("/sale.properties");
dbProps = new Properties();
try {
dbProps.load(is);
} catch (Exception e) {
System.err.println("不能读取属性文件. 请确保sale.properties在CLASSPATH指定的路径中");
}
} /**
* 返回唯一实例.如果是第一次调用此方法,则创建实例
*
* @return DBConnectionManager 唯一实例
*/
public static synchronized ReadPropertiesFile getInstance() {
if (instance == null) {
instance = new ReadPropertiesFile();
}
return instance;
} public String getProperty(String key, String defaultValue) {
// 如果taglib.properties没有key,则默认defaultValue
return instance.getDbProps().getProperty(key, defaultValue);
}
}

  编写一个sale.properties文件,在项目里面配置服务器文件存放的路径:

##uploadfilepath=/home/webapp/sxwl_file/upload/
uploadfilepath=c:/logs/

java通过超链接和servlet配置实现服务器文件下载的更多相关文章

  1. servlet 配置到服务器

    最近写了个安卓项目,服务端用的servlet.因为第一次写java项目,写完如何发布不是太清除,于是把这回经理写出来,一来做个记录,二来也给和我同样经历的朋友一点启示. 首先配置你的java主机和你的 ...

  2. eclipse:eclipse for java EE环境下如何配置tomcat服务器,并让tomcat服务器显示在控制台上,将Web应用部署到tomcat中

    eclipse环境下如何配置tomcat 打开Eclipse,单击"Window"菜单,选择下方的"Preferences".  单击"Server& ...

  3. java web学习笔记-Servlet篇

    Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...

  4. eclipse-ee修改字体大小和配置Tomcat服务器

    参考博客:http://blog.csdn.net/lpftobetheone/article/details/17783791 一.EclipseEE背景色和字体的修改 1.Eclipse背景颜色修 ...

  5. java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 使用过程 和servlet差不多

    java nio 写一个完整的http服务器  支持文件上传   chunk传输    gzip 压缩      也仿照着 netty处理了NIO的空轮询BUG        本项目并不复杂 代码不多 ...

  6. 各种容器与服务器的区别与联系:Servlet容器、WEB容器、Java EE容器、应用服务器、WEB服务器、Java EE服务器

    1.容器与服务器的联系 如上图,我们先来看下容器与服务器的联系:容器是位于应用程序/组件和服务器平台之间的接口集合,使得应用程序/组件可以方便部署到服务器上运行. 2.各种容器的区别/联系 2-1.容 ...

  7. Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)

    该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...

  8. 菜鸟学Java(九)——Servlet的基本配置

    学习JavaWeb的人没有不知道Servlet的吧,而要用Servlet就需要在web.xml中进行配置.相信有很多初学者跟我当初一样,对于一些配置参数不是很理解,今天就说说Servlet最基本的配置 ...

  9. 怎样给Myeclipse配置tomcat服务器

    http://jingyan.baidu.com/article/4853e1e53465271909f72690.html Meclipse是java Web企业级开发中最流行的工具,java we ...

随机推荐

  1. 【lojg152】 乘法逆元 2(数学)

    题面 传送门 题解 orz Wa自动机 这是一个可以\(O(n)\)求出\(n\)个数逆元的方案 先把所有的数做一个前缀积,记为\(s_i\) 然后我们用快速幂求出\(s_n\)的逆元,记为\(sv_ ...

  2. scrapy框架post请求发送,五大核心组件,日志等级,请求传参

    一.post请求发送 - 问题:爬虫文件的代码中,我们从来没有手动的对start_urls列表中存储的起始url进行过请求的发送,但是起始url的确是进行了请求的发送,那这是如何实现的呢? - 解答: ...

  3. 实现反转的方法(reverse)

    1.最简单的方法: public static String reverse1(String str) { return new StringBuffer(str).reverse().toStrin ...

  4. 浏览器性能接口performance.timing说明

    原文来自于 https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html 下图描述了该接口的各个时间 ...

  5. git恢复到上次提交

    4个区 5种状态 未修改(Origin) 已修改(Modified) 已暂存(Staged) 已提交(Committed) 已推送(Pushed) 检查修改 已修改,未暂存(检查工作区与暂存区间的差异 ...

  6. 2016级算法第二次上机-F.ModricWang's Number Theory II

    891 ModricWang's Number Theory II 思路 使得序列的最大公约数不为1,就是大于等于2,就是找到一个大于等于2的数,它能够整除序列中的所有数. 考虑使得一个数d整除数组中 ...

  7. css ie浏览器兼容问题

    第一,IE6,不支持小于12px的盒子,任何小于12px的盒子,在IE6中看都大 解决办法很简单,就是将盒子的字号,设置小(小于盒子的高),比如0px. 1 height: 4px; 2 _font- ...

  8. P4027 [NOI2007]货币兑换

    传送门 首先有一个显然的贪心,每次操作都要做到底,为了最优不会出现只卖一部分或者只买一部分的操作 所以设 $f[i]$ 表示前 $i$ 天得到的最大价值,那么对于每一个 $i$,枚举所有 $j< ...

  9. JavaSwing概述

    GUI(Graphic User Interface)为程序提供图形界面,它最初的设计目的是构建一个通用的GUI,使其能在所有平台上运行.在Java1.0中基础类AWT(Abstract Window ...

  10. HTML基础信息笔记

    HTML 是什么 HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 标签(tag) HTML 标签是由尖括号包围的关键词,比如 <html> ...