zoukankan      html  css  js  c++  java
  • 文件的上传


    数据源和连接池技术

    数据源(DataSource) 就是在 服务器中 事先配置好,用来创建与数据库交互的连接!
    我们启动服务器的时候,数据源创建的链接已经存在!

    conf/context.xml文件中 配置


    连接池(Connection Pool)
    01.连接池中的链接 由 数据源提供
    02.负责管理和释放连接
    03.是一种缓冲池技术
    04.可以自动分配连接对象以及对闲置连接对象的回收


    JDBC

    JNDI (Java Naming And Directory Interface)
    java命名和目录接口

    Context 上下文
    DataSource 数据源
    通过上下文 找到 数据源

    sql心跳 :目的是确保我们使用的每一个连接都是有效的!

    因为只有sql语句才能访问数据库,所以我们需要定时想数据库发送信息,来确保能正确返回数据,证明数据库还活着!
    所以我们需要写一条sql语句给数据库!
    这条sql语句越简单越好! select 1

    文件上传:
    1.必须引入需要的jar包
    fileupload io
    2.文件上传所在的form表单中的enctype属性值必须是 multipart/form-data
    3.form表单中并不是所有的元素都是文件类型,所以我们需要划分类别
    01.普通的文本元素 新闻标题 新闻内容 新闻创建时间
    02.img 文件类型
    4.form表单中辣么多元素,我们怎么能知道那些是普通文本,那些是 文件类型???
    我们引入的fileupload jar中有一个ServletFileUpload类
    01.类中有一个isMultipartContent(request)
    根据用户的请求,来判断form表单中是否含有文件上传类型
    02.parseRequest(request)
    根据用户的请求, 能获取form表单中所有的元素! 返回值是一个List<FileItem>
    每一个元素对应的对象======>FileItem
    5.现在是找到了所有元素,需要确定 具体的文件上传元素
    FileItem类中有isFormField()
    如果返回值是true=====>普通元素
    返回值是fasle=====>文件上传元素
    6.确定元素之后,把用户选择的文件上传到服务器的指定位置
    FileItem类中有
    输入流 getInputStream() 放进内存中
    输出流 getOutputStream() 放进服务器的指定位置
    7.实现文件上传 必须使用 DiskFileItemFactory implements FileItemFactory


    文件上传的步骤:
    1.创建DiskFileItemFactory的实例对象 设置缓冲区 存放位置
    2.通过DiskFileItemFactory创建 ServletFileUpload
    通过ServletFileUpload.isMultipartContent(request)
    来判断from表单是不是文件上传类型
    3. ServletFileUpload.parseRequest(request)获取所有的元素
    返回值是 List<FileItem>
    4.遍历List<FileItem> 集合,确定文件上传类型
    每遍历一次都要使用isFormField()来判断元素的类型
    01.普通元素
    getFileName获取form表单中的name属性值
    getString设置编码格式
    02.文件元素
    getName 获取上传文件的名称
    输入和输出流实现上传

      1 package com.xdf.servlet;
      2 
      3 import java.io.File;
      4 import java.io.IOException;
      5 import java.text.ParseException;
      6 import java.text.SimpleDateFormat;
      7 import java.util.Iterator;
      8 import java.util.List;
      9 
     10 import javax.servlet.ServletException;
     11 import javax.servlet.annotation.WebServlet;
     12 import javax.servlet.http.HttpServlet;
     13 import javax.servlet.http.HttpServletRequest;
     14 import javax.servlet.http.HttpServletResponse;
     15 
     16 import org.apache.commons.fileupload.FileItem;
     17 import org.apache.commons.fileupload.FileUploadException;
     18 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
     19 import org.apache.commons.fileupload.servlet.ServletFileUpload;
     20 
     21 import com.xdf.bean.Easybuy_News;
     22 import com.xdf.service.news.NewsService;
     23 import com.xdf.service.news.NewsServiceImpl;
     24 
     25 @WebServlet("/addNews")
     26 public class NewsServlet extends HttpServlet {
     27 
     28     @Override
     29     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
     30             throws ServletException, IOException {
     31         doPost(req, resp);
     32     }
     33 
     34     @Override
     35     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
     36             throws ServletException, IOException {
     37         System.out.println("进入了  NewsServlet");
     38         // 解决post请求乱码问题
     39         req.setCharacterEncoding("utf-8");
     40         resp.setCharacterEncoding("utf-8");
     41         // 调用service层代码
     42         NewsService service = new NewsServiceImpl();
     43         // 创建新闻对象
     44         Easybuy_News news = new Easybuy_News();
     45 
     46         // 1.创建DiskFileItemFactory的实例对象 设置缓冲区 存放位置
     47         DiskFileItemFactory factory = new DiskFileItemFactory();
     48         // 2.通过DiskFileItemFactory创建 ServletFileUpload
     49         ServletFileUpload upload = new ServletFileUpload(factory);
     50         // 3.判断是否是文件上传类型 enctype=multipart/form-data
     51         @SuppressWarnings("static-access")
     52         boolean flag = upload.isMultipartContent(req);
     53         if (flag) { // 证明 form表单含有文件上传
     54             try {
     55                 // 4.获取form所有元素
     56                 List<FileItem> items = upload.parseRequest(req);
     57                 Iterator<FileItem> its = items.iterator();
     58                 // 5.循环遍历
     59                 while (its.hasNext()) {
     60                     FileItem item = its.next();
     61                     // 6.判断是普通元素还是 上传元素
     62                     if (item.isFormField()) { // 普通的元素
     63                         String filedName = item.getFieldName();
     64                         switch (filedName) {
     65                         case "title":
     66                             news.setTitle(item.getString("utf-8"));
     67                             break;
     68                         case "content":
     69                             news.setContent(item.getString("utf-8"));
     70                             break;
     71                         case "createTime":
     72                             news.setCreateTime(new SimpleDateFormat("MM/dd/yy")
     73                                     .parse(item.getString("utf-8")));
     74                             break;
     75                         }
     76                     } else {// 文件上传
     77                         // 指定文件上传到服务器的位置
     78                         String uploadPath = req.getSession()
     79                                 .getServletContext().getRealPath("/upload");
     80                         File file = new File(uploadPath);
     81                         if (!file.exists()) {
     82                             file.mkdirs();// 创建服务器文件
     83                         }
     84                         // 获取用户上传的文件名称
     85                         String fileName = item.getName();
     86                         // 解决中文乱码问题
     87                         fileName = new String(fileName.getBytes(), "utf-8");
     88                         // 判断用户是否选择了上传文件
     89                         if (!"".equals(fileName) && null != fileName) {
     90                             File saveFile = new File(uploadPath, fileName);
     91                             // 开始上传
     92                             item.write(saveFile);
     93                             news.setImg(uploadPath + "\" + fileName); // 保存路径到数据库
     94                         }
     95                     }
     96                 }
     97 
     98             } catch (FileUploadException e) {
     99                 e.printStackTrace();
    100             } catch (ParseException e) {
    101                 e.printStackTrace();
    102             } catch (Exception e) {
    103                 e.printStackTrace();
    104             }
    105         }
    106         service.addNews(news); // 真正的上传
    107 
    108     }
    109 }
    View Code
  • 相关阅读:
    C++对象模型与内存位对齐的简单分析(GNU GCC&VS2015编译器)
    [GeekBand] C++学习笔记(2)——BigThree、OOP
    [GeekBand] C++ 高级编程技术 (1)
    [GeekBand]C++高级编程技术(2)
    C++中引用的本质分析
    函数的重载(1)
    C++的特点
    布尔类型和三目运算符
    Linux客户端下的latex相关操作
    无光驱上网本上安装win7
  • 原文地址:https://www.cnblogs.com/wodebokezhijian/p/8196043.html
Copyright © 2011-2022 走看看