【无标题】javaweb文件上传与下载

2023-05-16

构建数据库filetest:包含文件名称及路径

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for file
-- ----------------------------
DROP TABLE IF EXISTS `file`;
CREATE TABLE `file` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `filename` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `filepath` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of file
-- ----------------------------

项目目录结构:

文件上传页面index.jsp:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
  <title>文件上传与下载</title>
<%--  使用cnd加速--%>
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  <%
    String proPath = request.getServletContext().getContextPath();
  %>
  <script type="text/javascript">
<%--    设置input宽度--%>
    $(function (){
      $("[type=file]").each(function (){
        $(this).css("width","150px");
      })
    })
    function toDown(){
      window.location.href = '<%=proPath %>/filelist';
    }
  </script>
</head>
<body>
<form action="<%=proPath %>/upfile" method="post" enctype="multipart/form-data">
  文件1:<input type="file" name="file1"/><br/>
  文件2:<input type="file" name="file2"/><br/>
  文件3:<input type="file" name="file3"/><br/>
  <input type="submit" value="上传">
  <div style="color: red;">${requestScope.msg}</div>
</form>
<button type="button" onclick="toDown();">去下载</button>
</body>
</html>

文件列表页面filelist.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>文件列表</title>
    <%
//        String path = request.getContextPath();
//        String proPath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
        String proPath = request.getServletContext().getContextPath();
    %>
</head>
<body>
<c:forEach var="file" items="${requestScope.filelist}">
    文件名:<c:out value="${file.filename}"/>&nbsp;&nbsp;
    <a href="<%=proPath %>/downfile?id=<c:out value="${file.id}"/>&filename=<c:out value="${file.filename}"/>">下载</a><br>
</c:forEach>
<font>${requestScope.msg}</font>
</body>
</html>

javabean:

package com.web.beans;

public class FileTest {
    private int id;
    private String filename;
    private String filepath;

    public FileTest() {
    }

    public FileTest(int id,String filename, String filepath) {
        this.id = id;
        this.filename = filename;
        this.filepath = filepath;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

    public String getFilepath() {
        return filepath;
    }

    public void setFilepath(String filepath) {
        this.filepath = filepath;
    }

    @Override
    public String toString() {
        return "FileTest{" +
                "id=" + id +
                ", filename='" + filename + '\'' +
                ", filepath='" + filepath + '\'' +
                '}';
    }
}

c3p0配置:

<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
    <named-config name="test">
        <property name="user">root</property>
        <property name="password">fuyou</property>
        <property name="jdbcUrl">jdbc:mysql://119.91.83.99:3306/filetest?characterEncoding=UTF-8</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
<!--        连接不够时的增长-->
        <property name="acquireIncrement">5</property>
        <!-- 初始化数据库连接池时连接的数量 -->
        <property name="initialPoolSize">20</property>
        <!-- 数据库连接池中的最大的数据库连接数 -->
        <property name="maxPoolSize">25</property>
        <!-- 数据库连接池中的最小的数据库连接数 -->
        <property name="minPoolSize">5</property>
    </named-config>
</c3p0-config>

数据库连接:

package com.web.jdbc;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * 创建时间 2021/11/25
 * 描述:jdbc
 * @author 鄢富友
 */
public class BaseDao {
    private static PreparedStatement ps;
    private static ResultSet rs;
    private static ComboPooledDataSource dspool;
    static Connection conn = null;
    static {
        dspool = new ComboPooledDataSource("test");
    }
    public Connection getConn(){
        try{
            conn = dspool.getConnection();
        }catch (Exception e){
            e.printStackTrace();
        }
        return conn;
    }

