位置: 首页 > 苏州JAVA > 张家港java开发培训要多少钱啊
张家港java开发培训要多少钱啊
预约试听
张家港java开发培训要多少钱啊
一个合格的未来 Java工程师

张家港java开发培训要多少钱啊

张家港java开发培训要多少钱啊

自学java与java培训该如何选择

张家港java开发培训要多少钱啊

从事IT培训行业这些年,身边经常有朋友来咨询,问现在是否可以加入这个高薪行业,Java学习难不难,需要哪些条件?

在软件开发设计行业当中,使用**多的编程语言就属Java软件开发了,很多人都想在Java编程开发领域寻求一份工作。

Java是当前世界上比较流行的计算机编程语言,Java彻底改变了人们的生活,国内的开发人才需求量仍然在不断的增长,主要原因还是在于移动互联网的快速发展,衍生出一大批的新生企业,创业公司,预计在未来5年内Java软件开发人才的需求将会远大于供给,其中java程序员、java工程师**为缺乏。

自学java与java培训是两个绕不开的话题,两者的区别,前者知识是自己搜寻的,买书看或者网上找视频看,而后者,技术知识是老师教的,作为一个普通大学生实际上任何人都能够自学,只不过聪明程度和坚持的时间长短不同,花费的时间长一点短一点而已。

学习关乎到时间和金钱,没有效果和质量的培训,其实是没有任何意义的。Java培训班有哪些呢?市面上的Java培训良莠不齐,选择时应该慎重些。Java致力于打造符合企业需求的全能型人才。课程定位定位中高级JAVA开发工程师,课程内容涉及面广,内容深。课程涵盖了Java、Web,数据库,企业流行框架,Java等企业**佳实践、云计算大数据课程、内容由浅入深,剖析原理,让学员掌握实用技术,做企业和社会需要的稀缺人才。

此外,Java培训将为你提供就业保障,开设有就业指导课,设有专门的就业指导老师,在毕业前期,毕业之际,就业老师会为你做专门的就业指导,更有职业素养课程,不仅将你打造成Java开发技术达人,更是一位懂得职场之道的合格就业者。还有丰富的Java学习视频免费为你提供学习。

大数据核心知识

张家港java开发培训要多少钱啊

大数据核心知识

Hadoop基础

Hadoop1介绍

hadoop1架构

hadoop2架构(对比hadoop1)

hadoop2环境搭建

HDFS操作

yarn操作

Hadoop应用

Hive数据仓库

zookeeper系统服务

HBase非关系型数据库

Sqoop数据库抽取工具

Flume日志抽取工具

Spark基础

环境搭建

Spark平台介绍

RDD弹性分布式数据集

Scala编程

Spark应用

Spark-SQL组件

DataFrame组件

课程优势

1.真实的企业项目;

2.目前企业中应用广泛的技术路线;

3.部分Spark源码剖析,从源码层面提升问题解决能力。

4.从hadoop1到hadoop2机制原理详细解说;

5.生产环境hadoop集群调优经验;

6.企业真实项目实战;

本阶段学习目标

1.了解hadoop机制原理 ;

2.了解hadoop集群搭建过程;

3.了解Hdfs API使用以及mr编程模型;

4.了解hive、hbase、sqoop、flume等组件的使用方法;

5.Spark平台的优势以及Spark集群的搭建过程;

6.Scala程序设计基础;

7.Spark-SQL和DataFrame API详解。

本阶段学习效果

1.了解hadoop集群的搭建过程;

2.能够**mr和hive来实现简单的数据清洗的业务需求;

3.能够了解数据的抽取,转换,清洗,建模,入库过程;

4.掌握Spark集群的搭建;

5.掌握函数式编程思想,能够根据业务需求编写高质量的Scala程序;

6.掌握大规模离线数据的计算、分析能力。

Apache FileUpload 文件上传组件API解读-2


>

1.RFC1867协议

**初的 http 协议中,没有上传文件方面的功能。RFC1867("Form-based File Upload in HTML".)

为 http 协议添加了这个功能。客户端的浏览器,如 Microsoft IE, Mozila, Opera 等,按照此规范将用 户指定的文件发送到服务器。服务器端的网页程序,如 php, asp, jsp 等,可以按照此规范,解析出用户 发送来的文件。


2.1客户端

