jsp2.0

Servlet有以下优点:
可移植性(Portability)、强大的功能、性能、安全性。


Servlet的生命周期:
(1)产生Servlet,加载Servlet Engine中,然后调用init()这个方法进行初始化工作。
(2)以多线程的方式处理来自Client的请求,调用Service()方法。
(3)调用destroy()来销毁Servlet,进行垃圾收集。


JavaServer Pages技术有下列优点:
Write Once,Run Anywhere特性;搭配可冲复使用的组件;采用标签化页面开发;N-tier企业应用架构的支持。

jsp注释(comments):<!-- -->在页面中显示注释内容;<%-- --%>在页面中不显示注释内容。

在jsp输出特殊字符:单引号 ' 改为 /';双引号 " 改为/";斜线 / 改为 //;其实标签<%改为&lt;%;结束标签 %> 改为 %/>;

include指令表示:在jsp编译时插入一个包含文本或代码的文件,这个包含饿过程是静态的,而包含的文件可以是jsp网页、html网页、文本文件,或是一段java程序。注意包含文件中要避免使用<html></html><body></body>,因为这将影响在原来jsp网页中同样的标签,这样做有时会导致错误。所谓的静态是指file不能为一变量URL,例如:<% String url="hello.html"%><%@ include file="<%=url%>"%>也不可以在file所指定的文件后接任何参数,如下:<%@ include file="hello.jsp?name=browser"%>

使用<%! %>方式所声明的变量为全局变量,即表示:若同时n个用户在执行此jsp网页时,将会共享此变量。因此笔者强烈建议读者,千万别使用<%! %>来声明变量。
<jsp:include>元素允许你包含动态和静态文件,这两种产生的结果是不尽相同的。如果包含进来的只是静态文件,那么只是把静态文件的内容加到jsp网页中;如果包含进来的为动态文件,那么这个被包含的文件也会被jsp Container编译执行。

<jsp:forward>这个标签的定义:将客户端所发送出来的请求,从一个jsp网页转交给另一个jsp网页。不过有一点要特别注意,<jsp:forward>标签之后的程序将不能执行。

jsp中隐含对象:与Servlet有关的隐含对象(page、config)、与Input/Output有关的隐含对象(out、request、response)、jsp执行时,提供有关Context的隐含对象(session、application、pageContext)、与Error有关的隐含对象(exception)。

使用<jsp:include>标签所包含进来的网页,同样也可以取得Reqeust范围的数据。


EL提供了.和[]两种运算符来存取数据。一般情况下可以混用,不过一下两种情况,两者会有差异:(1)当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母和数字的符号,就一定要使用[],例如:${user["My-name"]}

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的便量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从page范围找,假如找不到,再依次到request、session、application范围。假如途中找到username就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。

因为${}在jsp2.0中式特殊字符,jsp容器回自动将它当做el来执行,因此,假若要显示${}时,必须在$前加上/,如/${XXXXX}


JSTL1.0中,核心标签库的uri默认为http://java.sun.com/jstl/core,比JSTL1.1少一个jsp/的路径。因为JSTL1.1同时支持JSTL1.0和1.1,所以假如核心标签库的uri为http://java.sun.com/jstl/core,则将会使用到JSTL1.0的核心标签库。JSTL1.1的核心标签库uri为http://java.sun.com/jsp/jstl/core


JSTL1.1与JSTL1.0
(1)EL原本是定义在JSTL1.0的,现在EL已经正式纳入JSP2.0标准规范中,所以JSTL1.1规范中,已经没有EL的部分,但JSTL依旧能使用EL。
(2)JSTL1.0中又分EL和RT两种函数库,到JSTL1.1之后,已经不再分这两种了。以下说明EL和RT的差别。EL完全使用Expression Language、简单、建议使用;RT使用Scriptlet、java语法、但不想转换且习惯旧表示法饿开发者使用。
(3)JSTL1.1新增函数标签库,主要提供一些好用的字符串处理函数。

当我们执行<c:if>的时候,可以将这次判断后的结果存放到属性var里;scope则是设定var的数据范围。哪些情况才会用到var和scope这两个属性呢?例如:当表达式过长时,我们会希望拆开处理,或是之后还需使用结果时,也可以用它先将结果暂时保留,以便日后使用。

假如condition1和condition2两者都为true时,此时只会显示“condition1为true”,这是因为在同一个<c:choose>下,当有好几个<c:when>都符合条件时,只能有一个<c:when>成立。

<c:forEach>为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。

<c:forTokens>用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的。

<c:import>可以把其他静态或动态文件包含至本身jsp网页。它和jsp action的<jsp:include>最大的差别在于:<jsp:include>只能包含和自己同一个web application下的文件;而<c:import>除了能包含和自己同一个web application的文件外,亦可包含不同web application或者是其他网站的文件。

当我们必须动态产生网址时,有可能传递的参数不固定,或者是需要一个网址能连至同服务器的其他web站台之文件,而且<c:url>更可以将产生的网址储存起来重复使用。另外,在以前我们必须使用相对地址或是绝对地址去取得需要的图文件或文件,现在我们可以直接利用<c:url>从web站台的角度来设定需要的图文件或文件的地址,如下:<img src="<c:url value="/images/code.gif"/>"/>


采用post的请求情形通常会有以下三种:为了传送较大的数据。因为使用get来传递数据时,有数据量的限制(255个字符数)执行上传文件时。因为文件大小通常都会超过255个字符数或文件可能是二进制文件。防止重要数据直接在浏览器上显示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章