Java EE软件工程师javascript
认证考试css
面试题大全html
目 录前端
第一部分 HTML/CSS/JavaScript 1java
1. HTML含义和版本变化... 1jquery
2. 什么是锚连接... 1git
3. HTML字符实体的做用及其经常使用字符实体... 1web
4. HTML表单的做用和经常使用表单项类型... 2面试
5. 表格、框架、div三种HTML布局方式的特色... 2ajax
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含义:
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文档结构
锚连接是带有文本的超连接。能够跳转到页面的某个位置,适用于页面内容较多,超过一屏的场合 。分为页面内的锚连接和页面间的锚连接 。
例如:
<a name=”1F”>1F</a><a name=”2F”>2F</a>
<a href=”#2F”>跳转到2F标记位置</a>
说明:
1.在标记位置利用a标签的name属性设置标记。
2.在导航位置经过a标签的href属性用#开头加name属性值便可跳转锚点位置。
有些字符,好比说“<”字符,在HTML中有特殊的含义,所以不能在文本中使用。想要在HTML中显示一个小于号“<”,须要用到字符实体:<或者<
字符实体拥有三个部分:一个and符号(&),一个实体名或者一个实体号,最后是一个分号(;)
经常使用字符实体:
显示结果 |
描述 |
实体名 |
实体号 |
空格 |
|
  |
