用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载

时间:2021-12-16 02:59:18

用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载,将一个完整的项目进行展示,主要有以下几个部分:

  1、servlet部分   Export

  2、工具类:TxtFileUtil

  3、web.xml

  用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.test.util.TxtFileUtil;

/**
* 导出文件
* @author ouyangyu
* 如何下载tomcat的项目工程下面的文件
*下载地址:http://localhost:8080/ytxtest/ex.hts?filepath=ss.rar
*http://localhost:8080/ytxtest/ex.hts?filepath=fj.docx
*/
public class Export extends HttpServlet
{
private static final long serialVersionUID = 342590465839109906L;

private String contentType = "application/x-msdownload";

private String enc = "utf-8";

private String fileRoot = "";
/**
* 初使化方法
*/
public void init(ServletConfig config) throws ServletException
{
String tempStr = config.getInitParameter("contentType");
if (tempStr != null && !tempStr.equals(""))
{
contentType = tempStr;
}
tempStr = config.getInitParameter("enc");
if (tempStr != null && !tempStr.equals(""))
{
enc = tempStr;
}
tempStr = config.getInitParameter("fileRoot");
if (tempStr != null && !tempStr.equals(""))
{
fileRoot = tempStr;
}
}
/**
* doget请求
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//realUrl = /D:/ruanjian/tomcat/apache-tomcat-6.0.37/webapps/ytxtest/
String realUrl = new TxtFileUtil().getWebRoot();

//String path = realUrl+"/";
//path += StaticValue.FILE_UPLOAD_PATH;
//filepath= ss.rar
String filepath = request.getParameter("filepath");
String fullFilePath = realUrl + filepath;
//fullFilePath = /D:/ruanjian/tomcat/apache-tomcat-6.0.37/webapps/ytxtest/ss.rar
//file = D:\ruanjian\tomcat\apache-tomcat-6.0.37\webapps\ytxtest\ss.rar
File file = new File(fullFilePath);
if (file.exists())
{
//filename = ss.rar
String filename = URLEncoder.encode(file.getName(), enc);
response.reset();
response.setContentType(contentType);
response.addHeader("Content-Disposition", "attachment; filename=\""
+ filename + "\"");
//fileLength = 54325070
int fileLength = (int) file.length();
response.setContentLength(fileLength);
if (fileLength != 0)
{
InputStream inStream = new FileInputStream(file);
byte[] buf = new byte[4096];
ServletOutputStream servletOS = response.getOutputStream();
int readLength;
while (((readLength = inStream.read(buf)) != -1))
{
servletOS.write(buf, 0, readLength);
}
inStream.close();
servletOS.flush();
servletOS.close();
}
}

}
/**
* dopost请求
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
}
}

/**
* 读写文件的工具类
*
* @author Administrator
*/
public class TxtFileUtil
{
/**
* 获取路径
*
* @return
*/
public String getWebRoot()
{
String realUrl = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

String newUrl = "";

if(realUrl.contains("/WEB-INF/"))
{
newUrl = realUrl.substring(0, realUrl.lastIndexOf("WEB-INF/"));
}

realUrl = newUrl.replace("%20", " ");// 此路径不兼容jboss

return realUrl;
}
}

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
<description>导出文件</description>
<display-name>导出文件</display-name>
<servlet-name>Export</servlet-name>
<servlet-class>com.test.servlet.Export</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Export</servlet-name>
<url-pattern>/ex.hts</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载的更多相关文章

  1. java 写一个&quot&semi;HelloJavaWorld你好世界&quot&semi;输出到操作系统文件Hello&period;txt文件中

    package com.beiwo.homework; import java.io.File; import java.io.FileOutputStream; import java.io.IOE ...

  2. 用JAVA写一个函数&comma;功能例如以下: 随意给定一组数&comma; 找出随意数相加之后的结果为35&lpar;随意设定&rpar;的情况

    用JAVA写一个函数.功能例如以下:随意给定一组数,比如{12,60,-8,99,15,35,17,18},找出随意数相加之后的结果为35(随意设定)的情况. 能够递归算法来解: package te ...

