Webapp JavaEE 使用Servlet和jsp实现简单的文件下载

系统: Mac Os

开发工具: IDEA

用到的Jar包: 

 

download.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <base href="<%=basePath%>">

    <title>文件下载</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

</head>

<body>
<a href="/DownloadServlet?filename=1.txt">文件下载</a>
</body>
</html>

message.jsp

随便写,问题不大

DownloadServlet



import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class DownloadServlet
 */
@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public DownloadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //得到要下载的文件名 通过 request对象的方法
        String fileName = request.getParameter("filename");

        //处理文件名的中文乱码问题
        fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
        //下载的文件都是保存在/WEB-INF/upload目录当中
        String fileSaveRootPath=this.getServletContext().getRealPath("/WEB-INF/upload");
        System.out.println(fileSaveRootPath);
        //得到要下载的文件
        File file = new File(fileSaveRootPath + "/" + fileName);
        System.out.println(fileSaveRootPath + "/" + fileName);
        //如果文件不存在
        if(!file.exists()){
            request.setAttribute("msg", "您要下载的资源已被删除!!");
            request.getRequestDispatcher("/message.jsp").forward(request, response);
            return;
        }
        //处理文件名
        String realname = fileName.substring(fileName.indexOf("_")+1);
        //设置响应头,控制浏览器下载该文件
        response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8"));
        //读取要下载的文件,保存到文件输入流
        FileInputStream in = new FileInputStream(file);
        //创建输出流
        OutputStream out = response.getOutputStream();
        //创建缓冲区
        byte buffer[] = new byte[1024];
        int len = 0;
        //循环将输入流中的内容读取到缓冲区当中
        while((len=in.read(buffer))>0){
            //输出缓冲区的内容到浏览器,实现文件下载
            out.write(buffer, 0, len);
        }
        //关闭文件输入流
        in.close();
        //关闭输出流
        out.close();
    }

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

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <welcome-file-list>
        <welcome-file>download.jsp</welcome-file>
    </welcome-file-list>

    <!-- 声明Servlet -->
    <servlet>
        <!-- Servlet名称 -->
        <servlet-name>DownloadServlet</servlet-name>
        <!-- Servlet完整类名 -->
        <servlet-class>DownloadServlet</servlet-class>
    </servlet>
    <!-- Servlet映射 -->
    <servlet-mapping>
        <!-- Servlet名称 -->
        <servlet-name>DownloadServlet</servlet-name>
        <!-- URL映射 -->
        <url-pattern>/DownloadServlet</url-pattern>
    </servlet-mapping>

</web-app>

 

注意事项:

1.下载文件放在WEB_INF下的upload文件夹里

2.url路径不要写错

3.注意File file里的"/"与"\\"

 

 

推荐一个 Jar 包下载地址:https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload

搜索后下载对应Jar包即可。

 

以下是一个简单实现文件 MD5 校验的 JavaWeb 项目,包括了 ServletJSP 界面: 1. 创建一个名为 "MD5Check" 的 JavaWeb 项目。 2. 在 WEB-INF 目录下创建一个名为 "lib" 的文件夹,并将 "commons-codec-1.10.jar" 文件拷贝到该文件夹下。 3. 在 src 目录下创建一个名为 "com.example" 的包,并在该包下创建一个名为 "MD5CheckServlet" 的类。该类继承 HttpServlet实现 doGet 和 doPost 方法。 ```java package com.example; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Hex; public class MD5CheckServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/md5check.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { InputStream is = request.getPart("file").getInputStream(); try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1) { md.update(buffer, 0, len); } byte[] digest = md.digest(); String md5 = Hex.encodeHexString(digest); request.setAttribute("md5", md5); } catch (NoSuchAlgorithmException e) { throw new ServletException(e); } request.getRequestDispatcher("/WEB-INF/md5check.jsp").forward(request, response); } } ``` 4. 在 WEB-INF 目录下创建一个名为 "md5check.jsp" 的 JSP 文件,该文件包含一个上传文件的表单和一个用于显示计算出的 MD5 值的元素。 ```jsp <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>MD5 Check</title> </head> <body> <h1>MD5 Check</h1> <form action="<%=request.getContextPath()%>/md5Check" method="post" enctype="multipart/form-data"> <input type="file" name="file"/><br/><br/> <input type="submit" value="Check"/> </form> <br/><br/> <% if (request.getAttribute("md5") != null) { %> <p>MD5: <%=request.getAttribute("md5")%></p> <% } %> </body> </html> ``` 5. 在 web.xml 文件中配置 Servlet。 ```xml <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>MD5Check</display-name> <servlet> <servlet-name>MD5CheckServlet</servlet-name> <servlet-class>com.example.MD5CheckServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MD5CheckServlet</servlet-name> <url-pattern>/md5Check</url-pattern> </servlet-mapping> </web-app> ``` 6. 将项目部署到 Tomcat 服务器上,并在浏览器中访问 "http://localhost:8080/MD5Check",即可看到上传文件的表单。选择一个文件并点击 "Check" 按钮,即可计算出该文件的 MD5 值,并显示在页面上。 注意:该示例只是一个简单的演示,没有对上传的文件进行任何验证和限制,使用时需要考虑安全性问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值