简单来说,RFC1867规范要求http协议增加了file类型的input标签,用于浏览需要上传的文件。同时 要求FORM表单的enctype属性设置为“multipart/form-data”,method属性设置为“post”即可,下面是我们文 件上传页面的表单代码:

<form action="<%=request.getContextPath()%>/servlet/SimpleUpload" enctype="multipart/form-data"  method="post">

文本1:<input type="text" name="text1" value="文本1"><br>

文件2:<input type="text" name="text2" value="文本2"><br>

文件1:<input type="file" name="file1"><br>

文件2:<input type="file" name="file2"><br>

文件2:<input type="file" name="file3"><br>

<input type="submit" value="开始上传">

</form>

2.2 服务器端

一个文件上传请求的消息实体由一系列根据 RFC1867("Form-based File Upload in HTML".)编码的项目 (文本参数和文件参数)组成。自己编程来解析获取这些数据是非常麻烦的,还需要了解RFC1867规范对请 求数据编码的相关知识。FileUpload 可以帮助我们解析这样的请求,将每一个项目封装成一个实现了FileItem 接口的对象,并以列表的形式返回。所以,我们只需要了解FileUpload的API如何使用即可,不用管它们的底 层实现。让我们来看一个简单文件上传处理代码:

DiskFileItemFactory factory new DiskFileItemFactory();

ServletFileUpload uploader new ServletFileUpload(factory);

List<FileItem> list uploader.parseRequest(request);

