文件的上传


数据源和连接池技术

数据源(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
原文地址:https://www.cnblogs.com/wodebokezhijian/p/8196043.html