  3. 五:用JAVA写一个阿里云VPC Open API调用程序

    用JAVA写一个阿里云VPC Open API调用程序 摘要:用JAVA拼出来Open API的URL 引言 VPC提供了丰富的API接口,让网络工程是可以通过API调用的方式管理网络资源.用程序和软 ...

  4. 用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1

    package com.ljn.base; /** * @author lijinnan * @date:2013-9-12 上午9:55:32 */ public class IncDecThrea ...

  5. 自定义报告,用Java写一个html文件

    因为testng不满足我们的展示,所以我们会自己定义一个报告,实施步骤是,把静态页面做好后,放在Java项目中,其实和生成一个日志文件类似,只是该了后缀,Java中需要使用到PrintStream,案 ...

  6. 使用JAVA写一个简单的日历

    JAVA写一个简单的日历import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateF ...

  7. 【转】忙里偷闲写的小例子---读取android根目录下的文件或文件夹

    原文网址:http://www.cnblogs.com/wenjiang/p/3140055.html 最近几天真的是各种意义上的忙,忙着考试,还要忙着课程设计,手上又有外包的项目,另一边学校的项目还 ...

  8. 忙里偷闲写的小例子---读取android根目录下的文件或文件夹

    最近几天真的是各种意义上的忙,忙着考试,还要忙着课程设计,手上又有外包的项目,另一边学校的项目还要搞,自己的东西还在文档阶段,真的是让人想死啊!! 近半个月来,C#这方面的编码比较多,android和 ...

  9. Java写一个简单学生管理系统

    其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...

随机推荐

  1. webpack 教程 那些事儿06-gulp&plus;webpack多页

    本篇主要讲述用gulp+webpack构建多页应用 折腾到现在,项目还必须要进行,.vue文件必须要加载,也就是webpack必须引入.时间不多了,抛弃上个方案之后,只能牺牲热加载性能,用gulp+w ...

  2. FM&sol;PCM与FM&sol;PPM的区别

    FM/PCM的优点:     1 高可靠性和高抗干扰性.大家知道,一般PPM遥控设备都要求在操作时先开发射机后开接收机,先关接收机后关发射机.其原因是在没有发射信号时,接受机会因自身内部的噪音或外界的 ...

  3. mysql 插入语句

    mysql 插入语句 什么时候用单引号,什么时候不用? 1.先创建一个表 create table user(username varchar(255),age int,marry boolean,b ...

  4. yum 安装 kvm

    KVM是什么? for Kernel-based Virtual Machine 安装环境Centos 6.5 mini x64  禁用selinux, 禁用防火墙 安装过程: 1. 查看我们的电脑是 ...

  5. Activiti工作流学习-----基于5&period;19&period;0版本&lpar;5&rpar;

    五.与Spring集成 实际项目中一般都有Spring的身影,与Spring集成使得Activiti的实用性得到提高.activiti和Spring整合需要activiti-spring的jar在类路 ...

  6. Poem&colon; Reserverd Words

    Let this long package float, Goto private class if short. While protected with debugger case, Contin ...

  7. 兼容现有jQuery API的轻量级JavaScript库:Zepo

    Zepo是一个JavaScript框架,其特点是兼容现有jQuery API的同时,自身体积十分小:它与jQuery有着类似的API.如果你会jQuery,那么也就会使用Zepto了. $('div' ...

  8. 百度ueditor富文本编辑器的使用

    百度ueditor富文本编辑器的使用 //以下为我在官网下载的ueditor v1.3.5 php版的大楷配置步骤第一步: //配置文件的引入应该比功能文件先引入,最后设置语言类型.即:editor. ...

  9. linux shell通配符及if语句判断

    $# 是传给脚本的参数个数 $0 是脚本本身的名字$1 是传递给该shell脚本的第一个参数$2 是传递给该shell脚本的第二个参数$@ 是传给脚本的所有参数的列表$* 是以一个单字符串显示所有向脚 ...

  10. React-简书视频学习总结

    react的基础语法 redux这个数据层框架 react-redux如何方便我们在react中使用redux react-router 4.0 这样的非常实用的相关的第三方模块儿 immutable ...