简单实现下载功能--jsp,servlet

刚到公司,前天给我的第一个小任务,虽然只是做个简单的下载功能。

但一开始还是花了不少时间去理解导师的意思,而且还要用到一些公司的库类,花了一个下午才做好。

大概有三种方法

1.直接用a标签跳转到指定位置的目标文件。  <a href="doc/help.txt" /></a>(文件是位于doc文件夹下help.txt)(不推荐这种方法,而且这跳转会直接打开文件)

2.jsp跳转然后直接在jsp里面写下载功能

<a href="download.jsp" /></a>

在download.jsp中使用字节流的方法提供下载

<%@page language="java" contentType="application/x-msdownload"  pageEncoding="gb2312"%><%
    //关于文件下载时采用文件流输出的方式处理:
    //加上response.reset(),并且所有的%>后面不要换行,包括最后一个

response.reset();//可以加也可以不加
    response.setContentType("application/x-download");
    String filedownload = "想办法找到要提供下载的文件的物理路径+文件名";
    String filedisplay = "给用户提供的下载文件名";
    filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
    response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);

OutputStream outp = null;
    FileInputStream in = null;
    try
    {
        outp = response.getOutputStream();
        in = new FileInputStream(filenamedownload);

byte[] b = new byte[1024];
        int i = 0;

while((i = in.read(b)) > 0)
        {
            outp.write(b, 0, i);
        }
        outp.flush();
    }
    catch(Exception e)
    {
        System.out.println("Error!");
        e.printStackTrace();
    }
    finally
    {
        if(in != null)
        {
            in.close();
            in = null;
        }
        if(outp != null)
        {
            outp.close();
            outp = null;
        }
    }
%>

我觉得这种方法对于网站只有少量下载要求时可以使用

3使用servlet来控制下载

web.xml

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

<servlet>
<servlet-name>DownloadFile</servlet-name>
<servlet-class>com.suntek.web.servlet.DownloadServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>DownloadFile</servlet-name>
<url-pattern>/downloadfile</url-pattern>
</servlet-mapping>

</web-app>

servlet

package com.suntek.web.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

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

public class DownloadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
OutputStream o = response.getOutputStream();
byte b[] = new byte[1024];
// the file to download.
File fileLoad = new File("F:/", "Eula.txt");
// the dialogbox of download file.
response.setHeader("Content-disposition", "attachment;filename="
+ "help.txt");
// set the MIME type.
response.setContentType("text/plain");
// get the file length.
long fileLength = fileLoad.length();
String length = String.valueOf(fileLength);
response.setHeader("Content_Length", length);
// download the file.
FileInputStream in = new FileInputStream(fileLoad);
int n = 0;
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
doGet(request, response);
}
}

在此servlet里面使用了硬编码的方式把文件的路径匹配上去,在实际中要实现动态下载,就从路径方面下手,而且注意,文件的后缀名一定要设置成功,也就是

response.setContentType("text/plain");

来设置下载的文件默认用什么软件打开,contenttype网上有列表,可以自己搜索

下一篇应该会写多线程下载跟实现断点下载(刚好做到这个下载功能,就把这块的知识都顺便学学吧)

时间: 2024-12-23 07:24:42

简单实现下载功能--jsp,servlet的相关文章

实现简单图片下载功能及防盗链

1.防盗链的基本原理就是就是一句话:通过判断request请求头的refer是否来源于本站. 2.HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理. @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletExc

使用jsp/servlet简单实现文件上传与下载

使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用jsp与servlet实现文件上传与下载. 在写代码之前,我们需要导入两个额外的jar包,一个是common-io-2.2.jar,另一个是commons-fileupload-1.3.1.jar,将这个两个jar 包导入WEB-INF/lib目录里. 首先,想要在web端即网页上实现文件上传,必须要提供

jsp+servlet+mysql 实现简单的银行登录转账功能

jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从一个登录页面开始(利用表单提交,action="jsp实现页面")第一步:在(mysql)数据库中建表:建立一个用户的基本信息表(用户姓名,密码,账户余额),用户转账(用户名,转账金额)的操作表第二步:登录页面:输入用户名和密码对数据库中的用户信息(login.jsp)进行验证(qq浏览器

[FMG]两个简单的JSP+servlet小程序

周末啦,最后一天,问了一下妹子,你作业写完了没有,妹子说,木有,我就傻眼了... 好吧,妹子,我来帮你写. 于是乎,把作业ppt下载下来,看了看,还可以,不算难,于是就帮妹子写完了这一个作业.虽然说还有一个作业ppt连我都看不懂布置的老师是想要干什么,真心想吐槽一句,老师,不给力啊. 好了,先上一个代码结构图吧: 主要代码分为java代码部分和WebContent代码部分: java代码部分主要分成了3个包:BEAN(实体类包),DAO(数据库访问类包),Servlet(Servlet类包) B

基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能

本案例的技术选型主要是jsp+servlet+JavaBean,采用三层架构的分层思想与MVC设计模式结合进行规范开发. 采用的数据库是MySQL,并且搭配数据源连接池DBCP和apache官方提供的DBUtils进行数据库连接开发. 目的是为了简化SQL连接编码,并且提高连接数据库的性能. 本案例代码不含有Css和Js效果,如需要完整代码,访问:https://download.csdn.net/download/kese7952/107028 DBUtils的组件官方最新下载地址:http:

JSP+Servlet中使用jspsmartupload.jar进行图片上传下载

JSP+Servlet中使用cos.jar进行图片上传 upload.jsp <form action="FileServlet" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="text" name="cmt&q

最简单的jsp+servlet的增删改查代码

package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import ceet.ac.cn.model.Admin; public class AdminDao {

JSP+servlet简单登录实例

一个简单的jsp+servlet实例,实现简单的登录 转载▼ http://blog.sina.com.cn/s/blog_5c5bc9070100z7wb.html     开发环境myeclipse+tomcat6 1.先创建web project,项目名为RegisterSystem, 2.在WebRoot 目录下创建login.jsp文件,只需修改body中的内容,如下所示: <body>     <form action="login">     us

Servlet实现简单的登陆功能(带验证码)

"纸上得来终觉浅",动手比看书印象更深,学到的更多.下面用Servlet实现简单的登陆功能,来巩固对Servlet的学习. 1.在WEB-INF下新建一个名为index.html作为登陆界面. index.html代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title>