java通过超链接和servlet配置实现服务器文件下载
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配置实现服务器文件下载的更多相关文章
- servlet 配置到服务器
最近写了个安卓项目,服务端用的servlet.因为第一次写java项目,写完如何发布不是太清除,于是把这回经理写出来,一来做个记录,二来也给和我同样经历的朋友一点启示. 首先配置你的java主机和你的 ...
- eclipse:eclipse for java EE环境下如何配置tomcat服务器,并让tomcat服务器显示在控制台上,将Web应用部署到tomcat中
eclipse环境下如何配置tomcat 打开Eclipse,单击"Window"菜单,选择下方的"Preferences". 单击"Server& ...
- java web学习笔记-Servlet篇
Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...
- eclipse-ee修改字体大小和配置Tomcat服务器
参考博客:http://blog.csdn.net/lpftobetheone/article/details/17783791 一.EclipseEE背景色和字体的修改 1.Eclipse背景颜色修 ...
- java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 使用过程 和servlet差不多
java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 也仿照着 netty处理了NIO的空轮询BUG 本项目并不复杂 代码不多 ...
- 各种容器与服务器的区别与联系:Servlet容器、WEB容器、Java EE容器、应用服务器、WEB服务器、Java EE服务器
1.容器与服务器的联系 如上图,我们先来看下容器与服务器的联系:容器是位于应用程序/组件和服务器平台之间的接口集合,使得应用程序/组件可以方便部署到服务器上运行. 2.各种容器的区别/联系 2-1.容 ...
- Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)
该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...
- 菜鸟学Java(九)——Servlet的基本配置
学习JavaWeb的人没有不知道Servlet的吧,而要用Servlet就需要在web.xml中进行配置.相信有很多初学者跟我当初一样,对于一些配置参数不是很理解,今天就说说Servlet最基本的配置 ...
- 怎样给Myeclipse配置tomcat服务器
http://jingyan.baidu.com/article/4853e1e53465271909f72690.html Meclipse是java Web企业级开发中最流行的工具,java we ...
随机推荐
- INSERT IGNORE 与INSERT INTO的区别,以及replace的用法
INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据. 这样就可以保 ...
- 《Fixed Income Portfolio Analytics》阅读笔记——第零部分
<Fixed Income Portfolio Analytics>第零部分的思维导图. <Fixed Income Portfolio Analytics>阅读笔记--第零部 ...
- 游戏1:HTML5制作网页游戏围住神经猫--createjs
游戏简介:点击小圆圈,是蓝色的小圆圈不跑出圆圈外,跑出则结束游戏 准备工作: 下载easejs :下载地址:http://www.createjs.cc/easeljs 中文网站 效果: in ...
- MVC 提交List 集合 注意对应的参数名称
public void AddMovieInfos(List<MoviesInfo> movies) { foreach (var item in movies) { dal.Add(it ...
- 动手玩转Docker(一)
在学习docker之前,先了解一下什么是docker,以及docker技术存在的意义. Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上 ...
- Mockplus原型设计工具介绍
一.原型设计工具简介 Mockplus (摹客) 一种快速原型设计工具 官网提供四个平台的下载,通用性很广. 二.原型设计的模板 Mockplus可以为设计者提供以下几种模板 其中在“手机”模板里, ...
- Doc/Docx/PDF to Html
TODO 判断源文件是否有格式??
- Java学习笔记01
1.原型设计: 将页面的模块.元素.人机交互的形式,利用线框描述的方法,将产品脱离皮肤状态下更加具体跟生动的进行表达. 2.下面的是使用PowerDesigner进行设计的持久层的层次结构图: 虚线三 ...
- Java非静态代码块和静态代码块
类中存在两种特殊的代码块,即非静态代码块和静态代码块,前者是直接由 { } 括起来的代码,而后者是由 static{ } 括起来的代码. 非静态代码块在类初始化创建实例时,将会被提取到类的构造器中执行 ...
- 基础篇:6.2)形位公差-符号 Symbol
本章目的:了解定义形位公差的符号. 1.公差特征项目的符号(GM新标准) //形位公差共:5类14个,4,2,3,3,2. 2.附加符号(GM新标准) //①基本尺寸(理论尺寸)没有公差,无需检验(不 ...