文件上传下载系统

本文介绍了文件上传下载系统中如何利用HTTP会话技术,特别是Session,来实现用户身份识别和会话跟踪。文章详细阐述了Session的工作原理,将其比喻为个人储物柜,强调了Session存储于服务器端,而Cookie存储于客户端。同时,讨论了数据库设计和系统架构,包括文件信息表、操作记录表和用户表。最后,提到了在实际开发中可能出现的问题和需要完善的其他功能。
摘要由CSDN通过智能技术生成

结合前端界面实现文件的上传和下载,首先需要了解会话跟踪,基于http是一种短连接,对于服务器来说并不知道每一次的请求是谁发的,它只负责接收请求并做出响应,并且每一次的请求与响应都互不关联,例如我只需要知道执行完登录操作之后的请求路径就可以越过登录直接访问,因此需要给每一个用户一个识别码,用户登录后才能执行后面的操作。
servlet提供了以下四种会话技术:
1、URL重写(浏览器地址栏传值)
2、隐藏域传值(将文本框隐藏并给定默认值)
3、Session:session用于存储客户端和服务端的一次会话,是服务端的一段缓存空间。默认有效时间是30分钟
4、Cookie:cookie是一个用于在客户端缓存数据的客户端文件,适用于缓存稍大量的数据信息,可以自由设定有效时长。

session的概念

Session同样也是会话技术的一种,和存储于客户端的Cookie不同,Session是存储于服务器端的。我们可以先简单的把Session理解为个人的储物柜,每个人有一个唯一对应的储物柜,用户可以根据手里的钥匙来操作储物柜。就在上面的例子中,比如说是一家健身房,当我们进入健身房后,前台小妹会给我们一把储物柜的钥匙(Cookie),我们拿着钥匙找到对应的柜子(Session),换装,健身…,换装,归还钥匙,此次健身结束。

​在上面这次健身经历中,从我们进入健身房到离开健身房就是一次完整的会话,前台小妹给我们的钥匙就是一个Cookie,钥匙上号码牌对应的柜子就是Session,每位健身者都只拥有一个储物柜,可以将衣服、背包、手机等物品存放其中,中间健身过程中比如买了瓶水、炸鸡等物品,一样可以放入储物柜中或拿在身边,这些内容即是会话过程中产生的数据,可以存储于客户端或服务器。

​想象一下,如果没有储物柜的存在(Session),我们则需将所有衣服、鞋子等等带在身边,每换一个项目就得将所有的东西一起携带过去,这也是我们说的如果把过多的信息存储在客户端的弊端。
了解了这个原理之后,对该项目进行简单的分析:
数据库需要三张表:
文件信息表,
在这里插入图片描述

操作记录表,
在这里插入图片描述

用户表。
在这里插入图片描述

DAO:fileDAO;
实体类(entity):File,Record,User
过滤器(FileFilter);
相应的Servlet类;
数据库访问工具

代码如下:
DAO层

public class FileDAO {
   


    //添加用户
    public boolean add(User user){
   
        String sql = "insert into user(uname,password,phone) values(?,?,?)";
        return DBUtils.exeUpdate(sql,user.getUname(),user.getPassword(),user.getPhone());
    }

    //查询所有用户信息
    public List<User> queryUser(){
   
        String sql = "select * from user ";
        return DBUtils.queryList(User.class,sql);

    }

    //查询一个用户信息
    public  User queryOne(String name){
   
        String sql ="select * from user where uname=?";
        return DBUtils.queryOne(User.class,sql,name);
    }

    //添加文件
    public boolean addFile(File file){
   
        String sql = "insert into file(fname,size,time,type,userid,score,detail,keyword,username) values(?,?,?,?,?,?,?,?,?)";
        return DBUtils.exeUpdate(sql,file.getFname(),file.getSize(),file.getTime(),file.getType(),file.getUserid(),file.getScore(),file.getDetail(),file.getKeyword(),file.getUsername());
    }

    //添加记录
    public boolean addRecord(Record record){
   
        String sql = "insert into record(fname,path,updown,time,userid) values(?,?,?,?,?)";
        return DBUtils.exeUpdate(sql,record.getFname(),record.getPath(),record.getUpdown(),record.getTime(),record.getUserid());
    }

    //查询所有文件信息
    public List<File> queryAll(){
   
        String sql = "select * from file";
        return DBUtils.queryList(File.class,sql);
    }

    //查询当前用户上传的文件信息
    public List<File> querySelf(int id){
   
        String sql = "select * from file where userid=?";
        return DBUtils.queryList(File.class,sql,id);
    }

}

BaseServlet类 version2.0

public class BaseServlet extends HttpServlet {
   

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        //获取需要执行的方法名称
        String methodName = req.getParameter("method");
        //根据方法名获取需要执行的方法对象
        try {
   
            Method method = this.getClass().getMethod
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值