一、uploadfive的使用

  上传工具是程序设计中最常用的功能,其中,uploadfive插件使用比较多,此处该插件进行文件的上传操作。该插件是基于HTML5的,因此PC端和移动端都可以使用。
使用:
1、下载uploadfive插件,解压缩到项目中;
2、在程序中调用;
 
HTML代码
<div>
<input id="file_upload" type="file" name="file_upload" />
</div>

JS代码

$('#file_upload').uploadifive({
'uploadScript' : '/PersonalSystem/upload' , //处理文件上传的服务器端脚本,可根据自己的项目环境修改
//'auto':false, //是否自动上传,默认true
//'fileObjName' : 'upload', //服务器端获取的文件对象的名称
'buttonText' : '上传照片', //上传按钮文字
// 'queueID' : 'tip-queue1', //进度条的显示位置
// 'fileType' : 'image/*', //上传文件类型
//'multi' : false, //是否多文件上传
// 'fileSizeLimit' : 5242880, //限制上传文件的大小
//'uploadLimit' : 1, //一次可以上传的最大文件数
//'queueSizeLimit' : 1, //允许队列中存在的最大文件数
// 'removeCompleted':false, //隐藏完成上传的文件,默认为false
'height':50,
'width':80, //上传按钮的宽度与高度只能通过这两个属性进行修改
'onUploadComplete' : function(file, data) {
debugger//onUploadComplete:文件上传完成时触发; 回调参数 file:上传完的文件对象;data:服务器端(uplodify.php)返回的信息
alert('图片' + file.name + '成功上传');
}
})

其中,uploadScript属性是服务器端脚本,插件自带uploadfive.php脚本,在此基础上,创建servlet代替原有的PHP文件。  'uploadScript' : '/PersonalSystem/upload',是servlet的访问路径,在web.xml进行配置。

二、为什么使用servlet

首先要知道servlet是用Java编写的服务器端小程序,在程序中是 Java 编程语言中的一个类,在整个架构中是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。它被用来扩展服务器的性能。其工作原理如图:

三、servlet的使用

创建servlet

1、创建一个servlet的Java类(也可以直接创建servlet),创建Java类后,根据需要添加doGet()和doPost()等函数;
2、配置web.xml 

web.xml中的配置代码

<servlet>
<description>专门用来处理上传操作的servlet</description>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>pers.mengb.persys.servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>

其中servlet-name是servlet名,servlet-class是报名加servlet名,url-pattern为映射路径,可以随意起名字,设置成功后可以直接在系统URL后面加上该映射路径,即可访问该servlet。

文件上传servlet

首先下载两个jar包,分别为commons-fileupload-1.2.2-bin.zip  和 commons-io-2.3-bin.zip          
将两个zip解压缩去除jar包放在lib文件夹下
然后在servlet编写上传代码即可,注意文件上传的提交方式必须是post方式
package pers.mengb.persys.servlet;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* @author Administrator
* 文件上传
* 具体步骤:
* 1)获得磁盘文件条目工厂 DiskFileItemFactory (要导包)
* 2) 利用 request 获取 真实路径 ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同
* 3)对 DiskFileItemFactory 对象设置一些 属性
* 4)高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory);
* 目的是调用 parseRequest(request)方法 获得 FileItem 集合list ,
*
* 5)在 FileItem 对象中 获取信息, 遍历, 判断 表单提交过来的信息 是否是 普通文本信息 另做处理
* 6)
* 第一种. 用第三方 提供的 item.write( new File(path,filename) ); 直接写到磁盘上
* 第二种. 手动处理
*
*/
request.setCharacterEncoding("utf-8"); //设置编码
DiskFileItemFactory factory = new DiskFileItemFactory(); //获得磁盘文件条目工厂
String path = this.getServletContext().getRealPath("uploadDir"); //获取文件需要上传到的路径
//String path = request.getRealPath("/upload"); //该方法不推荐使用啦
//如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
//设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
/*
* 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上,
* 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的
* 然后再将其真正写到 对应目录的硬盘上
*/
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024) ; //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
ServletFileUpload upload = new ServletFileUpload(factory); //高水平的API文件上传处理
try {
List<FileItem> list = upload.parseRequest(request);
for(FileItem item : list)
{
String name = item.getFieldName(); //获取表单的属性名字
//如果获取的 表单信息是普通的 文本 信息
if(item.isFormField())
{
//获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的
String value = item.getString() ;
request.setAttribute(name, value);
}
//对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些
else
{
/*
* 以下三步,主要获取 上传文件的名字
*/
String value = item.getName() ; //获取路径名
int start = value.lastIndexOf("\\"); //索引到最后一个反斜杠
String filename = value.substring(start+1);//截取 上传文件的 字符串名字,加1是 去掉反斜杠,
request.setAttribute(name, filename);
//真正写到磁盘上
//它抛出的异常 用exception 捕捉
//item.write( new File(path,filename) );//第三方提供的
//手动写的
OutputStream out = new FileOutputStream(new File(path,filename));
InputStream in = item.getInputStream() ;
int length = 0 ;
byte [] buf = new byte[1024] ;
System.out.println("获取上传文件的总共大小为:"+item.getSize()+"字节");
// in.read(buf) 每次读到的数据存放在 buf 数组中
while( (length = in.read(buf) ) != -1)
{
//在 buf 数组中 取出数据 写到 (输出流)磁盘上
out.write(buf, 0, length);
}
in.close();
out.close();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e) {
// TODO Auto-generated catch block //e.printStackTrace();
}
//request.getRequestDispatcher("filedemo.jsp").forward(request, response);
} }

