1 Elements 和 Template Data
Template Data:jsp container 不处理的部分,如heml的内容,会直接发到client端执行
Elements: 必须经由jsp container 处理的部分,大部分element都是以XML作为语法基础,并且大小写必须一致
element四中类型;Directive Element、Scripting Elements、Action Element是 和EL Element
标签两种写法,一种是带value属性的,一种是将value作为值来写的,即又开始和结尾标签
2 批注(conments)
客户端可以看到的批注:
<!-- comment [<%=expression %>] -->
如: <!-- 现在时间:[<%=(new java.util.Date()).toLocaleSing() %>] -->
会在html源文件中显示为:
<!-- 现在时间:January 1,2004 -->
这种和html很像,可以使用查看源代码来查看,不同的是,可以在批注上加上动态的表达式
开啊程序员专用的批注:
<%-- comment --%>
<% /** this is a comment **/ %>
这种在jsp编译时会被忽略掉,通常程序员可以用此来调试(debug)程序
3 Quoting 和 Escape 规则
在程序输入的内容如:out.printl(“ content”);
当content中又特殊符号如:%> 单引号 ‘ 双引号“ 斜线 / \时,都需要在前边加上斜线\ 作为转义
起始标签<% 可以改为 <% 结束标签可以改为%\>
否则可能引起网页错误500
4 Directive Elements
指令(Directives):主要用来提供整个jsp网页相关的信息,应用来设定jsp网页相关属性,如:网页编码方式、语法、信息等。
起始符号:<%@
终止符号:%>
内文为一些指令和一连串的属性设定,如:<%@ directive {attribute = "value"} * %>
三种指令:page、include 和 taglib
page: 设定整个jsp页面的属性和相关功能,语法:
<%@ page attribute1 = "value" attribute2 = "value2" %>
page拥有11和属性:
language = ”scriptingLanguage" :指定jsp Container要用什么语言来编译jsp网页,目前可以用java,日后可能有:c、c++、perl等,默认为java
extends = "className" :定义次jsp网页产生的servlet是继承的哪个父类
import = "importList" :定义jsp网页可以使用哪些java API 多个写在一个import里边时,需要用都好隔开
session = "true|flase" :决定jsp网页是否可以使用session对象,默认为true
buffer = "none | size in kb" :决定输出流是否有缓冲区,默认为8kb缓冲区
autoFlush = "true| false" :决定输出流缓冲区是否自动清除,缓冲区满后后出现(exception)异常,默认为ture
isThreadSafe = "true|false" :主要告诉此jsp container,此jsp网页可以处理超过一个以上的请求,默认为true
info = "text" :主要表示此jsp的相关信息
errorPage = "error-url" :发生异常时,此页面会被指向哪一个页面url
contentType = "ctinfo" :表示mime 类型和jsp网页的编码方式
pageEncoding = "ctinfo" :表示jsp网页的编码方式
isELIgnored = "true | false“ : 表示jsp网页是否忽略el表达式
include指令:在jsp编译时,可以插入一个包含文件或者代码的文件,这个包含的过程是静态的,包含的文件可以使jsp网页、html网页、文本文件或是一段java程序
包含文件中要避免使用html中的标签,以避免和原来的jsp页面中的标签相混淆
语法:<%@ include file = "value" %> 只有这一个属性 file value 表示的是file的路径
这一指令为静态包含,所谓静态包含指:file不能为一个变量的URL,如:
< % @include file = "<%= URL %>" %> 即为错误的
同时,file所致的路径必须是相对于此JSP网页的路径,路径中无任何参数
位置可以在body里边
taglib指令:能够让用户自定义新的标签
语法:<%@ taglib url = "taglibraryURI" prefix = ”tagPrefix” %>
属性:
uri = “taglibraryURI” : 说明taglibrary的存放位置
prefix = “tagPrefix” :主要用来区分多个自定义的标签
如:
<%@ tablib uri = "/supertags/" prefix = "super" %>
..................
<super: doMagic>
.........
..........
</super:doMagic>
5 Scripting Elements
1)声明(declarations)
2)Scriptlets
3)表达式(Expressions)
声明:
语法:<%! declaration %> 里边可以使变量或者方法
若想在每一个页面都用到一些声明,可以把这些写在一个jsp中,然后用<%@include %> / <jsp:include >把元素包含进来
此声明是全局变量写法(强烈建议不用此方法)
Scriptlet:包含有效的程序片段,合乎java语法的就可以
格式:<% code fragmeng %> fragment 即为java程序语句
可以:声明将要用到的变量和方法、显示出表达式、使用隐含对象和javaBean声明过的对象、当jsp收到客户端请求时,Scriplet会执行,如同servlet的doGet和doPost,显示的内容会被存在out对象中,然后利用out对象的printLn()方法显示出结果。
表达式(Exception):
语法:<%= exception %>
表达式在执行后会被自动转化为字符串,然后显示出来
不能使用分号来作为表达式的结束符,但在Scriplet中就用的分号
这可以包括java的值也可以包括jsp元素的属性值
6 Action Elements
拥有20个,分为六类
1) <jsp:include>:可以包含动态或者静态的文件,静态时,只是一些信息,直接加载到jsp页面,动态时,jsp container会编译执行,此标签会自动判断文件时动态还是静态
属性有:page flush
page: 可以代表一个相对路径,文件位置或者是表达式
flush:true或者false,当缓冲区满是,将会被清空(true)。默认值为false
使用的时候还可以用param传递一个或者多个参数,如:
<jsp:include page = "hello.jsp" />
<jsp: param name = "username" valude = "browser" />
<jsp: param name = "password" valude = "124"/>
</jsp:include>
2) <jsp:forward>: 只有一个属性page ,即将要导向的网页,值或者算出来的表达式
语法: <jsp:forward page = {"relativeurl" | "<%= expression%>"} />
or
<jsp:forward page = {"relativeurl" | "<%= expression%>"} >
<jsp:param name = "pn" value = "{pv | <%=expression%>}"/>
</jsp:forward>
3) <jsp:param>:用来提供key/value 的信息,可以和include、forward、plugin 一起搭配使用
语法:<jsp:param name = "paramname" value = "paramvalue" />
属性name和value即名称和值
注:当在jsp之间转向时,request对象中如果已经有过此参数,则新的值的优先级会比较高
4) <jsp:plugin>:用于在浏览器中播放或者显示一个对象(为Applet或者Bean)
当jsp网页被编译执行时,此标签会替换成<object> 标签或者<embed> 标签。它会指定对象Applet或者Bean ,同样会指定类的名字和位置,还会指定从哪里下载这个java组件
语法:<jsp:plugin type = "bean" |"applet " 将被执行的对象的类型,没有默认值
code = "objectCode" 将被执行的java类的名称,必须以.class结尾,并且.class类文件必须存在于codebase属性所指定的目录中
codebase = "objetcodebase" 被执行的java类的目录的属性,默认为jsp网页所在的目录
[align = "alignment"] 图形、对象、Applet的位置:botton、top、middle、left、right
[archive = "archiveList”] 用于一些预先需要加载的类
[height = "height"] 长或者宽,单位是像素
[hspace = "hspace"] 显示时屏幕左右所需要留下的空间,单位是像素
[jreversion ="jreversion"] 执行时jre所需要的版本
[name = "componentname"] 名称
[vspace = "vspace"]
[width = "width"]
[nspluginurl = 'url"] 用户能够使用的jre的下载地址、辞值为一个标准的url
[iepluginurl = ["url"]
<jsp:fallback> reason </jsp:falback> 当java类不能执行是所提示的错误
</jsp:plugin>
5)<jsp:element>:一个属性name ,此用来定义新标签
<jsp:attribute> : 用来定义属性
<jsp:body>
7 错误处理
jsp在执行是,在两个阶段容易出现错误
1) jsp网页-》Servlet类 转换错误
原因:在撰写jsp页面是的语法错误,导致jsp container无法将jsp网页编译成servlet类文件(.class) 例如:500 Internal Server Error错误
解决:重新检查一下jsp页面编写是否有误或者是jsp container本身的bug
2) Servlet类处理每一个请求时 请求处理错误
原因:往往不是语法错误,而是逻辑上的错误
解决:这种通常会转到另一个ErrorPage.jsp来处理
如:<%@ page contentType = "text/html; charset = GB2312" erorPage = "Error.jsp" %>
平时看到的错误页面其实就是执行的errorpage的结果。