(一).jsp基础
一个jsp文件中:包含5类元素.
1.模板元素
指jsp的静态html和xml内容.它对jsp的显示是必要的.是网页的框架,它影响页面的结构和美观程度.在jsp编译的时候,它将这些
模板元素编译到servlet里.
2.脚本元素
包括声明(Declaration)
声明就是在jsp程序中声明合法的变量和方法.
例子:
<%! String getDate()
{
return new java.util.Date().toLocaleString();
}
int count = 10 ;
%>
表达式(Expression)
表达式就是位于<%=和%>之间的代码. 例子:<%=getDate()%>
Scriptlets
位于<%和%>之间的代码.它们是合法的java代码.
例子:
<%
int i;
//color表示颜色,通过它来动态控制颜色.
String color1 ="99ccff";
String color2 ="88cc33";
for(i=1;i<=count;i++){
String color="";
if(i%2==0)color=color1;
else color = color2 ;
out.println("<trbgcolor="+color+"><td>-------------------</td><tr>");
}
%>
3.指令元素
页面(page)指令
include指令
taglib指令
4.动作元素
在请求处理阶段起作用.jsp规范定义理一系列的标准动作,他们用jsp作为前缀.
<jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>,<jsp:param>等.
5.注释
其中有jsp自带的注释规范,也有html/xml的注释规范.
[1].jsp语法: <!--comment[%=expression%]--> 例子:<!--当前时间为: <%=(new java.util.Date()).toLocaleString()%>-->
[2].隐藏注释: 写在jsp程序中,但不发给客户.jsp语法:<%--comment--%>
(二)指令元素
指令用于从jsp发送一个信息到容器上.它用来设置全局变量,声明类,要实现的方法和输入内容的类型等.它们并不向客户产生任何输出,
所有的指令都在jsp整个文件范围内有效.
使用格式< attribute="value",attribute="value" %>
1.页面指令:
用来定义jsp文件中的全局属性.
格式:<%@ page attribute="value"%>
其中attribute:language|import|contentType|session|buffer|autoFlush|isThreadSafe|info|errorPage|isErrorPage|extends
language 定义要使用的脚本语言,目前只能是"java" ex: language="java"
import 和一般的java import意义一样,只是用","格开包或者类列表. ex: import="java.io.*,java.util.Hashtable"
session 指定一个Http会话中这个页面是否参与. ex: session="true"
buffer 指定到客户输出流的缓冲模式,如果是none,则不缓冲;如果指定数值,那么输出就用不小于这个值的缓冲区进行缓冲. ex: buffer="64kb"
autoFlash true缓冲区满时,到客户端输出被刷新;false缓冲区满时,出现缓冲异常,表示缓冲溢出. ex: autoFlush ="true"
info 关于jsp页面的信息,定义一个字符串,可以使用servlet.getServletInfo()获得. ex: info="一个测试页面"
isErrorPage 表明当前页是否为其它页的errorPage目标.如果被设置为true,则可以使用exception对象. ex: isErrorPage="true"
errorPage 定义此页面出现异常时调用的页面. errorPage="error/error.jsp"
isThreadSafe 用来设置jsp文件是否能多线程使用,如果设置为true,那么一个jsp能够同时处理多个用户的请求;相反,如果设置为false,一个
jsp页面只能处理一个请求. ex: IsThreadSafe="true"
contentType 定义jsp字符编码和页面响应的MIME类型. ex: contentType="text/html;charset=gb2312"
pageEncoding jsp页面的字符编码. ex: pageEncoding="gb2312"
isELIgnored 制定EL(表达式语言)是否被忽略,如果为true,则容器忽略"${}"表达式的计算.
2.include指令
include指令通知容器将当前jsp页面中的内嵌的.在指定位置上的资源内容包含.被包含的文件内容可以被jsp解析,这种解析发生在编译期间.
ex: <%@ include file="filename"%>
include指令将在jsp编译时插入一个包含文本或代码的文件,当您使用include指令时,这个包含的过程就是静态的.
3.taglib指令
这个指令允许页面使用者自定义标签.
ex: <%@ taglib uri="taglibURI" prefix="tagPrefix" %>
uri用来表示标签描述符,也就是告诉容器怎么找到标签描述文件和标签库,tagPrefix定义了在jsp页面里面要引用这个标签时的前缀.
这些前缀不可以是:jsp,jspx,java,javax,sun,servlet,sunw.
(三)脚本元素
JSP脚本元素是jsp代码中使用最频繁的元素,特别是scriptlets.在早期的jsp代码中它占有主导地位.脚本元素把jsp的所有一切都集中在一起,
它通常是用java些的脚本代码.它允许变量声明&函数声明.
1.声明(Declaration)
在jsp里,声明是一段java代码.它用来定义在产生的类文件中的类的属性和方法.声明后的变量和方法可以在jsp的任意地方使用.可以声明方法,
也可以声明变量.
格式: <%! Variable declaration
menthod declaration(paramType param,...)%>
2.表达式(Expression)
表达式在jsp请求处理阶段计算它的值,所得的结果转换成字符串并与模板数据组合在一起.表达式在页面的位置,也就是该表达式计算结果所在
的位置.
格式:<%=Some java expression%>
如果表达式的任何部分是一个对象,就可以使用toString()进行转换.表达式必须有一个返回值或者本身就是一个对象,实际上表达式被转换
成out.println()方法中的内容. ex: <%="hello world"%> 在编译成servlet后,变成:out.write(String.valueOf("hello,world"));
3.scriptlet
Scriptlet是一段可以在处理请求时间执行的java代码.Scriptlet包括在<%和%>之间,它可以产生输出,并将输出发送到客户的输出流中,
也可以是一些流程控制语句.在一段Scriptlet中的创建对象,可以在另一个Scriptlet中使用.在编译后的servlet中,Scriptlet被包含在Servlet
的Servlet方法中.
格式:<%java code statements%>
(四)动作元素
静态页面(txt,html)写的是什么,在客户端看到的就是什么.不编译.
动态页面(jsp)要经过编译.
动作元素在请求处理阶段起作用.
1.<jsp:param>
以"名-值"对的形式为其它标签提供附加信息. 它和<jsp:include><jsp:forward><jsp:plugin>一起使用.
<jsp:param name="paramName" value="paramValue"/>.
其中name为属性相关联的关键字,value为属性的值.
2.<jsp:include>
允许在请求时间内在现成的jsp页面里面包含静态或者动态资源.被包含的对象只有对jspWriter对象的访问权,并且它不能设置头或者Cookie.
如果页面输出是缓冲的,那么缓冲区的刷新要优先于包含的刷新.此指令在运行上效率比<%@ page include%>指令低,但可以动态增加内容.
<jsp:include page="filename" flush="true"/>或者
<jsp:include page="filename" flush="true">
<jsp:param name="paramName" value="paramValue">
</jsp:include>
其中,page="filename"参数为一个相对路径,或者是代表相对路径的表达式.
如果路径以"/"开头,那么路径主要是参照jsp应用的上下文关系路径.
如果路径是以文件名或目录名开头,那么这个路径就是正在使用的jsp文件的当前路径.
<jsp:param name="paramName" value="paramValue">传递一个或多个参数给动态页面.
3.<jsp:forward>
允许将请求转发到另一个jsp,servlet或者静态资源文件.请求被转向到的资源必须位于同jsp发送请求相同的上下文环境中,每当遇到此
操作时,就停止执行当前的jsp,转而执行被转发的资源.
<jsp:forward page="uri"/>或者
<jsp:forward page="uri">
<jsp:param name="paramName" value="paramValue"/>
...
</jsp:forward>
4.<jsp:setProperty>
此操作和useBean一起协作,用来设置Bean的简单属性和索引属性.<jsp:setProperty>标签使用Bean给定的setXXX()方法,在Bean中设置一个或多个属性.
<jsp:setProperty bane="BeanName" propertyDetails />
其中,propertyDetails可以是下面几个中的一个:
property="*"
property="propertyName" param="parameterName"
property="propertyName"
property="propertyName" value="propertyValue"
ex:
<jsp:useBean id="usersession" scope="session" class="com.user.UserSession">
<jsp:setProperty name="usersession" property="name" value="hellking"/>
</jsp:useBean>
或者
<jsp:useBean id="usersession" scope="session" class="com.user.UserSession"/>
<jsp:setProperty name="usersession" property="name" value="hellking"/>
在表单中传过来的数据类型都是String类型的,jsp内在机制回把这些参数转化成Bean属性对应的类型。
把字符串转化为其它类型的方法.
boolean java.lang.Boolean.valueOf(String).booleanValue()
Boolean java.lang.Boolean.valueOf(String)
byte java.lang.Byte.valueOf(String).byteValue()
Byte java.lang.Byte.valueOf(String)
char java.lang.Character.valueOf(String).charValue()
Character java.lang.Character.valueOf(String)
double java.lang.Double.valueOf(String).doubleValue()
Double java.lang.Double.valueOf(String)
int java.lang.Integer.valueOf(String).intValue()
Integer java.lang.Integer.valueOf(String)
float java.lang.Float.valueOf(String).floatValue()
Float java.lang.Float.valueOf(String)
long java.lang.Long.valueOf(String).longValue()
Long java.lang.Long.valueOf(String)
5.<jsp:getProperty>
它用来访问一个Bean的属性.它访问的属性值将它转化成一个String,然后发送到输出流中.如果属性是一个对象,将调用toString()方法.
<jsp:getProperty name="beanName" property="propertyName"/>
例如:
<jsp:useBean id="usersession" scope="session" class="com.user.UserSession" />
<jsp:getProperty name="usersession" property="name" />
<jsp:getProperty name="usersession" property="password" />
该标签有一些限制:不能使用该标签来检索一个已经被索引了的属性.
6.<jsp:useBean>
用来在页面上创建一个Bean实例,并指定它的名字以及作用范围.它保证对象在标签指定的范围内可以使用.
语法: <jsp:useBean id="id" scope="page|request|session|application" typeSpec/>
其中ID是一个大小写相关的名字,用来表示这个实例:scope表示此对象可以使用的范围:typeSpec可以是以下四者之一:
[1] class="className"
[2] class="className" type="typeName"
[3] beanName="beanName" type="typeName"
[4] type="typeName"
ex:
<jsp:useBean id="shopcart" scope="session" class="sesion.Carts" />
<jsp:setProperty name="shopcart" property="*" />
<jsp:useBean id="checking" scope="session" class="bank.checking" >
<jsp:setProperty name="checking" property="balance" value="0.0">
</jsp:useBean>
解释:
(1)id="name"
在所定义的范围中确认Bean的变量,在定义某个JavaBean时,需要指定它的ID,通过此ID对javaBean的实例对象进行引用.
区分大小写.
(2)scope="page|request|session|application"
Bean存在的范围以及ID变量名的有效范围.scope的默认值是page.
page:能够在包含<jsp:useBean>标签的JSP文件以及此文件中的所有静态包含文件中使用Bean,直到页面执行完毕向客户端
发回响应或转到另一个文件为止,超出这个范围Bean失效.
request:在请求的范围内使用有效.可以使用request对象访问Bean. 比如request.getAttribute(name);
session:从创建Bean开始,就可以在session有效范围内使用这个Bean,这个Bean对于jsp来说是共享的.
7.<jsp:plugin>
用来产生客户端浏览器的特别标签(Object或者Embed),可以使用它来插入Applet或者JavaBean.
当jsp文件被编译把结果发送到浏览器时,<jsp:plugin>元素会根据浏览器的版本替换成<object>或者<embed>
<jsp:plugin>会指定对象是Applet还是Bean,同样会指定class的名字,另外还将指定将从哪里下载Java插件.
<jsp:plugin type="bean|applet" code="classFileName" codebase="classFileDirectoryName"
[name="instanceName"][archive="URIToArchive,..."][align="bottom|top|middle|left|right"]
[height="displayPixels"][width="displayPixels"][hspace="leftRightPixels"][vspace="topBottomPixels"]
[jrevesion="JREVersionNumber|1.1"][nspluginurl="URLToPlugin"][iepluginurl="URLToPlugin"]
>
[<jsp:params>
[<jsp:param name="parameterName" value="{parameterValue|<%=expression%>}"/>]+
</jsp:params>]
[<jsp:fallback>text message for user</jsp:fallback>]
</jsp:plugin>
ex:
<jsp:plugin type="applet" code="com.hellking.test.MyApplet.class" codebase=".">
<jsp:params>
<jsp:param name="aParameterName" value="aParameterNameValue"/>
</jsp:params>
<jsp:fallback>
<p>Unable to load applet</p>
</jsp:fallback>
</jsp:plugin>
(1)type="bean|applet" 将被执行的插件对象的类型.此属性无默认值.必须选择一个.
(2)code="classFileName" 插件将执行的java类文件的名称.必须包括扩展名,且此文件必须在用"codebase"属性指明的目录下.
(3)codebase="classFileDirectoryName" 包含插件将运行的java类的目录或指向这个目录的路径.默认jsp的当前路径.
(4)name="instanceName" Bean或Applet的实例的名称.使得被同一个jsp文件调用的Bean或Applet之间的通信成为可能.
(5)archive="URIToArchive,..."以逗号分隔的路径名列表.是那些用于codebase指定的目录下的类装载器预装载的存档文件所在的路径名.
(6)align="bottom|top|middle|left|right" 图形,对象,Applet的排列方式.
(7)height="displayPixels" width="displayPixels" Applet或Bean将要显示的长度的值,此值为数字,单位为象素,如height="800"
(8)hspace="leftRightPixels" vspace="topBottomPixels" Applet或Bean显示时在屏幕左右,上下所需留下的空间大小,单位为象素.
(9)jrevesion="JREVersionNumber|1.1" Applet或Bean运行所需的Java Runtime Environment(JRE)的版本,默认值为1.1
(10)nspluginurl="URLToPlugin" Netscape Navigator用户能够使用的JRE的下载地址,此值为一个标准的URL.
(11)iepluginurl="URLToPlugin" Internet Explorer用户能够使用的JRE的下载地址,此值为一个标准的URL.
(12)<jsp:params> 需要向Applet或Bean传送的参数或参数值.
(13)<jsp:fallback>show text message for user</jsp:fallback> 用于java插件不能启动时显示给用户的一段文字,如果插件能够启动
而Applet或Bean不能使用,那么浏览器会弹出一个出错信息.