四、servlet扩展知识点

Servlet是线程安全吗?

uploadfive 使用强烈建议查看官网文档

 

由uploadfive看servlet的更多相关文章

  1. 站在巨人的肩膀上看Servlet——原来如此(更适合初学者认识Servlet)

    前言: 有段时间没更新博客了,这段时间因为要准备考试,考完试后又忙了一阵别的事,一直没能静下心来写博客.大学考试真是越来越恶心了,各种心酸,那酸爽,够味.不过还好,马上就要大三了,听大三学长学姐说大三 ...

  2. ④品茶看<Servlet&JSP>-EL表达式

    前言 今早,概率课偷了下小懒写的: 泡一杯红茶,ACM集训前,写篇博客记录记录EL表达式. #EL介绍 ①EL 语法 ②访问JavaBean等 ③EL隐式对象 ④EL运算符 EL介绍 EL 全名为Ex ...

  3. Servlet编程

    Servlet编程 1. servlet概念及相关接口简介 java Servlet是运行在web服务器或应用服务器上的程序,他是作为来自web浏览器或其他HTTP客户端的请求和HTTP服务器山的数据 ...

  4. 关于HttpServlet和Servlet以及doPost和doGet关系

    这两天在看Servlet和Jsp,spring太难了,还是先看看基础,只怪自己太弱了. Servlet是一个接口,本身定义的是一种网络服务,HttpServlet是已经实现了Servlet接口,也就是 ...

  5. Servlet的学习(三)

    本篇接上一篇<Servlet的学习(二)> ,主要讲诉如何使用MyEclipse来开发Servlet,和导入Servlet所需要的源代码. 现在我们来创建一个web应用,就叫[myserv ...

  6. 用自己的话表达出来-Servlet

    什么是Servlet Servlet就是工作在服务器端的类,该类可以处理用户传过来的请求,也可以通过响应向用户输送数据. 如何使用Servlet Servlet就是处理用户的HTTP请求,然后回送HT ...

  7. Tomcat怎么实现异步Servlet

    有时Servlet在生成响应报文前必须等待某些耗时的操作,比如在等待一个可用的JDBC连接或等待一个远程Web服务的响应.对于这种情况servlet规范中定义了异步处理方式,由于Servlet中等待阻 ...

  8. Javaweb之 servlet 开发详解1

    1.1  Tip:Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个 ...

  9. 带着新人简单看看servlet到springmvc

    好久都没有写博客了,不是因为自己懒了,而是总感觉自己知道的只是太少了,每次想写博客的时候都不知道怎么下手,不过最近看到一篇博客说的是springmvc,给了我比较大的兴趣,感觉一下子对整个spring ...

随机推荐

  1. 3. 监控利器nagios手把手企业级实战第二部

    1. 编辑hosts.cfg增加被监控的主机[root@nagios etc]# cat objects/hosts.cfg define host{        use               ...

  2. LeetCode——542. 01 矩阵

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 ...

  3. 面向VBA一维数组的实用自定义函数

    UDF.dll包含了一组实用的用户自定义函数,提供了数组处理的快速方法,可以在VB6.VBS.32位VBA中调用. 看完如下的实例代码,就明白它的用处了. Private MyUDF As New U ...

  4. 给创业公司CEO的临别赠言

    一别两宽,各生欢喜 2018年2月8日,我在这个公司的最后一天,三年半. 还记得2014年,在三里屯SOHO的某个咖啡厅中,你自信飞扬的脸和眼睛里暗夜星辰般的闪亮的希冀让我久久无法平静.终于在某一个耀 ...

  5. intel windows caffe加速

    网址: https://github.com/BeFreeRoad/intel_caffe_windows 将intel caffe从linux平台移植到windows平台. 性能: 在虚拟机上测试可 ...

  6. excle导出、导入、下载_jeesite注解@ExcelField

    介绍:对Apache POI 3.9的简单封装,实现Excel的导出导入功能.使用Annotation定义导出导入字段. 优点:1.简单易用,支持大数量导出,配置简单,代码量少. 2.支持Excel ...

  7. 规范化开发和time相关模块

    1. 规范化开发 如果在开发的过程中将所有的程序放在一个py文件中,加载时会很慢,同时降低了代码的可读性,查询起来也麻烦 所以要将一个oy文件合理的分成多个py文件,在blog大目录下分为以下几个部分 ...

  8. python易错知识集合

    本篇用于记录在写leetcode时遇到的python易错知识. 2019.8.29 1.Python range() 函数用法: range(start, stop[, step]) start: 计 ...

  9. leaflet本地加载arcgis切片

    var origin = [-20037700, 33711400];//图层起点坐标 var resolutions = [ 8466.6836000338681, // Level 0 4233. ...

  10. Spring:使用Spring AOP时,如何获取目标方法上的注解

    当使用spring AOP时,判断目标方法上的注解进行相关操作,如缓存,认证权限等 自定义注解 package com.agent.annotation; import java.lang.annot ...