if (item.isFormField()){

// 处理普通表单域

String field item.getFieldName();//表单域名

String value item.getString("GBK");

else {

//将临时文件保存到指定目录

String fileName item.getName();//文件名称

String filepath "您希望保存的目录/"   fileName;

item.write(new File(filepath));//执行保存

}

    怎么样?简单吧!下面我们来继续了解一些必须了解的API。

FileItem接口

org.apache.commons.fileupload.disk.DiskFileItem实现了FileItem接口,用来封装单个表单字段元素的 数据。**调用FileItem 定义的方法可以获得相关表单字段元素的数据。我们不需要关心DiskFileItem的具 体实现,在程序中可以采用FileItem接口类型来对DiskFileItem对象进行引用和访问。FileItem类还实现了 Serializable接口,以支持序列化操作。

下图是一个文件上传表单:

...............

...............

...............

上图表单提交的http数据包的内容:

POST /demo/servlet/SimpleUpload HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-Flash, application/msWord,  application/vnd.ms-Excel, application/vnd.ms-Powerpoint, */*

Referer: http://127.0.0.1:8080/demo/simpleUpload.jsp

Accept-Language: zh-cn

Content-Type: multipart/form-data; boundary=---------------------------7da1772c5504c6

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)

Host: 127.0.0.1:8080

Content-Length: 184423

Connection: Keep-Alive

Cache-Control: no-cache

Cookie: JsessionID=BD8E58E5BAD9B559C0262077FB5E0B4E

-----------------------------7da1772c5504c6

Content-Disposition: form-data; name="text1"

郑州蜂鸟科技有限公司

-----------------------------7da1772c5504c6

Content-Disposition: form-data; name="text2"

申林

-----------------------------7da1772c5504c6

Content-Disposition: form-data; name="file1"; filename="C:\Documents and Settings\All UsersDocuments\My Pictures\示例图片\Blue hills.jpg"

Content-Type: image/pjpeg

大量二进制数据内容,无法复制 …….

-----------------------------7da1772c5504c6

Content-Disposition: form-data; name="file2"; filename="C:\Documents and Settings\All UsersDocuments\My Pictures\示例图片\Sunset.jpg"

Content-Type: image/pjpeg

大量二进制数据内容,无法复制 …….

-----------------------------7da1772c5504c6

Content-Disposition: form-data; name="file3"; filename="C:\Documents and Settings\All UsersDocuments\My Pictures\示例图片\Water lilies.jpg"

Content-Type: image/pjpeg

大量二进制数据内容,无法复制 …….


从**行,也就是请求行,我们可以看出这是一个post请求。在请求头部部分,我们可以看到这样 一个头部信息:

Content-Type: multipart/form-data; boundary=---------------------------7da1772c5504c6

其中红色部分说明该请求是一个multipart/form-data类型即多媒体类型的请求。蓝色部分boundary的值定义了一个字段分隔界线。

在消息体部分可以看出每个表单字段元素数据之间采用字段分隔界线进行分割,两个分隔界线间的内容称为一个分区,每个分区中的内容包括两部分,一部分是对表单字段元素进行描述的描述头,另外一部分是表单字段元素的主体内容。 


**对比描述头,我们可以很容易区分文本字段和文件字段。不管是文件字段还是文本字段,都有name属性,即该字段作为一个表单域的名字。而文件字段还有filename,即上传文件本身的名字。另外,还有conten-type属性用于指明文件的类型。


每一个表单字段,不管它是文本还是文件,都被封装成 FileItem 对象,我们称之为文件项,当文件项数据内容尺寸小于DiskFileItemFactory 的sizeThreshold 属性设置的临界值时,直接保存在内存中;否则,将数据流以临时文件的形式,保存在 DiskFileItemFactory 的 repository 属性指定的临时目录中。临时文件名形如“upload_00000005(八位或八位以上的数字).tmp”。

FileItem类内部提供了维护临时文件名中的数值不重复的机制,以保证了临时文件名的唯一性。另外,如何保证临时文件能被及时清除,释放宝贵的系统资源,是非常重要的,我们将在后面讲解。 

FileItem类常用的方法:

1.  boolean isFormField()方法

isFormField方法用于判断FileItem类对象封装的数据是一个普通文本表单字段,还是一个文件表单字 段,如果是普通表单字段则返回true,否则返回false。

2.  String getName()方法 

getName方法用于获得文件上传字段中的文件名,即表单字段元素描述头中的filename属性值,如“C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Sunset.jpg”。

如果FileItem类对象对应的是普通表单字段,getName方法将返回null。即使用户没有**网页表单中的文件字段传递任何文件,但只要设置了文件表单字段的name属性,浏览器也会将文件字段的信息传递给服务器,只是文件名和文件内容部分都为空,但这个表单字段仍然对应一个FileItem对象,此时,getName方法返回结果为空字符串"",读者在调用Apache文件上传组件时要注意考虑这个情况。


注意:上面的数据包是**IE提交,所以是完整的路径和名称。如  C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Sunset.jpg。如果是其它浏览 器,如火狐和Chromium,则仅仅是名字,没有路径,如Sunset.jpg。


3.  String getFieldName()方法

getFieldName方法用于返回表单字段元素描述头的name属性值,也是表单标签name属性的值。例 如“name=file1”中的“file1”。

4.  void write(File file)方法

write方法用于将FileItem对象中保存的主体内容保存到某个指定的文件中。如果FileItem对象中的主 体内容是保存在某个临时文件中,该方法顺利完成后,临时文件有可能会被清除。该方法也可将普通 表单字段内容写入到一个文件中,但它主要用途是将上传的文件内容保存在本地文件系统中。

5.  String getString()方法

getString方法用于将FileItem对象中保存的数据流内容以一个字符串返回,它有两个重载的定义形式:

public java.lang.String getString()

public java.lang.String getString(java.lang.String encoding)

throws java.io.UnsupportedEncodingException

前者使用缺省的字符集编码将主体内容转换成字符串,后者使用参数指定的字符集编码将主体内容 转换成字符串。如果在读取普通表单字段元素的内容时出现了中文乱码现象,请调用第二个 getString方法,并为之传递正确的字符集编码名称。

6.  String getContentType()方法

getContentType 方法用于获得上传文件的类型,即表单字段元素描述头属性“Content-Type”的值, 如“image/jpeg”。如果FileItem类对象对应的是普通表单字段,该方法将返回null。

7.  boolean isInMemory()方法

isInMemory方法用来判断FileItem对象封装的数据内容是存储在内存中,还是存储在临时文件中, 如果存储在内存中则返回true,否则返回false。

8.  void delete()方法

delete方法用来清空FileItem类对象中存放的主体内容,如果主体内容被保存在临时文件中, delete方法将删除该临时文件。

尽管当FileItem对象被垃圾收集器收集时会自动清除临时文件,但及时调用delete方法可以更早的 清除临时文件,释放系统存储资源。另外,当系统出现异常时,仍有可能造成有的临时文件被永久 保存在了硬盘中。

9.  InputStream getInputStream()方法

    以流的形式返回上传文件的数据内容。

10. long getSize()方法

返回该上传文件的大小(以字节为单位)。

DiskFileItemFactory类

将请求消息实体中的每一个项目封装成单独的 (FileItem接口的实现) 对象的任务 由 org.apache.commons.fileupload.FileItemFactory 接口的默认实现 org.apache.commons.fileupload.disk.DiskFileItemFactory 来完成。当上传的文件项目比较小时,直接保 存在内存中(速度比较快),比较大时,以临时文件的形式,保存在磁盘临时文件夹(虽然速度慢些,但是内存资源是有限的)。

属性

1) public static final int DEFAULT_SIZE_THRESHOLD 

将文件保存在内存还是磁盘临时文件夹的默认临界值,值为10240,即10kb。

2) PRivate File repository:

用于配置在创建文件项目时,当文件项目大于临界值时使用的临时文件夹,默认采用系统默认的临时文件路径,可以**系统属性 java.io.tmpdir 获取。如下代码:

System.getProperty("java.io.tmpdir");

3) private int sizeThreshold:

用于保存将文件保存在内存还是磁盘临时文件夹的临界值


构造方法

1) public DiskFileItemFactory():

采用默认临界值和系统临时文件夹构造文件项工厂对象。

2) public DiskFileItemFactory(int sizeThreshold,File repository):

采用参数指定临界值和系统临时文件夹构造文件项工厂对象。

FileItem createItem() 方法

根据DiskFileItemFactory相关配置将每一个请求消息实体项目创建 成 实例,并返回。 该方法从来不需要我们亲自调用,FileUpload组件在解析请求时内部使用。

void setSizeThreshold(int sizeThreshold)

Apache文件上传组件在解析上传数据中的每个字段内容时,需要临时保存解析出的数据,以便 在后面进行数据的进一步处理(保存在磁盘特定位置或插入数据库)。因为Java虚拟机默认可以使 用的内存空间是有限的,超出限制时将会抛出“java.lang.OutOfMemoryError”错误。如果上传的文件 很大,例如800M的文件,在内存中将无法临时保存该文件内容,Apache文件上传组件转而采用临时 文件来保存这些数据;但如果上传的文件很小,例如600个字节的文件,显然将其直接保存在内存中 性能会更加好些。

setSizeThreshold方法用于设置是否将上传文件已临时文件的形式保存在磁盘的临界值(以字节 为单位的int值),如果从没有调用该方法设置此临界值,将会采用系统默认值10KB。对应的 getSizeThreshold() 方法用来获取此临界值。

void setRepository(File repository)

setRepositoryPath方法用于设置当上传文件尺寸大于setSizeThreshold方法设置的临界值时,将文件以 临时文件形式保存在磁盘上的存放目录。有一个对应的获得临时文件夹的 File getRespository() 方法。

注意:当从没有调用此方法设置临时文件存储目录时,默认采用系统默认的临时文件路径,可以 **系统属性 java.io.tmpdir 获取。如下代码:

System.getProperty("java.io.tmpdir");

Tomcat系统默认临时目录为“<tomcat安装目录>/temp/”。

ServletFileUpload 

org.apache.commons.fileupload.servlet.ServletFileUpload类是Apache文件上传组件处理文件上传的 核心高级类(所谓高级就是不需要管底层实现,暴露给用户的简单易用的接口)。

使用其 parseRequest(HttpServletRequest) 方法可以将**表单中每一个HTML标签提交的数据封装 成一个FileItem对象,然后以List列表的形式返回。使用该方法处理上传文件简单易用。

如果你希望进一步提高新能,你可以采用 getItemIterator 方法,直接获得每一个文件项的数据输 入流,对数据做直接处理。

在使用ServletFileUpload对象解析请求时需要根据DiskFileItemFactory对象的属性 sizeThreshold(临 界值)和repository(临时目录) 来决定将解析得到的数据保存在内存还是临时文件中,如果是临时 文件,保存在哪个临时目录中?。

所以,我们需要在进行解析工作前构造好DiskFileItemFactory对象,**ServletFileUpload对象的构造方法或setFileItemFactory()方法设置 ServletFileUpload对象的 fileItemFactory属性。

ServletFileUpload继承结构:

java.lang.Object

|—org.apache.commons.fileupload.FileUploadBase

     |—org.apache.commons.fileupload.FileUpload

|—org.apache.commons.fileupload.servlet.ServletFileUpload

构造方法:

1) public ServletFileUpload():

构造一个未初始化的实例,需要在解析请求之前先调用setFileItemFactory()方法设置 fileItemFactory属性。

2) public ServletFileUpload(FileItemFactory fileItemFactory):

构造一个实例,并根据参数指定的FileItemFactory 对象,设置 fileItemFactory属性。

ServletFileUpload类常用方法:

1. public void setSizeMax(long sizeMax)方法

setSizeMax方法继承自FileUploadBase类,用于设置请求消息实体内容(即所有上传数据)的**大 尺寸限制,以防止客户端恶意上传超大文件来浪费服务器端的存储空间。其参数是以字节为单位的 long型数字。

在请求解析的过程中,如果请求消息体内容的大小超过了setSizeMax方法的设置值,将会抛出 FileUploadBase内部定义的SizeLimitExceededException异常(FileUploadException的子类)。如:

org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException:  the request was rejected because its size (1649104) exceeds the configured  maximum (153600)

该方法有一个对应的读方法:public long getSizeMax()方法。

2. public void setFileSizeMax(long fileSizeMax)方法

setFileSizeMax方法继承自FileUploadBase类,用于设置单个上传文件的**大尺寸限制,以防止客户 端恶意上传超大文件来浪费服务器端的存储空间。其参数是以字节为单位的long型数字。该方法有一个 对应的读方法:public long geFileSizeMax()方法。

在请求解析的过程中,如果单个上传文件的大小超过了setFileSizeMax方法的设置值,将会抛出 FileUploadBase内部定义的FileSizeLimitExceededException异常(FileUploadException的子类)。如:

org.apache.commons.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file1 exceeds its  maximum permitted size of 51200 characters.

3. public List parseRequest(javax.servlet.http.HttpServletRequest req)

parseRequest 方法是ServletFileUpload类的重要方法,它是对HTTP请求消息体内容进行解析的入口 方法。它解析出FORM表单中的每个字段的数据,并将它们分别包装成独立的FileItem对象,然后将这 些FileItem对象加入进一个List类型的集合对象中返回。

该方法抛出FileUploadException异常来处理诸如文件尺寸过大、请求消息中的实体内容的类型不 是“multipart/form-data”、IO异常、请求消息体长度信息丢失等各种异常。每一种异常都是 FileUploadException的一个子类型。

4. public FileItemIterator getItemIterator(HttpServletRequest request)

getItemIterator方法和parseRequest 方法基本相同。但是getItemIterator方法返回的是一个迭代 器,该迭代器中保存的不是FileItem对象,而是FileItemStream 对象,如果你希望进一步提高新能, 你可以采用 getItemIterator 方法,直接获得每一个文件项的数据输入流,做底层处理;如果性能不 是问题,你希望代码简单,则采用parseRequest方法即可。 

5. public stiatc boolean isMultipartContent(HttpServletRequest req)

isMultipartContent方法方法用于判断请求消息中的内容是否是“multipart/form-data”类型,是则返 回true,否则返回false。isMultipartContent方法是一个静态方法,不用创建ServletFileUpload类的实例对 象即可被调用。

6. getFileItemFactory()和setFileItemFactory(FileItemFactory)方法

方法继承自FileUpload类,用于设置和读取fileItemFactory属性。

7. public void setProgressListener(ProgressListener pListener)

设置文件上传进度监听器。关于监听器的具体内容,将在后面学习。该方法有一个对应的读取 方法:ProgressListener getProgressListener()。

8.public void setHeaderEncoding()方法

在文件上传请求的消息体中,除了普通表单域的值是文本内容以外,文件上传字段中的文件路 径名也是文本,在内存中保存的是它们的某种字符集编码的字节数组,Apache文件上传组件在读取 这些内容时,必须知道它们所采用的字符集编码,才能将它们转换成正确的字符文本返回。

setHeaderEncoding方法继承自FileUploadBase类,用于设置上面提到的字符编码。如果没有设置, 则对应的读方法getHeaderEncoding()方法返回null,将采用HttpServletRequest设置的字符编码,如果 HttpServletRequest的字符编码也为null,则采用系统默认字符编码。可以**一下语句获得系统默认 字符编码:

System.getProperty("file.encoding"));


相关推荐:


苏州JAVA培训   苏州JAVA培训班   苏州JAVA培训机构

苏州其然软件开发培训

进入机构首页
苏州其然软件开发

上课地址:苏州市昆山市震川西路111号名仕大厦

预约试听

倒计时:
11 : 58 : 41
其他试听课程
机构全部课程

学校课程导航