    public void closeAll(ResultSet rs,PreparedStatement ps,Connection conn){
            if (rs != null){
                try {
                    rs.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }else if (ps != null){
                try {
                    ps.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }else{
                if (conn != null){
                    try {
                        conn.close();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }
    }
}

数据库交互的接口:

package com.web.dao;

import com.web.beans.FileTest;

import java.util.List;

public interface FileService {
    int addFile(FileTest file_bean);
    List<FileTest> fileList();
    String getfilepath(String id);
}

接口实现:

package com.web.dao.impl;

import com.web.beans.FileTest;
import com.web.dao.FileService;
import com.web.jdbc.BaseDao;

import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * 创建时间 2021/11/25
 * 描述:
 */
public class FileServiceImpl implements FileService {
    static BaseDao dao = new BaseDao();
    private static PreparedStatement ps;
    private static ResultSet rs;
    static Connection conn = null;
    @Override
    public int addFile(FileTest file_bean) {
        int i = 0;
        String sql ="insert into file(filename,filepath) values(?,?);";
        try {
            conn = dao.getConn();
            ps = conn.prepareStatement(sql);
            ps.setObject(1,file_bean.getFilename());
            ps.setObject(2,file_bean.getFilepath());
            i = ps.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            dao.closeAll(rs,ps,conn);
        }
        return i;
    }

    @Override
    public List<FileTest> fileList() {
        String sql = "select * from file;";
        List<FileTest> file_list = new ArrayList<>();
        try{
            conn = dao.getConn();
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()){
                FileTest oneFile = new FileTest(Integer.parseInt(rs.getString("id")),rs.getString("filename"),rs.getString("filepath"));
                file_list.add(oneFile);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            dao.closeAll(rs,ps,conn);
        }
        return file_list;
    }

    @Override
    public String getfilepath(String id) {
        String filepath = null;
        String sql = "select filepath from file where id=?;";
        try{
            conn = dao.getConn();
            ps = conn.prepareStatement(sql);
            ps.setObject(1,id);
            rs = ps.executeQuery();
            while (rs.next()){
                filepath = rs.getString("filepath");
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            dao.closeAll(rs,ps,conn);
        }
        return filepath;
    }
}

文件上传的servlet:

package com.web.Servlet;

import com.web.beans.FileTest;
import com.web.dao.impl.FileServiceImpl;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;

/**
 * 创建时间 2021/11/25
 * 描述:上传
 * @author 鄢富友
 */
@WebServlet("/upfile")
public class UpServlet extends HttpServlet {
    private static FileServiceImpl fileService = new FileServiceImpl();
    protected void doGet(HttpServletRequest req, HttpServletResponse res){
        String savePath = this.getServletContext().getRealPath("/WEB-INF/upload/");
        File path = new File(savePath);
//        获取时间戳防止文件覆盖
        Long startTs = System.currentTimeMillis();
        if (!path.exists() && !path.isDirectory()){
            path.mkdirs();
        }
        try {
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload up = new ServletFileUpload(factory);
            up.setHeaderEncoding("UTF-8");
            if (!ServletFileUpload.isMultipartContent(req)){
                return;
            }
            List<FileItem> file_list = up.parseRequest(req);
            FileTest test_file = new FileTest();
            int file_num = 0;
            for (FileItem onefile : file_list){
                if (!onefile.isFormField()){
                    String filename = onefile.getName();
                    if (filename == null || filename.trim().equals("")){
                        System.out.println("未选择文件!");
                        continue;
                    }
                    System.out.println(savePath+filename);
                    file_num ++;
                    test_file.setFilename(filename);
                    test_file.setFilepath(savePath+filename);
                    String filepath = savePath+filename;
                    InputStream in = onefile.getInputStream();
                    OutputStream out = new FileOutputStream(filepath);
                    byte[] bytes = new byte[1024];
                    int len = 0;
                    while ((len = in.read(bytes)) != -1){
                        out.write(bytes,0,len);
                    }
                    in.close();
                    out.close();
                    onefile.delete();
                    System.out.println(test_file);
                    fileService.addFile(test_file);
                }
            }
            req.setAttribute("msg","上传成功!" + file_num + "个");
            req.getRequestDispatcher("/index.jsp").forward(req,res);
            return;
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    protected void doPost(HttpServletRequest req,HttpServletResponse res){
        doGet(req, res);
    }
}

文件列表的servlet:

package com.web.Servlet;

import com.web.beans.FileTest;
import com.web.dao.impl.FileServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 创建时间 2021/11/26
 * 描述:文件列表
 * @author 鄢富友
 */
@WebServlet("/filelist")
public class FileListServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        FileServiceImpl fileService = new FileServiceImpl();
        List<FileTest> fileList = fileService.fileList();
        req.setAttribute("filelist",fileList);
        req.getRequestDispatcher("/filelist.jsp").forward(req,res);
        return;
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        doGet(req, res);
    }
}

文件下载的servlet:

package com.web.Servlet;

import com.web.dao.impl.FileServiceImpl;

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

/**
 * 创建时间 2021/11/25
 * 描述:下载
 * @author 鄢富友
 */
@WebServlet("/downfile")
public class DownServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res){
//        文件路径
        String filename = req.getParameter("filename");
        String id = req.getParameter("id");
        FileServiceImpl fileService = new FileServiceImpl();
        String filepath = fileService.getfilepath(id);
        System.out.println(filename+"  "+filepath);
        res.setContentType("text/html;charset=UTF-8");
        try {
            if (filepath == null){
                req.setAttribute("msg","参数错误!");
                req.getRequestDispatcher("/filelist.jsp").forward(req,res);
                return;
            }
            File file = new File(filepath);
            if (!file.exists()){
                req.setAttribute("msg","文件不存在!");
                req.getRequestDispatcher("/filelist.jsp").forward(req,res);
                return;
            }
            res.addHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(filename,"UTF-8"));
            res.setContentType("multipart/form-data");
            FileInputStream in = new FileInputStream(filepath);
            OutputStream out = res.getOutputStream();
            byte buffer[] = new byte[1024];
            int len = 0;
            while ((len = in.read()) != -1){
                out.write(buffer,0,len);
            }
            in.close();
            out.close();
        }catch (Exception e){
            e.printStackTrace();
        }

    }
    public void doPost(HttpServletRequest req, HttpServletResponse res){
        doGet(req,res);
    }
}

今日份收工。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【无标题】javaweb文件上传与下载 的相关文章

  • Elasticsearch知识点

    目录 1 什么是Elasticsearch 2 Elasticsearch的特点 3 Elasticsearch基础概念 4 Elasticsearch基本数据类型 看这里 5 Elasticsearch基本检索类型 5 1 检索和过滤 5
  • Filter(过滤器)常见应用

    javaweb学习总结 四十六 Filter 过滤器 常见应用 一 统一全站字符编码 通过配置参数charset指明使用何种字符编码 以处理Html Form请求参数的中文问题 1 package me gacl web filter 2
  • JavaWeb案例:实现注册和登录功能

    业务需求分析 在实际开发中 通常会有专门的人去跟客户进行沟通从而了解客户需要什么样的系统 之后由专业的美工将要做的系统以图片的形式表现出来 客户确认后作出一些静态的html demo页面 然后由软件开发人员创建相关数据库 编写代码将该静态页
  • javaWeb数据库连接池,过滤器和监听器

    数据库连接池 JDBC 1 什么是数据库连接池 是一个数据库的工具 能够分配 管理和释放数据库连接 它允许应用程序重复使用一个现有的数据库连接 而不是再重新建立一个 常见数据库连接池 C3P0 是一个开放源代码的JDBC连接池 它在lib目
  • javaWeb项目中分页和模糊查询技术

    分页 需求 登录成功后 展现全部时 出现分页 思路 前端 1 设置分页按钮 以及分页数据 页码 总页数 总条数 2 设置分页请求 即点击上一页 下一页时发请求 后端 3 web xml映射 映射到Servlet能接收请求 4 Dao查询分页
  • Cannot change version of project facet Dynamic Web Module to 2.5 错误

    问题 新建maven webapp项目后 出现Cannot change version of project facet Dynamic web module to 3 0或者2 5 分析 使用Maven新建Web项目时使用的是Artif
  • brew install mysql

    Mac安装MySQL Brew 以及修改默认密码 折腾了一大圈之后 得知需要安装MacOS的包管理器 HomeBrew 百度搜索macos安装homebrew 进入第一个CSDN大佬文章开始撸 安装HomeBrew教程 跟着教程把brew安
  • 关于split截取字符时,问号的特殊情况

    有一段字符 tring str gjjxxcx gjjxx cx jsp zgzh 1010024000019 如果使用如下代码 String strArray str split gjjxx cx jsp System out print
  •  使用jsp实现留言板功能

    使用jsp实现留言板功能 一 开发环境 本项目使用eclipse MySQL8 0进行开发 在开发的过程中使用了一个jar包 mysql connector java 8 0 16 jar 点我下载 二 项目结构 1 index jsp
  • 如何访问WEB-INF文件夹下的jsp文件

    我们都知道不能直接访问WEB INF文件夹下的jsp文件 那应该怎样访问呢 首先 WEB INF目录是Java WEB应用的安全目录 客户端无法访问 只有服务端可以访问 然后 为什么要这么设计 这样做的初衷是在WEB INF文件夹下放一些不
  • Shell中的幽灵王者—JAVAWEB 内存马 【认知篇】

    Goby社区第 21 篇技术分享文章 全文共 6700 字 预计阅读时间 17 分钟 自我介绍 大家好 我是 su18 无论是个人博客还是社区 已经很久没写技术文章了 原因有很多 时间 精力 心态等等 但在开源社区也算比较活跃 由于工作需要
  • shell脚本中$#、$*、$@、$?、$0-n等含义一次性搞明白!!!

    一 Shell脚本变量的含义 1 表示执行脚本传入参数的个数 2 表示执行脚本传入参数的列表 不包括 0 3 表示进程的id Shell本身的PID ProcessID 即脚本运行的当前 进程ID号 4 Shell最后运行的后台Proces
  • Servlet接口实现类

    JavaWeb 03 Servlet 02 Servlet接口实现类 1 什么是Servlet接口 有什么用 Servlet接口来自于Servlet规范中的一个接口 这个接口存在于Http服务器所提供的jar包中 Servlet接口的具体位
  • java中如何将Long类型转为Integer类型

    注意不能直接在前面加个 int 而是 将Long型转换为int型 这里的Long型是包装类型 Long a 10 int b a intValue 即long intValue
  • response实现文件下载(java)

    import javax servlet ServletException import javax servlet ServletOutputStream import javax servlet http HttpServlet imp
  • 【Maven】maven如何配置本地仓库?

    前言 很多小伙伴不清楚怎么配置maven本地仓库 这里给大家分享一下方法 如果觉得有用的话 记得点赞支持哦 1 创建新的路径 maven默认的存放路径是C盘 在你想要的位置创建一个存放maven repository的路径 我是创建在了D盘
  • JDK 8 List集合使用记录

    JDK8 的新特性给我们开发带来了很大的便利性 先声明 我没有系统的去学习 JDK8的这些所有新特性 本文只是记录一些我个人日常开发中常遇到的一些 JDK8 的新特性方法 1 提取对象集合中的某一属性集合 List lt 对象 gt gt
  • JavaWeb的高级、Listener监听器--Servlet事件

    一 学习目标 1 Listener监听器 2 Listener监听器作用 3 Listener监听器的创建与销毁 二 重点知识 1 Listener监听器 Filter和Listener是Servlet规范中的两个高级特性 不同于Servl
  • GraphQL 实现原理,不要被表象骗了

    GraphQL 实现原理 及实例 GraphQL是一种用于API的查询语言和运行时环境 它提供了一种描述数据的方式 客户端可以根据需要进行精确地获取所需的数据 下面是GraphQL的实现原理 类型系统 Type System GraphQL
  • JavaWeb——第五章 Servlet

    第五章 Servlet 一 Servlet简介 1 1 动态资源和静态资源 1 2 Servlet简介 二 Servlet开发流程 2 1 目标 2 2 开发过程 三 Servlet注解方式配置

随机推荐

  • 技术面面试高频考点总结-Redis篇

    文章目录 技术面面试高频考点总结 Redis篇一 Redis常考考点枚举二 Redis推荐学习资料三 小结 技术面面试高频考点总结 Redis篇 大家好呀 xff0c 这里是小黛 xff01 Redis是目前非常火的 xff0c 完全开源的
  • HR面与反问环节考点总结

    文章目录 HR面与反问环节考点总结1 HR面1 1 HR面的重要性与注意事项1 2 HR面常考问题枚举 2 反问2 1 反问是什么2 2 反问都问些什么 小结题外话 HR面与反问环节考点总结 大家好呀 xff0c 这里是小黛 xff01 本
  • 技术面面试高频考点总结-Linux篇

    技术面面试高频考点总结 Linux篇 大家好呀 xff0c 这里是小黛 xff01 Linux是一种类Unix操作系统 xff0c 是由芬兰的林纳斯 托瓦兹 xff08 Linus Torvalds xff09 在1991年首次发布 Lin
  • 技术面面试高频考点总结-操作系统篇

    技术面面试高频考点总结 操作系统篇 文章目录 技术面面试高频考点总结 操作系统篇一 操作系统必考考点列举二 操作系统推荐学习资料三 小结题外话 大家好呀 xff0c 这里是小黛 xff01 操作系统也是在面试中必考的内容 xff0c 那今天
  • 面试高频考点总结-云原生、微服务、K8s、分布式

    文章目录 技术面面试高频考点总结 云原生篇一 云原生简介二 云原生面试考题列举三 小结题外话 技术面面试高频考点总结 云原生篇 大家好呀 xff0c 这里是小黛 xff01 之前的文章呀 xff0c 也介绍了大部分计算机基础相关的八股文 x
  • 技术面面试高频考点总结-JAVA篇

    文章目录 技术面面试高频考点总结 JAVA篇一 Java基础二 JVM三 并发四 框架五 小结题外话 技术面面试高频考点总结 JAVA篇 大家好呀 xff0c 这里是小黛 xff01 今天呀 xff0c 来介绍大家最喜欢的Java篇 xff
  • 视图绑定【android jetpack】

    视图绑定 视图绑定 是通过对xml属性转化为对应的绑定类 会对xml布局中所有的具有id属性的组件创建直接的引用 视图绑定 与 传统的findviewbyid 视图绑定 xff1a 是对id属性组件的直接引用 相当于只要组件只要有了id属性
  • NLTK语料库下载

    仓库地址 https github com Trkly NLTK DATA 希望能够帮到大家并希望大家给个star 语料库的存放位置参考如下图
  • Manjaro入坑

    Manjaro入坑 没有技术还偏偏就是喜欢瞎折腾 xff0c 没错 xff0c 说的就是我 xff01 大一的时候装过 Ubuntu 43 Win10 以及 CentOS7 8 43 Win10 的双操作系统 xff0c 后来因为一些日常软
  • android 监听手机电量变化

    今天 xff0c 简单讲讲如何监听手机电量的变化 监听电量是不能静态注册的 后来上网搜索 xff0c 发现有五个不能静态注册的广播 xff0c 这里记录一下 xff0c 免得下次再后知后觉的发现并惊讶于自己的笨拙 不能静态注册的广播 and
  • 【笔记】libpcap安装与使用

    Ubuntu 20 04 文章目录 起步一 下载libpcap 库二 安装三 使用 完整程序 们 1 头文件集锦myheader h 2 打印报文内容sniff c 3 嗅探与伪造icmpspoof c 附加内容unmask 0 共享内存报
  • 2022基于Anaconda环境下Jupyter最全安装插件及配置相关知识及踩坑指南

    2022Jupyter 43 Anaconda最全安装相关知识及踩坑指南 一 简介1 概述2 下载网址以及参考文档3 优点 二 安装使用过程1 起始2 更改存储路径 xff08 踩坑 xff08 1 xff09 xff09 2 1 使用管理
  • 微信小程序整合WebScoket部署上线

    微信小程序整合WebScoket部署上线 在部署的服务器 中安装nginx xff0c 并作出如下配置 xff1a 思路 xff1a 此处监听的是外部的443端口和xcxapi wfeifei com域名 xff0c 当通过该域名和端口号进
  • Vue(v-show简介)

    v show简介 1 v show指令的作用是 xff1a 根据切换元素的显示状态 2 原理是修改元素 的display xff0c 实现显示隐藏 3 指令后面的内容 xff0c 最终都会解析为布尔值 4 值为true元素显示 xff0c
  • 使用python编写adb脚本实现自动化测试

    使用python编写adb脚本实现自动化测试 前言一 python与adb二 使用步骤1 基本原理2 方法1 xff1a 使用os system 函数实现2 方法2 xff1a 使用os popen 函数实现2 方法3 xff1a 使用su
  • 怎么在jupyter中安装tensorflow,并切换环境为tensorflow

    首先说一下遇到的问题是如下 xff08 前提是已经安装anaconda xff09 xff1a 一 进入jupyter打开终端 在cmd中输入jupyter notebook进入jupyter xff1a 然后进入终端 xff1a 进入之后
  • selenium 自动化测试

    selenium 是最广泛使用的开源Web UI xff08 用户界面 xff09 自动化测试套件之一 selenium测试脚本可以使用任何支持的编程语言进行编码 xff0c 并且可以直接在大多数现代Web浏览器中运行 在爬虫领域selen
  • 1.spring框架-----spring framework bean基础配置 bean生命周期

    目录 一 spring framework 1 IoC控制反转 Inversion of Control 2 DI依赖注入 Dependency Injection 3 bean基础配置 4 bean实例化 4 1构造方法 4 2静态工厂
  • 华为FusionCompute资源配置

    文章目录 前言主机配置添加主机网口绑定 网络资源配置创建DVS添加上行链路添加VLAN池创建端口组 存储资源配置添加存储接口添加存储资源 前言 在上一篇文章 xff1a 在VMware Workstation和云服务器上安装华为Fusion
  • 【无标题】javaweb文件上传与下载

    构建数据库filetest xff1a 包含文件名称及路径 SET FOREIGN KEY CHECKS 61 0 Table structure for file DROP TABLE IF EXISTS 96 file 96 CREAT