Java EE软件工程师
认证考试
面试题大全
目 录
第一部分 HTML/CSS/JavaScript 1
1. HTML含义和版本变化... 1
2. 什么是锚链接... 1
3. HTML字符实体的作用及其常用字符实体... 1
4. HTML表单的作用和常用表单项类型... 2
5. 表格、框架、div三种HTML布局方式的特点... 2
6. form中input设置为readonly和disabled的区别... 2
7. CSS的定义和作用... 2
8. CSS2常用选择器类型及其含义... 3
9. 引入样式的三种方式及其优先级别... 3
10. 盒子模型... 4
11. JavaScript语言及其特点... 4
12. JavaScript常用数据类型有哪些... 4
13. Javascript的常用对象有哪些... 4
14. DOM和BOM及其关系... 5
15. JavaScript中获取某个元素的三种方式... 5
16. JavaScript中的三种弹出式消息提醒命令是什么?. 5
17. setTimeout与setInterval 的区别... 5
18. JavaScript操作CSS的两种方式... 5
第二部分 Servlet/JSP/JSTL-EL. 6
1. 静态网页和动态网页的联系和区别... 6
2. JSP/ASP/PHP的比较... 6
3. CGI/Servlet/JSP的比较... 7
4. Tomcat/Jboss/WebSphere/WebLogic的作用和特点... 8
5. B/S和C/S的含义及其区别... 8
6. 容器的理解... 9
7. HTTP协议工作原理及其特点... 9
8. get和post的区别... 10
9. 如何解决表单提交的中文乱码问题... 10
10. 绝对路径、根路径、相对路径的含义及其区别... 10
11. 如何现实servlet的单线程模式... 11
12. Servlet的生命周期... 11
13. session和cookie的区别... 12
14. 转发和重定向的区别... 12
15. JSP的执行过程... 13
16. JSP的9个内置对象及其含义... 13
17. JSP动作有哪些,简述作用?. 14
18. JSP中动态INCLUDE与静态INCLUDE的区别... 14
19. page/request/session/application作用域区别... 15
20. JSP和Servlet的区别和联系... 15
第三部分 连接池/过滤器/监听器/jQuery/Ajax. 16
1. 为什么要使用连接池?... 16
2. 数据库连接池的原理。... 16
3. 谈谈过滤器原理及其作用?. 17
4. 谈谈监听器作用及其分类?. 17
5. jQuery相比JavaScript的优势在哪里... 18
6. DOM对象和jQuery对象的区别及其转换... 18
7. jQuery中$的作用主要有哪些... 18
8. Ajax含义及其主要技术... 18
9. Ajax的工作原理... 19
10. JSON及其作用... 19
第四部分 项目开发... 20
1. MVC模式及其优缺点... 20
2. EJB与JavaBean的区别?... 21
3. Oracle完成分页功能的三层子查询语句及其含义?... 21
4. MVC模式完成分页功能的基本思路是什么?... 21
5. 文件上传组件Common-fileUpload的常用类及其作用?... 21
第一部分 HTML/CSS/JavaScript
1. HTML含义和版本变化
HTML含义:
Hyper Text Markup Language 超文本标记语言,是一种用来制作“网页”的简单标记语言;用HTML编写的超文本文档称为HTML文档,HTML文档的扩展名是html或者htm
版本变化:
1)
HTML1.0——在1993年6月作为IETF工作草案发布(并非标准)
2)
HTML
2.0——1995年11月作为RFC 1866发布
3)
HTML
3.2——1997年1月14日,W3C推荐标准
4)
HTML
4.0——1997年12月18日,W3C推荐标准
5)
HTML
4.01(微小改进)——1999年12月24日,W3C推荐标准
6)
HTML
5—2014年10月28日,W3C推荐标准HTML文档结构
2. 什么是锚链接
锚链接是带有文本的超链接。可以跳转到页面的某个位置,适用于页面内容较多,超过一屏的场合
。分为页面内的锚链接和页面间的锚链接 。
例如:
<a name=”1F”>1F</a><a
name=”2F”>2F</a>
<a href=”#2F”>跳转到2F标记位置</a>
说明:
1.在标记位置利用a标签的name属性设置标记。
2.在导航位置通过a标签的href属性用#开头加name属性值即可跳转锚点位置。
3. HTML字符实体的作用及其常用字符实体
有些字符,比如说“<”字符,在HTML中有特殊的含义,因此不能在文本中使用。想要在HTML中显示一个小于号“<”,需要用到字符实体:<或者<
字符实体拥有三个部分:一个and符号(&),一个实体名或者一个实体号,最后是一个分号(;)
常用字符实体:
显示结果 |
描述 |
实体名 |
实体号 |
空格 |
|
|
|
< |
小于 |
< |
< |
> |
大于 |
> |
> |
& |
and符号 |
& |
& |
' |
单引号 |
' |
' |
" |
引号 |
" |
" |
£ |
英镑 |
£ |
£ |
¥ |
人民币元 |
¥ |
¥ |
§ |
章节 |
§ |
§ |
© |
版权 |
© |
© |
4. HTML表单的作用和常用表单项类型
表单的作用:
利用表单可以收集客户端提交的有关信息。
常用表单项类型:
input标签type属性 |
功能 |
input标签type属性 |
功能 |
text |
单行本框 |
reset |
重置按钮 |
password |
密码框 |
submit |
提交按钮 |
radio |
单选按钮 |
textarea |
文本域 |
checkbox |
复选框 |
select |
下拉框 |
button |
普通按钮 |
hidden |
隐藏域 |
5. 表格、框架、div三种HTML布局方式的特点
优点 |
缺点 |
应用场合 |
|
表格 |
方便排列有规律、结构均匀的内容或数据 |
产生垃圾代码、影响页面下载时间、灵活性不大难于修改 |
内容或数据整齐的页面 |
框架 |
支持滚动条、方便导航 节省页面下载时间等 |
兼容性不好,保存时不方便、应用范围有限 |
小型商业网站、论坛后台管理 |
Div |
代码精简、提高页面下载速度、表现和内容分离 |
比较灵活、难于控制 |
复杂的不规则页面、业务种类较多的大型商业网站 |
6. form中input设置为readonly和disabled的区别
readonly |
disabled |
|
有效对象 |
.只针对type为text/password有效 |
对所有表单元素有效 |
表单提交 |
当表单元素设置readonly后,表单提交能将该表单元素的值传递出去。 |
当表单元素设置disabled后,表单提交不能将该表单元素的值传递出去。 |
7. CSS的定义和作用
CSS的定义:CSS是Cascading Style Sheets(层叠样式表)的简称。
CSS是一系列格式规则,它们控制网页内容的外观。CSS简单来说就是用来美化网页用的。
CSS的具体作用包括:
1)
使网页丰富多彩,易于控制。
2)
页面的精确控制,实现精美、复杂页面
。
3)
样式表能实现内容与样式的分离,方便团队开发。
4)
样式复用、方便网站的后期维护。
8. CSS2常用选择器类型及其含义
选择器名称 |
案例 |
语法格式 |
标签选择器 |
h3{font-size:24px;font-family:"隶书“; } <h3>JSP</h3> |
元素标签名{样式属性} |
类选择器 |
.red <li |
. 元素标签class属性值{样式属性} |
ID选择器 |
#p1 {background-color:#0F0;} <p id="p1">content</p> |
#元素标签id属性值{样式属性} |
包含选择器 |
div <div> <h3>CSS层叠样式表</h3> </div> |
父元素标签 子元素标签{ 样式属性 } |
子选择器 |
div>ul{color:blue;} <div> <ul> <li>测试1 <ol> <li>嵌套元素</li> <li>嵌套元素</li> <li>嵌套元素</li> <li>嵌套元素</li> </ol> </li> <li>测试1</li> <li>测试1</li> </ul> </div> |
父元素标签名>子元素名{ 样式属性 } |
9. 引入样式的三种方式及其优先级别
三种引用方式:
1. 外部样式表(存放.css文件中)
不需要style标签
<link rel=”stylesheet” href=”引用文件地址” />
2. 嵌入式样式表
<style type=“text/css”>
p{color:red;}
</style>
3.内联样式
标签属性名为style
<p style=“color:red;”></p>
优先级级别:在一个页面上,自上而下,后定义优先级高。
10.
盒子模型
盒子模型类似于生活中的盒子,具有4个属性,外边距,内边距,边框,内容。
外边距:margin,用于设置元素和其他元素之间的距离。
内边距:padding,用于设置元素内容和边框之间的距离。
边框:border,用于设置元素边框粗细,颜色,线型。
内容:width,height,用于设置元素内容显示的大小。
例如:
<style>
body{
margin: 0; /*取消body默认的外边距*/
}
#img1{
width:200px; /*设置图片的宽度*/
border: 2px solid black; /*设置图片边框*/
margin: 5px;
/*设置图片外边距(表示该图片与其他图片的距离为5px)*/
padding:10px; /*设置图片与边框之间的距离*/
}
#img2{
height: 200px; /* 设置图片的高度*/
border: 2px solid black; /*设置图片的边框*/
margin: 5px; /*设置图片外边距*/
padding: 20px; /*设置图片与边框之间的距离*/
}
</style>
<img id="img1"
src="img/2.jpg" />
<img id="img2"
src="img/lss.jpg" />
11.
JavaScript语言及其特点
Javascript一种基于对象(object-based)和事件驱动(Event Driven)的简单的并具有安全性能的脚本语言。特点:
1)
解释性: JavaScript不同于一些编译性的程序语言,例如C、C++等,它是一种解释性的程序语言,它的源代码不需要经过编译,而直接在浏览器中运行时被解释。
2)
基于对象: JavaScript是一种基于对象的语言。这意味着它能运用自己已经创建的对象。因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。
3)
事件驱动:JavaScript可以直接对用户或客户输入做出响应,无须经过Web服务程序。它对用户的响应,是以事件驱动的方式进行的。所谓事件驱动,就是指在主页中执行了某种操作所产生的动作,此动作称为“事件”。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事件发生后,可能会引起相应的事件响应。
4)
跨平台:JavaScript依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行。
12.
JavaScript常用数据类型有哪些
数值型:整数和浮点数统称为数值。例如85或3.1415926等。
字符串型:由0个,1个或多个字符组成的序列。在JavaScript中,用双引号或单引号括起来表示,如“您好”、‘学习JavaScript’等。
不区分单引号、双引号。
逻辑(布尔)型:用true或false来表示。
空(null)值:表示没有值,用于定义空的或不存在的引用。
要注意,空值不等同于空字符串""或0。
未定义(undefined)值:它也是一个保留字。表示变量虽然已经声明,但却没有赋值。
除了以上五种基本的数据类型之外,JavaScript还支持复合数据类型,包括对象和数组两种。
13.
Javascript的常用对象有哪些
常用对象包括日期对象Date,字符串对象String,数组对象Array
//获取并显示系统当前时间
function testDate(){
var date = new Date();
var fmtDate =
date.getFullYear()+"-"+(date.getMonth()+1)+
"-"+date.getDate()+"-"+date.getHours()
+":"+date.getMinutes()+":"+date.getSeconds();
alert(fmtDate);
}
//获取出’sxt’的下标位置
function testString(){
var str = 'welcome to beijingsxt';
alert(str.indexOf('sxt'));
}
//遍历数组信息
function testArray(){
var arr = new Array('a',123,'c',true,'e');
for(var item in arr){
document.write(arr[item]+" ");
}
}
14.
DOM和BOM及其关系
BOM浏览器对象模型,由一系列对象组成,是访问、控制、修改浏览器的属性的方法。
DOM文档对象模型,由一系列对象组成,是访问、检索、修改XHTML文档内容与结构的标准方法。
关系:
– BOM描述了与浏览器进行交互的方法和接口
– DOM描述了处理网页内容的方法和接口
– DOM属于BOM的一个属性
15.
JavaScript中获取某个元素的三种方式
1)
getElementById( ) :返回一个节点对象
2)
getElementsByName( ):返回多个(节点数组)
3)
getElementsByTagName( ) :返回多个(节点数组)
16.
JavaScript中的三种弹出式消息提醒命令是什么?
1)
window.alert() 显示一个提示信息
2) window.confirm()
显示一个带有提示信息、确定和取消按钮的对话框
3) window.prompt()显示可提示用户输入的对话框
17.
setTimeout与setInterval 的区别
setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。
不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。
window.setTimeout("function",time);//设置一个超时对象,只执行一次,无周期
window.setInterval("function",time);//设置一个超时对象,周期='交互时间'
18.
JavaScript操作CSS的两种方式
第一种方式:操作元素的属性(对象.style.样式名=样式值;)
//改变直接样式
var
child2 = document.createElement("div");
child2.innerHTML
= "child2";
child2.style.fontWeight
= "bold";
parent.appendChild(child2);
第二种方式:操作元素的类(对象.className=类;)
例如:
var parent =
document.getElementById("parent");
//改变className
var child0
= document.createElement("div");
child0.innerHTML
= "child0";
child0.className
= "newDiv";
parent.appendChild(child0);
第二部分 Servlet/JSP/JSTL-EL
1. 静态网页和动态网页的联系和区别
联系:
1)静态网页是网站建设的基础,静态网页和动态网页都要使用到HTMl语言。
2)静态网页是相对于动态网页而言,指没有后台数据库、不含程序和不可交互的网页、是标准的HTML文件,它的文件扩展名是.htm或.html。你编的是什么它显示的就是什么、不会有任何改变。
3)静态网页和动态网页之间并不矛盾,为了网站适应搜索引擎检索的需要,动态网站可以采用静动结合的原则,适合采用动态网页的地方用动态网页,如果必要使用静态网页,则可以考虑用静态网页的方法来实现,在同一个网站上,动态网页内容和静态网页内容同时存在也是很常见的事情。
区别:
1)程序是否在服务器端运行,是重要标志。在服务器端运行的程序、网页、组件,属于动态网页,它们会随不同客户、不同时间,返回不同的网页,例如ASP、PHP、JSP、ASP.net、CGI等。运行于客户端的程序、网页、插件、组件,属于静态网页,例如html页、Flash、javascript、VBscript等等,它们是永远不变的。
2)编程技术不同。静态网页和动态网页主要根据网页制作的语言来区分。静态网页使用语言:HTML。
动态网页使用语言:HTML+ASP 或 HTML+PHP 或 HTML+JSP 等其它网站动态语言。
3)被搜索引擎收录情况不同。由于编程技术不容,静态网页是纯粹HTML格式的网页,页面内容稳定,不论是网页是否被访问,页面都被保存在网站服务器上,很容易被搜索引擎收录。而动态网页的内容是当用户点击请求时才从数据库中调出返回给用户一个网页的内容,并不是存放在服务器上的独立文件,相比较于静态网页而言,动态网页很难被搜索引擎收录。
4)用户访问速度不同。用户访问动态网页时,网页在获得搜索指令后经过数据库的调查匹配,再将与指令相符的内容传递给服务器,通过服务器的编译将网页编译成标准的HTML代码,从而传递给用户浏览器,多个读取过程大大降低了用户的访问速度。而静态网页不同,由于网页内容直接存取在服务器上,省去了服务器的编译过程,用户访问网页速度很快。
5)制作和后期维护工作量不同。动态网页的设计以数据库技术为基础,可以实现多种功能,降低了网站维护的工作量。而静态网页由于没有数据库的支持,网页内容更改时需要直接修改代码,在网站内容制作和维护中,所需的工作量更大。
动态网页与静态网页各有特点,网站设计师在网页设计时,主要根据网站的功能需求和网站内容多少选择不同网页。如,网站包含信息量太大时,就需要选择动态网页,反之,则选择静态网页。
2. JSP/ASP/PHP的比较
ASP(Active Server Pages),JSP(JavaServer
Pages),PHP(Hypertext Preprocessor)是目前主流的三种动态网页语言。
ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和Visual BASIC类似,可以像SSI(Server Side Include)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库。
JSP是一个简化的Servlet,它是由Sun公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML中插入Java程序段和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。
用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
ASP优点:无需编译、易于生成、独立于浏览器、面向对象、与任何ActiveX scripting 语言兼容、源程序码不会外漏。
缺点:
1) Windows本身的所有问题都会一成不变的也累加到了它的身上。安全性、稳定性、跨平台性都会因为与NT的捆绑而显现出来。
2) ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于Windows NT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,那么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失。
3) 还无法完全实现一些企业级的功能:完全的集群、负载均横。
PHP优点:
1)一种能快速学习、跨平台、有良好数据库交互能力的开发语言。
2)简单轻便,易学易用。
3) 与Apache及其它扩展库结合紧密。
缺点:
1) 数据库支持的极大变化。
2) 不适合应用于大型电子商务站点。
JSP优点:
1) 一处编写随处运行。
2) 系统的多台平支持。
3) 强大的的可伸缩性。
4) 多样化和功能强大的开发工具支持。
缺点:
1)
与ASP一样,Java的一些优势正是它致命的问题所在。
2) 开发速度慢
3. CGI/Servlet/JSP的比较
CGI(Common Gateway Interface),通用网关接口,是一种根据请求信息动态产生回应内容的技术。
通过CGI,Web 服务器可以将根据请求不同启动不同的外部程序,并将请求内容转发给该程序,在程序执行结束后,将执行结果作为回应返回给客户端。也就是说,对于每个请求,都要产生一个新的进程进行处理。
Servlet
是在服务器上运行的小程序。在实际运行的时候Java Servlet与Web服务器会融为一体。与CGI不同的是,Servlet对每个请求都是单独启动一个线程,而不是进程。这种处理方式大幅度地降低了系统里的进程数量,提高了系统的并发处理能力。
比较:
1)JSP从本质上说就是Servlet。JSP技术产生于Servlet之后,两者分工协作,Servlet侧重于解决运算和业务逻辑问题,JSP则侧重于解决展示问题。
2) 与CGI相比,Servlet效率更高。Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁。而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet 。
3)与CGI相比,Servlet更容易使用,功能更强大,具有更好的可移植性,更节省投资。在未来的技术发展过程中,Servlet有可能彻底取代CGI。
4. Tomcat/Jboss/WebSphere/WebLogic的作用和特点
作用:
Tomcat:目前应用非常广泛的免费web服务器,支持部分j2ee。
JBoss:JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
WebSphere:是IBM集成软件平台。可做web服务器,WebSphere提供了可靠、灵活和健壮的集成软件。
Weblogic:是美国bea公司出品的一个基于j2ee架构的中间件。BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。
特点(区别):
1)价位不同:JBoss与Tomcat的是免费的;WebLogic与WebSphere是收费的,而且价格不菲。
2)开源性不同:JBoss与Tomcat的是完全开源的,而其他两个不是。
3)对技术的支持:Tomcat不支持EJB,JBoss是实现了EJB容器,再集成了Tomcat。
WebLogic与WebSphere都是对业内多种标准的全面支持,包括EJB、JSB、JMS、JDBC、XML和WML,使Web应用系统实施更简单,且保护投资,同时也使基于标准的解决方案的开发更加简便。
4)扩展性的不同:WebLogic和WebSphere都是以其高扩展的架构体系闻名于业内,包括客户机连接的共享、资源
pooling以及动态网页和EJB组件群集。
5)应用范围的区别:Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。WebLogic和WebSphere是商业软件,功能齐全强大,主要应用于大型企业的大型项目。JBOSS 主要应用于EJB服务的中小型公司。
6)安全性问题区别:因为JBoss和Tomcat都是开源的,所以它们的安全性相对来说比较低,万一应用服务器本身有什么漏洞,你是没办法向Apache索赔的。而WebLogic和WebSphere其容错、系统管理和安全性能已经在全球数以千记的关键任务环境中得以验证。
5. B/S和C/S的含义及其区别
C/S结构,即Client/Server(客户机/服务器)结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可充分利用两端硬件环境优势。早期软件系统多以此作为首选设计标准。
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,节约了开发成本,便于软件维护。
区别
1、C/S是建立在局域网的基础上的。B/S是建立在广域网的基础上的,但并不是说B/S结构不能在局域网上使用。
2、B/S业务扩展简单方便,通过增加页面即可增加服务器功能。C/S的客户端还需要安装专用的客户端软件,不利于扩展。
3、B/S维护简单方便。开发、维护等几乎所有工作也都集中在服务器端,当企业对网络应用进行升级时,只需更新服务器端的软件就可以,这减轻了异地用户系统维护与升级的成本。。
4、B/S响应速度不及C/S;
5、B/S用户体验效果不是很理想
6. 容器的理解
容器也是 java 程序,它的主要作用是为应用程序提供运行环境。容器用来接管安全性、并发性、事务处理、交换到辅助存储器和其它服务的责任
以tomcat为例:Tomcat是一个后台服务进程,其它的servlet(相当于DLL)是在Tomcat容器内运行,Broswer只与Tomcat通迅;
Tomcat接受browser的请求,经过一系列动作(如果是静态网页,那么装载,按http协议形成响应流;如果是动态的如JSP,那就要调用JDK
中的servlet.jsp接口,解释形成静态网页,按http协议生成响应流发送回browser)后,形成静态网页,返回响应。
7. HTTP协议工作原理及其特点
超文本传输协议(HTTP:Hypertext Transport Protocol)是万维网应用层的协议,它通过两个程序实现:一个是客户端程序(各种浏览器),另一个是服务器
(常称Web服务器)。这两个通常运行在不同的主机上,通过交换报文来完成网页请求和响应,报文可简单分为请求报文和响应报文。
工作原理(流程):
客户机与服务器建立连接后,浏览器可以向web服务器发送请求并显示收到的网页,当用户在浏览器地址栏中输入一个URL或点击一个超连接时,浏览器就向服务器发出了HTTP请求,请求方式的格式为:统一资源标识符、协议版本号,后边是MIME(Multipurpose Internet Mail Extensions)信息包括请求修饰符、客户机信息和可能的内容。该请求被送往由URL指定的WEB服务器,WEB服务器接收到请求后,进行相应反映,其格式为:一个状态行包括信息的协议版本号、一个成功或错误的代码,后边服务器信息、实体信息和可能的内容。即以HTTP规定的格式送回所要求的文件或其他相关信息,再由用户计算机上的浏览器负责解释和显示。
特点:
1)支持客户/服务器模式。
2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
8. get和post的区别
1)
Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
2)
Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
3)
Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
4)
Get执行效率却比Post方法好。Get是form提交的默认方法。
9. 如何解决表单提交的中文乱码问题
1)设置页面编码,若是jsp页面,需编写代码
<%@page
language="java" pageEncoding="UTF-8"
contentType="text/html;charset=UTF-8" %>
若是html页面,在网页头部(<head></head>)中添加下面这段代码
<meta
http-equiv="Content-Type" content="text/html;
charset=utf-8" />
2)将form表单提交方式变为post方式,即添加method="post";)在Servlet类中编写代码request.setCharacterEncoding("UTF-8"),而且必须写在第一行。
3)如果是get请求,在Servlet类中编写代码
byte
[] bytes = str.getBytes("iso-8859-1");
String cstr =
new String(bytes,"utf-8");
或者直接修改Tomcat服务器配置文件server.xml增加内容:
URIEncoding="utf-8"
10. 绝对路径、根路径、相对路径的含义及其区别
绝对路径指对站点的根目录而言某文件的位置,相对路径指以当前文件所处目录而言某文件的位置,相对路径-以引用文件之网页所在位置为参考基础,而建立出的目录路径。绝对路径-以Web站点根目录为参考基础的目录路径。
先给出一个网站结构图做实例加深理解,A网站(域名为http://www.a.com):/include/a-test.html,/img/a-next.jpg;B网站(域名为http://www.b.com):/include/b-test.html,/img/b-next.jpg。
相对路径是从引用的网页文件本身开始构建的,如果在A网站中的a-test.html中要插入图片a-next.jpg,可以这样做:<img
src="../img/a-next.jpg" />,重点是img前面的../,表示从html处于的include开始起步,输入一个../表示回到上面一级父文件夹下,然后再接着img/表示又从父级文件夹下的img文件开始了,最后定位img下面的next.jpg。
根路径是从网站的最底层开始起,一般的网站的根目录就是域名下对应的文件夹,就如D盘是一个网站,双击D盘进入到D盘看到的就是网站的根目录,这种路径的链接样式是这样的:如果在A网站中的a-test.html中要插入图片a-next.jpg,可以这样做:<img
src="/img/a-next.jpg" >,以/开头表示从网站根目录算起,找到根目录下面的img文件夹下的next.jpg。
绝对路径就很好理解了,这种路径一般带有网站的域名,如果在A网站中的a-test.html中要插入图片a-next.jpg,需要这样这样写:<img
src="http://www.a.com/img/a-next.jpg" >,将图片路径上带有了域名信息,再打个比方:如果在A网站中的a-test.html中要插入B网站的图片b-next.jpg,就需要这样写:<img
src="http://www.b.com/img/b-next.jpg" >,这种方法适用与在不同网站之间插入外部网站的图片。
11. 如实现servlet的单线程模式
实现servlet的单线程的jsp命令是: <%@ page isThreadSafe=”false”%>。默认isThreadSafe值为true。
属性isThreadSafe=false模式表示它是以Singleton模式运行,该模式implements了接口SingleThreadMode, 该模式同一时刻只有一个实例,不会出现信息同步与否的概念。若多个用户同时访问一个这种模式的页面,那么先访问者完全执行完该页面后,后访问者才开始执行。
属性isThreadSafe=true模式表示它以多线程方式运行。该模式的信息同步,需访问同步方法(用synchronized标记的)来实现。
一般格式如下:
public while(...) { this.wait(); } this.notifyAll(); } |
12. Servlet的生命周期
1)
加载:在下列时刻加载 Servlet:(1)如果已配置自动加载选项,则在启动服务器时自动加载 (web.xml中设置<load-on-start>);(2)在服务器启动后,客户机首次向 Servlet 发出请求时;(3)重新加载 Servlet 时(只执行一次)
2)
实例化:加载 Servlet 后,服务器创建一个 Servlet 实例。(只执行一次)
3)
初始化:调用 Servlet 的 init() 方法。在初始化阶段,Servlet 初始化参数被传递给 Servlet 配置对象ServletConfig。 (只执行一次)
4)
请求处理:对于到达服务器的客户机请求,服务器创建针对此次请求的一个“请求”对象和一个“响应”对象。服务器调用 Servlet 的 service() 方法,该方法用于传递“请求”和“响应”对象。service() 方法从“请求”对象获得请求信息、处理该请求并用“响应”对象的方法以将响应传回客户机。service() 方法可以调用其它方法来处理请求,例如 doGet()、doPost() 或其它的方法。(每次请求都执行该步骤)
5)
销毁:当服务器不再需要 Servlet, 或重新装入 Servlet 的新实例时,服务器会调用 Servlet 的 destroy() 方法。(只执行一次)
13. session和cookie的区别
1)
联系
http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能在多次请求之间共享信息呢(比如实现网上商店中的购物车)?session和cookie就是为了解决HTTP协议的无状态而采用的两种解决方案。
2)
原理(通过比喻形象说明,真正原理自己总结)
a)
Cookie:发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。
【卡上记录所有信息,而店家只认卡不认人。】
b)
Session:发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。
【只记用户ID,而ID的详细记录放在店家的数据库里;每次凭ID检索服务器的记录。】
3)
区别
a)
cookie数据存放在客户的浏览器上,session数据放在服务器上(sessionid可以通过cookie保存在客户端,也可以使用URL重写方式)。
b)
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
c)
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE
d)
单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
e)
个人建议:将登陆信息等重要信息存放为SESSION;其他信息如需保留,可放在COOKIE
14. 转发和重定向的区别
转发是在服务端直接做的事情,是对客户端的同一个request进行传递,浏览器并不知道。重定向是由浏览器来做的事情。重定向时,服务端返回一个response,里面包含了跳转的地址,由浏览器获得后,自动发送一个新request。转发像呼叫转移或者110报警中心,重定向似114查号台。
a)
区别1:跳转效率的不同
转发效率相对高;重定向效率相对低
b)
区别2:实现语句不同
转发 request.getRequestDispatcher("xxxx").forward(request,response)
;
重定向 response.sendRedirect("xxxx")
c)
区别3:是否共有同一个request的数据
转发源组件与目标组件共有同一个request数据
重定向源组件与目标组件不共有同一个request数据(可使用session共有数据)
d)
区别4:浏览器URL地址的不同
转发后浏览器URL地址保持不变(源组件地址)
重定向后浏览器URL地址改变为重定向后的地址(目标组件地址)
e)
区别5:"/"路径的含义不同
转发时"/"代表当前项目的根路径 ;重定向时"/"代表当前服务器的根路径
f)
区别6:跳转范围的不同
只能转发到同一应用中的URL(默认) ;可以重定向任何服务器、任何应用的URL
g)
区别7:刷新是否导致重复提交
转发会导致重复提交(可以通过同步令牌解决);重定向不会导致重复提交
h)
区别8:是否经过过滤器
转发不经过过滤器(默认情况);重定向经过过滤器
15. JSP的执行过程
在JSP运行过程中,首先由客户端发出请求,Web服务器接收到请求后,如果是第一次访问某个jsp页面,Web服务器对它进行以下3个操作。
1)
翻译:由.jsp变为.java,由JSP引擎实现。
2)
编译:由.java变为.class,由 Java编译器实现。
3)
执行:由.class变为.html,用Java虚拟机执行编译文件,然后将执行结果返回给Web服务器,并最终返回给客户端
如果不是第一次访问某个JSP页面,则只执行第三步。所以第一次访问JSP较慢。
16. JSP的9个内置对象及其含义
1)
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息
2)
response表示HttpServletResponse对象,并提供了几个用于设置浏览器的响应的方法
3)
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
4)
pageContext表示一个javax.servlet.jsp.PageContext对象。是用于方便存取各种范围的名字空间
5)
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
6)
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
7)
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
8)
page表示从该页面产生的一个servlet实例
9)
exception:exception对象用来处理错误异;如果使用exception,则必须指定page中的isErrorPage为true
17. JSP动作有哪些,简述作用?
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
18. JSP中动态INCLUDE与静态INCLUDE的区别
回答这个问题得先清楚Jsp的执行过程。第一次访问该jsp页面时,需经3个步骤。即翻译(由.jsp变为.java)--->编译(由.java变为.class)--->执行(由.class变为.html)。若不是第一次访问,只需经过步骤中的执行过程就行。
区别:
1)使用语法不同。动态INCLUDE用jsp:include动作实现,称为行动元素。
如:<jsp:include
page="included.jsp" flush="true" />
静态INCLUDE用include伪码实现,称为指令元素。
如:<%@
include file="included.html" %>。
2)执行时间不同。<jsp:include page="included.jsp" flush="true"
/>在请求处理阶段执行;会先解析所要包含的页面(included.jsp),解析后在和主页面放到一起显示;先编译,后包含。<%@ include file="included.html" %>在翻译阶段执行;不会解析所要包含的页面(included.html),先合成一个文件后再转换成servlet,即先包含,后统一编译。
3)访问时产生文件个数不同。<jsp:include page="included.jsp" flush="true"
/>共产生2个java文件和2个class文件。<%@
include file="included.html" %>共产生1个java文件和1个class文件。
4)引入内容不同。动态INCLUDE主要是对动态页面的引入,它总是会检查所引入的页面的变化,如果被引入的文件内容在请求间发生变化,则下一次请求包含<jsp:include>动作的jsp时,将显示被引入文件的新内容。静态INCLUDE适用于引入静态页面(.html),include指令它不会检查所引入的页面的变化,在jsp页面转换成servlet前与当前jsp文件融合在一起,之后与主页面一起显示,常使用静态INCLUDE引入导航条、页脚等。
19. page/request/session/application作用域区别
page:当前页面范围
request:当前页面范围+转发页面(forward)+包含页面(include)
session:当前会话:session在以下几种情况下失效
1)
销毁session:Session.invalidate();
2)
超过最大非活动间隔时间
3)
手动关闭浏览器(session并没有立刻失效,因为服务器端session仍旧存在,超过最大非活动间隔时间后真正失效)
application:当前应用;服务器重新启动前一直有效
20. JSP和Servlet的区别和联系
区别:
1)
JSP是在HTML代码里写JAVA代码,框架是HTML;而Servlet是在JAVA代码中写HTML代码,本身是个JAVA类。
2)
JSP使人们把显示和逻辑分隔成为可能,这意味着两者的开发可并行进行;而Servlet并没有把两者分开。
3)
Servlet独立地处理静态表示逻辑与动态业务逻辑.这样,任何文件的变动都需要对此服务程序重新编译;JSP允许用特殊标签直接嵌入到HTML页面, HTML内容与JAVA内容也可放在单独文件中,HTML内容的任何变动会自动编译装入到服务程序.
4)
Servlet需要在web.xml中配置,而JSP无需配置。
5)
目前JSP主要用在视图层,负责显示,而Servlet主要用在控制层,负责调度
联系:
1)
都是Sun公司推出的动态网页技术。
2)
先有Servlet,针对Servlet缺点推出JSP。JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例——JSP页面由系统翻译成Servlet,Servlet再负责响应用户请求。
第三部分 连接池/过滤器/监听器/jQuery/Ajax
1. 为什么要使用连接池?
- 传统的数据库连接方式
–
一个连接对象对应一个物理连接
–
每次操作都打开一个物理连接,
–
使用完都关闭连接,造成系统性能低下。
- 连接池技术
–
客户程序得到的连接对象是连接池中物理连接的一个句柄
–
调用连接对象的close()方法,物理连接并没有关闭,数据源的实现只是删除了客户程序中的连接对象和池中的连接对象之间的联系.
- 数据库连接的建立及关闭是耗费系统资源的操作,在大型应用中对系统的性能影响尤为明显。为了能重复利用数据库连接对象,缩短请求的响应时间和提高服务器的性能,支持更多的客户,应采用连接池技术.
2. 数据库连接池的原理。
1、数据库连接池的原理。
- 传统连接方式:
–
首先调用Class.forName()方法加载数据库驱动,
–
然后调用DriverManager.getConnection()方法建立连接.
- 连接池技术:
–
连接池解决方案是在应用程序启动时就预先建立多个数据库连接对象,然后将连接对象保存到连接池中。
–
当客户请求到来时,从池中取出一个连接对象为客户服务。
–
当请求完成时,客户程序调用close()方法,将连接对象放回池中.
–
对于多于连接池中连接数的请求,排队等待。
–
应用程序还可根据连接池中连接的使用率,动态增加或减少池中的连接数。
3. 谈谈过滤器原理及其作用?
原理:
–
过滤器是运行在服务器端的一个拦截作用的web组件,一个请求来到时,web容器会判断是否有过滤器与该信息资源相关联,如果有则交给过滤器处理,然后再交给目标资源,响应的时候则以相反的顺序交给过滤器处理,最后再返回给用户浏览器
–
一般用于日志记录、性能、安全、权限管理等公共模块。
过滤器开发:
–
过滤器是一个实现了javax.servlet.Filter接口的java类
–
主要业务代码放在doFilter方法中
–
业务代码完成后要将请求向后传递,即调用FilterChain对象的doFilter方法
配置:
–
在web.xml中增加如下代码
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>Filter完整类名</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*(要过虑的url,此处*表示过虑所有的url)</url-pattern>
</filter-mapping>
4. 谈谈监听器作用及其分类?
监听器也叫Listener,是一个实现特定接口的java类,使用时需要在web.xml中配置,它是web服务器端的一个组件,它们用于监听的事件源分别为SerlvetConext,HttpSession和ServletRequest这三个域对象
主要有以下三种操作:
–
监听三个域对象创建和销毁的事件监听器
–
监听域对象中属性的增加和删除的事件监听器
–
监听绑定到HttpSession域中的某个对象的状态的时间监听器
接口分类:
–
ServletContextListener
–
HttpSessionListener
–
ServletRequestListener
–
ServletContextAttributeListener
–
HttpSessionAttributeListener
–
ServletRequestAttributeListener
–
HttpSessionBindingListener(不需要配置)
– HttpSessionActivationListener(不需要配置)
配置:
<listener><listener-class>实现以上任意接口的java类全名</listener-class></listener>
5. jQuery相比JavaScript的优势在哪里
jQuery的语法更加简单。
jQuery消除了JavaScript跨平台兼容问题。
相比其他JavaScript和JavaScript库,jQuery更容易使用。
jQuery有一个庞大的库/函数。
jQuery有良好的文档和帮助手册。
jQuery支持AJAX
6. DOM对象和jQuery对象的区别及其转换
DOM对象,是我们用传统的方法(javascript)获得的对象,jQuery对象即是用jQuery类库的选择器获得的对象,它是对DOM对象的一种封装,jQuery对象不能使用DOM对象的方法,只能使用jQuery对象自己的方法。
普通的dom对象一般可以通过$()转换成jquery对象
如:var cr=document.getElementById("cr"); //dom对象
var $cr = $(cr); //转换成jquery对象
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出
如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]这几种语法在jQuery中都是合法的
7. jQuery中$的作用主要有哪些
1)
$用作选择器
例如:根据id获得页面元素$("#元素ID")
2)
$相当于window.onload 和 $(document).ready(...)
例如:$(function(){...});
function(){...}会在DOM树加载完毕之后执行。
3)
$用作JQuery的工具函数的前缀
例如: var str = '
Welcome to shanghai.com ';
str = $.trim(str);去掉空格
4)
$(element):把DOM节点转化成jQuery节点
例如:var
cr=document.getElementById("cr"); //dom对象
var $cr = $(cr);
//转换成jquery对象
5)
$(html):使用HTML字符串创建jQuery节点
例如:var obj =
$("<div>尚学堂,实战化教学*</div>")
8. Ajax含义及其主要技术
Ajax (Asynchronous JavaScript and XML 阿贾克斯)不是一个新的技术,事实上,它是一些旧有的成熟的技术以一种全新的更加强大的方式整合在一起。
Ajax的关键技术:
1)
使用CSS构建用户界面样式,负责页面排版和美工
2)
使用DOM进行动态显示和交互,对页面进行局部修改
3)
使用XMLHttpRequest异步获取数据
4)
使用JavaScript将所有元素绑定在一起
9. Ajax的工作原理
Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。
XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。
10.
JSON及其作用
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript
原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。
在JSON中,有两种结构:对象和数组。
1)
一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’
对”之间运用 “,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:
var
o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};
2)
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。例如:
var jsonranklist=[{"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"},
{"xlid":"zd","xldigitid":123456,"topscore":1500,"topplaytime":"2009-11-20"}];
第四部分 项目开发
1. MVC模式及其优缺点
一、MVC原理
MVC是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。
1、模型(model)它是应用程序的主体部分,主要包括业务逻辑模块和数据模块。模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性
2、视图(view) 用户与之交互的界面、在web中视图一般由jsp,html组成
3、控制器(controller)接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的作用
二、MVC的优点
1、降低代码耦合性。在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其他层中的代码。
2、有利于分工合作。在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可进行开发视图层中的JSP,而对业务熟悉的人员可开发业务层,而其他开发人员可开发控制层。
3、有利于组件的重用。如控制层可独立成一个能用的组件,表示层也可做成通用的操作界面。可以为一个模型在运行时同时建立和使用多个视图。
三、MVC的不足之处
1、增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
2、视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
3、视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
4、目前,一般高级的界面工具或构造器不支持模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成MVC使用的困难。
2. EJB与JavaBean的区别?
Java Bean 是可复用的组件,对Java
Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于JavaBean是被容器所创建(如Tomcat)的,所以Java
Bean应具有一个无参的构造器。另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。
Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
3. Oracle完成分页功能的三层子查询语句及其含义?
如:
select * from
(select t.*,rownum r from (select * from A) t where rownum < 10) where r
>5
select * from A:要查询的数据
select
t.*,rownum r from (select * from A) t where rownum < 10:取前10行
select * from
(select t.*,rownum r from (select * from A) t where rownum < 10) where r
>5:取5-10行
4. MVC模式完成分页功能的基本思路是什么?
1)页面提交页码(第几页)到Servlet中
2)Servlet接收到页码后,将页码传递给分页工具类(PageBean)
3)Servlet中调用Service层传入PageBean对象
4)Service层调用DAO层传入PageBean对象
5)Servlet中得到查询出来的数据,并setAttrivute保存
6)在页面中得到(getAttribute)数据,遍历输出
5. 文件上传组件Common-fileUpload的常用类及其作用?
DiskFileItemFactory:磁盘文件工厂类,设置上传文件保存的磁盘目录,缓冲区大小
ServletFileUpload:上传处理类,此类真正读取客户上传的文件,同时可以设置最大接收大小
FileItem:上传的文件对象,可以是多个文件,每个上传的文件都是一个单独的FileItem对象