|
< |
小于 |
< |
< |
> |
大于 |
> |
> |
& |
and符号 |
& |
& |
' |
单引号 |
' (IE不支持) |
' |
" |
引号 |
" |
" |
£ |
英镑 |
£ |
£ |
¥ |
人民币元 |
¥ |
¥ |
§ |
章节 |
§ |
§ |
© |
版权 |
© |
© |
表单的做用:
利用表单能够收集客户端提交的有关信息。
经常使用表单项类型:
input标签type属性 |
功能 |
input标签type属性 |
功能 |
text |
单行本框 |
reset |
重置按钮 |
password |
密码框 |
submit |
提交按钮 |
radio |
单选按钮 |
textarea |
文本域 |
checkbox |
复选框 |
select |
下拉框 |
button |
普通按钮 |
hidden |
隐藏域 |
|
优势 |
缺点 |
应用场合 |
表格 |
方便排列有规律、结构均匀的内容或数据 |
产生垃圾代码、影响页面下载时间、灵活性不大难于修改 |
内容或数据整齐的页面 |
框架 |
支持滚动条、方便导航 节省页面下载时间等 |
兼容性很差,保存时不方便、应用范围有限 |
小型商业网站、论坛后台管理 |
Div |
代码精简、提升页面下载速度、表现和内容分离 |
比较灵活、难于控制 |
复杂的不规则页面、业务种类较多的大型商业网站 |
|
readonly |
disabled |
有效对象 |
.只针对type为text/password有效 |
对全部表单元素有效 |
表单提交 |
当表单元素设置readonly后,表单提交能将该表单元素的值传递出去。 |
当表单元素设置disabled后,表单提交不能将该表单元素的值传递出去。 |
CSS的定义:CSS是Cascading Style Sheets(层叠样式表)的简称。
CSS是一系列格式规则,它们控制网页内容的外观。CSS简单来讲就是用来美化网页用的。
CSS的具体做用包括:
1) 使网页丰富多彩,易于控制。
2) 页面的精确控制,实现精美、复杂页面 。
3) 样式表能实现内容与样式的分离,方便团队开发。
4) 样式复用、方便网站的后期维护。
选择器名称 |
案例 |
语法格式 |
标签选择器 |
h3{font-size:24px;font-family:"隶书“; } <h3>JSP</h3> |
元素标签名{样式属性} |
类选择器 |
.red {color:#F00;} <li class="red">Oracle</li> |
. 元素标签class属性值{样式属性} |
ID选择器 |
#p1 {background-color:#0F0;} <p id="p1">content</p> |
#元素标签id属性值{样式属性} |
包含选择器 |
div h3{color:red;} <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> |
父元素标签名>子元素名{ 样式属性 } |
三种引用方式:
1. 外部样式表(存放.css文件中)
不须要style标签
<link rel=”stylesheet” href=”引用文件地址” />
2. 嵌入式样式表
<style type=“text/css”>
p{color:red;}
</style>
3.内联样式
标签属性名为style
<p style=“color:red;”></p>
优先级级别:在一个页面上,自上而下,后定义优先级高。
盒子模型相似于生活中的盒子,具备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" />
Javascript一种基于对象(object-based)和事件驱动(Event Driven)的简单的并具备安全性能的脚本语言。特色:
1) 解释性: JavaScript不一样于一些编译性的程序语言,例如C、C++等,它是一种解释性的程序语言,它的源代码不须要通过编译,而直接在浏览器中运行时被解释。
2) 基于对象: JavaScript是一种基于对象的语言。这意味着它能运用本身已经建立的对象。所以,许多功能能够来自于脚本环境中对象的方法与脚本的相互做用。
3) 事件驱动:JavaScript能够直接对用户或客户输入作出响应,无须通过Web服务程序。它对用户的响应,是以事件驱动的方式进行的。所谓事件驱动,就是指在主页中执行了某种操做所产生的动做,此动做称为“事件”。好比按下鼠标、移动窗口、选择菜单等均可以视为事件。当事件发生后,可能会引发相应的事件响应。
4) 跨平台:JavaScript依赖于浏览器自己,与操做环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行。
数值型:整数和浮点数统称为数值。例如85或3.1415926等。
字符串型:由0个,1个或多个字符组成的序列。在JavaScript中,用双引号或单引号括起来表示,如“您好”、‘学习JavaScript’等。 不区分单引号、双引号。
逻辑(布尔)型:用true或false来表示。
空(null)值:表示没有值,用于定义空的或不存在的引用。
要注意,空值不等同于空字符串""或0。
未定义(undefined)值:它也是一个保留字。表示变量虽然已经声明,但却没有赋值。
除了以上五种基本的数据类型以外,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]+" ");
}
}
BOM浏览器对象模型,由一系列对象组成,是访问、控制、修改浏览器的属性的方法。
DOM文档对象模型,由一系列对象组成,是访问、检索、修改XHTML文档内容与结构的标准方法。
关系:
– BOM描述了与浏览器进行交互的方法和接口
– DOM描述了处理网页内容的方法和接口
– DOM属于BOM的一个属性
1) getElementById( ) :返回一个节点对象
2) getElementsByName( ):返回多个(节点数组)
3) getElementsByTagName( ) :返回多个(节点数组)
1) window.alert() 显示一个提示信息
2) window.confirm() 显示一个带有提示信息、肯定和取消按钮的对话框
3) window.prompt()显示可提示用户输入的对话框
setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段以后就将执行那段代码。
不过这两个函数仍是有区别的,setInterval在执行完一次代码以后,通过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。
window.setTimeout("function",time);//设置一个超时对象,只执行一次,无周期
window.setInterval("function",time);//设置一个超时对象,周期='交互时间'
第一种方式:操做元素的属性(对象.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);
联系:
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)制做和后期维护工做量不一样。动态网页的设计以数据库技术为基础,能够实现多种功能,下降了网站维护的工做量。而静态网页因为没有数据库的支持,网页内容更改时须要直接修改代码,在网站内容制做和维护中,所需的工做量更大。
动态网页与静态网页各有特色,网站设计师在网页设计时,主要根据网站的功能需求和网站内容多少选择不一样网页。如,网站包含信息量太大时,就须要选择动态网页,反之,则选择静态网页。
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) 开发速度慢
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。
做用:
Tomcat:目前应用很是普遍的免费web服务器,支持部分j2ee。
JBoss:JBoss是一个管理EJB的容器和服务器,支持EJB 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其容错、系统管理和安全性能已经在全球数以千记的关键任务环境中得以验证。
C/S结构,即Client/Server(客户机/服务器)结构,经过将任务合理分配到Client端和Server端,下降了系统的通信开销,可充分利用两端硬件环境优点。早期软件系统多以此做为首选设计标准。
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面彻底经过WWW浏览器实现,一部分事务逻辑在前端实现,可是主要事务逻辑在服务器端实现,节约了开发成本,便于软件维护。
区别
一、C/S是创建在局域网的基础上的。B/S是创建在广域网的基础上的,但并非说B/S结构不能在局域网上使用。
二、B/S业务扩展简单方便,经过增长页面便可增长服务器功能。C/S的客户端还须要安装专用的客户端软件,不利于扩展。
三、B/S维护简单方便。开发、维护等几乎全部工做也都集中在服务器端,当企业对网络应用进行升级时,只需更新服务器端的软件就能够,这减轻了异地用户系统维护与升级的成本。。
四、B/S响应速度不及C/S;
五、B/S用户体验效果不是很理想
容器也是 java 程序,它的主要做用是为应用程序提供运行环境。容器用来接管安全性、并发性、事务处理、交换到辅助存储器和其它服务的责任
以tomcat为例:Tomcat是一个后台服务进程,其它的servlet(至关于DLL)是在Tomcat容器内运行,Broswer只与Tomcat通迅; Tomcat接受browser的请求,通过一系列动做(若是是静态网页,那么装载,按http协议造成响应流;若是是动态的如JSP,那就要调用JDK 中的servlet.jsp接口,解释造成静态网页,按http协议生成响应流发送回browser)后,造成静态网页,返回响应。
超文本传输协议(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协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。另外一方面,在服务器不须要先前信息时它的应答就较快。
1) Get是不安全的,由于在传输过程,数据被放在请求的URL中;Post的全部操做对用户来讲都是不可见的。
2) Get传送的数据量较小,这主要是由于受URL长度限制;Post传送的数据量较大,通常被默认为不受限制。
3) Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
4) Get执行效率却比Post方法好。Get是form提交的默认方法。
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"
绝对路径指对站点的根目录而言某文件的位置,相对路径指以当前文件所处目录而言某文件的位置,相对路径-以引用文件之网页所在位置为参考基础,而创建出的目录路径。绝对路径-以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" >,这种方法适用与在不一样网站之间插入外部网站的图片。
实现servlet的单线程的jsp命令是: <%@ page isThreadSafe=”false”%>。默认isThreadSafe值为true。
属性isThreadSafe=false模式表示它是以Singleton模式运行,该模式implements了接口SingleThreadMode, 该模式同一时刻只有一个实例,不会出现信息同步与否的概念。若多个用户同时访问一个这种模式的页面,那么先访问者彻底执行完该页面后,后访问者才开始执行。
属性isThreadSafe=true模式表示它以多线程方式运行。该模式的信息同步,需访问同步方法(用synchronized标记的)来实现。 通常格式以下:
public synchronized void syncmethod(...){ while(...) { this.wait(); } this.notifyAll(); } |
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() 方法。(只执行一次)
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
转发是在服务端直接作的事情,是对客户端的同一个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:是否通过过滤器
转发不通过过滤器(默认状况);重定向通过过滤器
在JSP运行过程当中,首先由客户端发出请求,Web服务器接收到请求后,若是是第一次访问某个jsp页面,Web服务器对它进行如下3个操做。
1) 翻译:由.jsp变为.java,由JSP引擎实现。
2) 编译:由.java变为.class,由 Java编译器实现。
3) 执行:由.class变为.html,用Java虚拟机执行编译文件,而后将执行结果返回给Web服务器,并最终返回给客户端
若是不是第一次访问某个JSP页面,则只执行第三步。因此第一次访问JSP较慢。
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
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
回答这个问题得先清楚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引入导航条、页脚等。
page:当前页面范围
request:当前页面范围+转发页面(forward)+包含页面(include)
session:当前会话:session在如下几种状况下失效
1) 销毁session:Session.invalidate();
2) 超过最大非活动间隔时间
3) 手动关闭浏览器(session并无马上失效,由于服务器端session仍旧存在,超过最大非活动间隔时间后真正失效)
application:当前应用;服务器从新启动前一直有效
区别:
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再负责响应用户请求。
– 一个链接对象对应一个物理链接
– 每次操做都打开一个物理链接,
– 使用完都关闭链接,形成系统性能低下。
– 客户程序获得的链接对象是链接池中物理链接的一个句柄
– 调用链接对象的close()方法,物理链接并无关闭,数据源的实现只是删除了客户程序中的链接对象和池中的链接对象之间的联系.
1、数据库链接池的原理。
– 首先调用Class.forName()方法加载数据库驱动,
– 而后调用DriverManager.getConnection()方法创建链接.
– 链接池解决方案是在应用程序启动时就预先创建多个数据库链接对象,而后将链接对象保存到链接池中。
– 当客户请求到来时,从池中取出一个链接对象为客户服务。
– 当请求完成时,客户程序调用close()方法,将链接对象放回池中.
– 对于多于链接池中链接数的请求,排队等待。
– 应用程序还可根据链接池中链接的使用率,动态增长或减小池中的链接数。
原理:
– 过滤器是运行在服务器端的一个拦截做用的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>
监听器也叫Listener,是一个实现特定接口的java类,使用时须要在web.xml中配置,它是web服务器端的一个组件,它们用于监听的事件源分别为SerlvetConext,HttpSession和ServletRequest这三个域对象
主要有如下三种操做:
– 监听三个域对象建立和销毁的事件监听器
– 监听域对象中属性的增长和删除的事件监听器
– 监听绑定到HttpSession域中的某个对象的状态的时间监听器
接口分类:
– ServletContextListener
– HttpSessionListener
– ServletRequestListener
– ServletContextAttributeListener
– HttpSessionAttributeListener
– ServletRequestAttributeListener
– HttpSessionBindingListener(不须要配置)
– HttpSessionActivationListener(不须要配置)
配置:
<listener><listener-class>实现以上任意接口的java类全名</listener-class></listener>
jQuery的语法更加简单。
jQuery消除了JavaScript跨平台兼容问题。
相比其余JavaScript和JavaScript库,jQuery更容易使用。
jQuery有一个庞大的库/函数。
jQuery有良好的文档和帮助手册。
jQuery支持AJAX
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中都是合法的
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>")
Ajax (Asynchronous JavaScript and XML 阿贾克斯)不是一个新的技术,事实上,它是一些旧有的成熟的技术以一种全新的更增强大的方式整合在一块儿。
Ajax的关键技术:
1) 使用CSS构建用户界面样式,负责页面排版和美工
2) 使用DOM进行动态显示和交互,对页面进行局部修改
3) 使用XMLHttpRequest异步获取数据
4) 使用JavaScript将全部元素绑定在一块儿
Ajax的原理简单来讲经过XmlHttpRequest对象来向服务器发异步请求,从服务器得到数据,而后用javascript来操做DOM而更新页面。这其中最关键的一步就是从服务器得到请求数据。要清楚这个过程和原理,咱们必须对 XMLHttpRequest有所了解。
XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript能够及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。
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是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提升了程序的可维护性、可移植性、可扩展性与可重用性,下降了程序的开发难度。它主要分模型、视图、控制器三层。
一、模型(model)它是应用程序的主体部分,主要包括业务逻辑模块和数据模块。模型与数据格式无关,这样一个模型能为多个视图提供数据。因为应用于模型的代码只需写一次就能够被多个视图重用,因此减小了代码的重复性
二、视图(view) 用户与之交互的界面、在web中视图通常由jsp,html组成
三、控制器(controller)接收来自界面的请求 并交给模型进行处理 在这个过程当中控制器不作任何处理只是起到了一个链接的做用
2、MVC的优势
一、下降代码耦合性。在MVC模式中,三个层各施其职,因此若是一旦哪一层的需求发生了变化,就只须要更改相应的层中的代码而不会影响到其余层中的代码。
二、有利于分工合做。在MVC模式中,因为按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可进行开发视图层中的JSP,而对业务熟悉的人员可开发业务层,而其余开发人员可开发控制层。
三、有利于组件的重用。如控制层可独立成一个能用的组件,表示层也可作成通用的操做界面。能够为一个模型在运行时同时创建和使用多个视图。
3、MVC的不足之处
一、增长了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增长结构的复杂性,并可能产生过多的更新操做,下降运行效率。
二、视图与控制器间的过于紧密的链接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是颇有限的,反之亦然,这样就妨碍了他们的独立重用。
三、视图对模型数据的低效率访问。依据模型操做接口的不一样,视图可能须要屡次调用才能得到足够的显示数据。对未变化数据的没必要要的频繁访问,也将损害操做性能。
四、目前,通常高级的界面工具或构造器不支持模式。改造这些工具以适应MVC须要和创建分离的部件的代价是很高的,从而形成MVC使用的困难。
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组件。
如:
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行
1)页面提交页码(第几页)到Servlet中
2)Servlet接收到页码后,将页码传递给分页工具类(PageBean)
3)Servlet中调用Service层传入PageBean对象
4)Service层调用DAO层传入PageBean对象
5)Servlet中获得查询出来的数据,并setAttrivute保存
6)在页面中获得(getAttribute)数据,遍历输出
DiskFileItemFactory:磁盘文件工厂类,设置上传文件保存的磁盘目录,缓冲区大小
ServletFileUpload:上传处理类,此类真正读取客户上传的文件,同时能够设置最大接收大小
FileItem:上传的文件对象,能够是多个文件,每一个上传的文件都是一个单独的FileItem对象