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 ...
随机推荐
- 模拟RHCSA考试环境
转载自 http://blog.51cto.com/10681635/2084794 模拟RHCSA考试环境 第1章 修改 root 密码 第2章 配置网络 第3章 设定SeLinux 第4章 ...
- Linux下对于makefile的理解
什么是makefile呢?在Linux下makefile我们可以把理解为工程的编译规则.一个工程中源文件不计数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,那些 ...
- [转] iOS 在UILabel显示不同的字体和颜色
在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel 使用不同的颜色或不同的字体来体现字符串,在iOS 6 以后我们可以很轻松的实现这一点,官方的API 为我们提供了UILabel类的at ...
- xcode - iPhone Debugging: How to resolve 'failed to get the task for process'? - Stack Overflow
The program being debugged is not being run. Everyone sees this once in a while during Xcode develop ...
- 修改ZuulHandlerMapping私有变量pathMatcher,重写match方法,使url匹配兼容正则表达式。
一.起源 在mocksever中引入了spring cloud zuul做代理转发,如果请求的url和配置的mock规则匹配(精确匹配和模糊匹配),忽略,不做转发.如果mock配置的url和请求url ...
- StringBuffer类和String类的区别
StringBuffer是使用缓冲区的,本身也是操作字符串的,但与String类不同,String类的内容一旦声明后是不可改变的,改变的只是其内存的指向,而StringBuffer类的对象内容是可以改 ...
- 编写高质量代码:Web前端开发修炼之道(三)
第五章:高质量的Javascript 这章的内容我看的最久,这是跟我js基础没打好有着莫大的关系,但是还是耐着性子看完了, 不懂的东西都是百度上搜索,理解后再继续.下面是记录下来的笔记. 1)如何避免 ...
- try语句块和异常处理
在C++中,异常处理包括: · throw表达式(throw expression) 异常检测部分使用throw表达式来表示它遇到了无法处理的问题.throw表达式抛出一个异常并把控制权转移到能处理该 ...
- 【后渗透】PowerSploit
1.下载安装:git clone https://github.com/mattifestation/PowerSploit.git 2.搭建web服务器(如172.16.12.2),将powersp ...
- Linux I2C驱动程序设计
1. Linux I2C子系统架构 (1)I2C核心(I2C-Core):I2C 总线和I2C 设备驱动的中间枢纽,它提供了I2C 总线驱动和设备驱动的注册.注销方法等 (2)I2C控制器驱动(ada ...