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. Linux环境下动态链接库的生成和使用

    使用自己封装的so时遇到了点问题,本着简便原则决定写个demo看看,顺便记录下整个过程. 1)生成so所需的文件如下: print.h #ifndef __print_h__ #define __pr ...

  2. 编译的 Ruby 2.3.0 缺少 openssl 支持的解决方法 (已解决)

    我的系统是centos 7.5,已离线安装ruby-2.3.0,openssl-1.0.2l,rubygems-2.7.4 如下图: 但是在  gem sources -a http://gems.r ...

  3. Nginx+Apache动静分离

    Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术.动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项 针对PHP的动 ...

  4. 海思3519A 移植 Qt 5.5.1

    源码下载 网址:qt-everywhere-opensource-src-5.5.1.tar.gz 配置生成MakeFile 文件 解压源码包,在源码包路径下生成配置 MakeFile : ./con ...

  5. FPGA基础学习(6) -- 原语

    目录 1. IBUF和IBUFDS(IO) 2. IDDR(Input/Output Functions) 3. IBUFG和IBUFGDS(IO) 原语,即primitive.不同的厂商,原语不同: ...

  6. 【后渗透】PowerSploit

    1.下载安装:git clone https://github.com/mattifestation/PowerSploit.git 2.搭建web服务器(如172.16.12.2),将powersp ...

  7. 解决kvm虚拟机启动之后,网卡eth0变为eth1问题

    2018-12-19 故障前提 kvm虚拟机迁移到其他服务器上之后,重新启动网卡会出现问题 例如原网卡名称为eth0,迁移重启之后会自动变为eth1 为什么eth0会变成eth1? 很多Linux d ...

  8. UBoot常用命令及内核下载与引导

    一.常用命令 1. 获取帮助 ① help 或 ? 2. 环境变量与相关命令 (1)环境变量 ① bootdely ② baudrate ③ netmask ④ ethaddr ⑤ bootfile ...

  9. 3dsmax2018卸载/安装失败/如何彻底卸载清除干净3dsmax2018注册表和文件的方法

    3dsmax2018提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2018失败提示3dsmax2018安装未完成,某些产品无法安装,也有时候想重新 ...

  10. pip升级最新版本

    1.如果是python2.7输入以下指令 python -m pip install --upgrade pip 2.如果是python 3.+输入以下指令 python3 -m pip instal ...