基于tomcat的Java-web开发;在线教学网站的开发--上传文件、下载文件和用户会话的管理

实验目的

1)了解文件上传和下载的技术原理。
2)加深对会话的理解。
3)掌握servlet程序开发和调试的方法,增强上机动手的能力。

实验内容

在线教学网站系统增加文件上传和下载模块,实现如下功能:
1)实现在客户端将文件上传到服务器固定目录下。
2)实现在客户端从服务器固定目录下载文件。
3)当用户再次进入考试页面,可以显示上次考试的分数。(选择会话或数据库完成)
说明:文件的上传和下载目录由自己设定。

FileUpload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>我的文件上传操作</title>
</head>
<body>

${message}<br>
<form action="fileUpload.do" enctype="multipart/form-data" method="post">
  <table>
    <tr><td colspan="2" align="center">文件上传</td></tr>
    <tr><td>会员号:</td>
      <td><input type="text" name="M_number" size="30"/></td>
    </tr>
    <tr><td>文件名:</td>
      <td><input type="file" name="fileName" size="30" /></td>
    </tr>
    <tr>
      <td align="right"><input type="submit" value="提交"></td>
      <td align="left"><input type="reset" value="重置"/> </td>
    </tr>
  </table>
  <a href="login.jsp">返回登陆页面</a>
  <a href="text.jsp">返回考试页面</a>
</form>
<a href="download" >下载文件</a>
<a href="score">查看上一次成绩</a>
</body>
</html>

在这里插入图片描述

FileUploadServlet

package demo;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet(name = "FileUploadServlet",urlPatterns = {"/fileUpload.do"})
@MultipartConfig(location = "D:\\",fileSizeThreshold = 10240)
public class FileUploadServlet extends HttpServlet{

    public String getFilename(Part part)
    {

        String fname=null;
        //返回上传问的文件部分的content-disposition请求头的值
        String header=part.getHeader("content-disposition");
        System.out.println(header);
        fname=header.substring(header.lastIndexOf("=")+2,header.length()-1);
        return fname;
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String path=this.getServletContext().getRealPath("/");
        String M_number=req.getParameter("M_number");
        Part p= req.getPart("fileName");
        String message="";
        if(p.getSize()>10240*10240)
        {
            //上传的文件不超过10MB
            p.delete();
            message="文件太大,不能上传";
        }
        else {
            //文件存储在文档根目录下member子目录种会员子目录中
            path=path+"\\member\\"+M_number;
            File f=new File(path);
            if(!f.exists())
            {
                f.mkdirs();
            }
            String fname=getFilename(p);
            p.write(path+"\\"+fname);
            message="文件上传成功";
        }
        req.setAttribute("message",message);
        RequestDispatcher rd=req.getRequestDispatcher("/fileUpload.jsp");
        System.out.println(path);
        rd.forward(req,resp);
    }

}


在这里插入图片描述

在这里插入图片描述

文件上传后我们在这个目录下找到了我们刚刚上传的图片

注意的点

form标签中应该指定enctype属性,它的值应该为”multipart/form-data,form的method属性应该为post

FileDownLoad.java

package demo;
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
@WebServlet(urlPatterns = {"/download"})
public class FileDownLoadServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession();
        String dataDiretory=req.getServletContext().getRealPath("/WEB-INF/data");
        System.out.println(dataDiretory+"差不多得了");
        File file=new File(dataDiretory,"A.pdf");//Java.pdf要修改
        if(file.exists())
        {
            resp.setContentType("application/octet-stream");
            resp.addHeader("Content-Disposition","attachment;filename=A.pdf");
            byte []buffer=new byte[10240*10240];
            FileInputStream fis=null;
            BufferedInputStream bis=null;
            try {
                fis=new FileInputStream(file);
                bis=new BufferedInputStream(fis);
                OutputStream os=resp.getOutputStream();
                int i=bis.read(buffer);
                while (i!=1)
                {
                    os.write(buffer,0,i);
                    i=bis.read(buffer);
                }
            }
            catch (IOException ex)
            {
                System.out.println(ex.toString());
            }
            finally {
                if(bis!=null)
                {
                    bis.close();
                }
                if(fis!=null)
                {
                    fis.close();
                }
            }

        }
        else {
            resp.setContentType("text/html;charset=utf-8");
            PrintWriter out=resp.getWriter();
            out.println("文件不存在");
        }
    }
}

首先要把对应的文件放在指定的文件夹下
在这里插入图片描述
在这里插入图片描述

Score.java

package demo;
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
@WebServlet(urlPatterns = {"/score"})
public class score extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      HttpSession session= req.getSession();//获取会话
      int score=(int)session.getAttribute("score");//获取分数的值
      PrintWriter out= resp.getWriter();
      out.println("<html><body>");
        out.println("last score:"+score);
        out.println("</body></html>");

    }
}

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值