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 ...
随机推荐
- 洛谷P5050 【模板】多项式多点求值
传送门 人傻常数大.jpg 因为求逆的时候没清零结果调了几个小时-- 前置芝士 多项式除法,多项式求逆 什么?你不会?左转你谷模板区,包教包会 题解 首先我们要知道一个结论\[f(x_0)\equiv ...
- css中的左右垂直居中的问题,可兼容各种版本浏览器的写法
如题分为垂直居中,左右居中,先挑简单的记录. 一.左右居中 1.我刚开始写代码的时候,老师就直接告诉我一个简单的方法,那就是: width:500px; height:200px; margin:0 ...
- Angularjs和Ionic框架搭建webApp
本文原创版权归 简书作者 噜啦啦噜啦啦噜啦噜啦噜 所有,转载请联系作者获得授权,并于文章开头标注原创作者及出处,以示尊重! 文/噜啦啦噜啦啦噜啦噜啦噜(简书作者)原文链接:http://www.jia ...
- tomcat Setting property 'source' to 'org.eclipse.jst.jee.server
很不爽,好好的项目不知道突然怎么了... 启动tomcat出个错,,,,, setting property 'source' to 'org.eclipse.jst.jee.server:jeesi ...
- 高阶篇:4.1)QFD质量功能展开-总章
本章目的:了解QFD概念和作用,为FMEA打下基础. 1.QFD定义 质量功能展开QFD(Quality Function Deployment),是把顾客或市场的要求转化为设计要求.零部件特性.工艺 ...
- CDQZ Day7
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #i ...
- linux 查看进程启动时,用户的工作目录
在linux下查看进程大家都会想到用 ps -ef|grep XXX可是看到的不是全路径,怎么看全路径呢?每个进程启动之后在 /proc下面有一个于pid对应的路径例如:ps -ef|grep pyt ...
- 关于DES加密之选择更新版
数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款 ...
- nginx基础学习第二篇:nginx内置变量的使用
ngx_http_core模块提供的内置变量有很多,常见的有 $uri,用来获取当前请求的uri,不含请求参数. $request_uri,用来获取请求最原始的uri,包含请求参数,且未解码. $re ...
- Tomcat 9内存溢出:"http-apr-8080-Acceptor-0" java.lang.OutOfMemoryError: Direct buffer memory
Tomcat开启了APR模式,而APR模式会使用堆外内存,关于堆内存可从如下链接了解一下:http://blog.csdn.net/zhouhl_cn/article/details/6573213. ...