有三种:page/include/taglib。具体用法参考第二节。
就是HTML语言。
即jsp脚本程序。
就是长着这种样的:<%=XXX%>
1.可以被服务器解释和执行,通过指令可以使服务器按照指令的设置来执行动作和设置在整个JSP页面范围内有效的属性。
2.在一个指令中可以设置多个属性,这些属性的设置可以影响到整个页面
3.三种指令的通用格式如:<%@ 属性名=”属性值” 属性名=”属性值”…%>,不是一定要用这个格式。
在JSP中主要有三种指令:
page具有的指令如下:
<%@page
[language=”java”]
[contextType=”mimeType;charset=CHARSET”]
[import=”{package.class|pageage.*},…”]
[extends=”pakage.class”]
[session=”True|False”]
[buffer=”none|8kb|size kb”]
[autoFlush=”True|Falsh”]
[isThreadSafe=”True|False”]
[info=”text”]
[errorPage=”True|False”]
[isELIgonred=”True|False”]
[pageEncoding=”CHARSET”]
%>
下面讲解pge指令中的各属性具有的功能:
<%@page contextType=”text/html;charset=utf-8”%> |
Java.lang.*; Javax.servlet.*; Javax.servlet.jsp; Javax.servlet.http; |
若在页面中编写JavaBeans,也可以通过import属性来导入,还可以通过标签
<%@page info=”helloworld”%> <%=this.getServletInfo%> |
该指令用于在当前的JSP页面中在当前使用该指令的位置嵌入其它文件,如果被包含的文件中有可执行的代码,则显示代码执行后的结果。使用这个指令可以大大减少代码的冗余,使一些固定的页面模板得到重复使用。
指令的使用格式如下:
<%@include file=”文件的绝对路径或相对路径”%> |
file属性:该属性不支持任何表达式,也不允许接收任何数据来作为文件的地址。
以“/”开头为绝对路径,将在当前应用的根目录下查找文件。
使用include指令包含了另一个文件,编译时实际上只有一个文件。
通过taglib指令,开发者可以在页面中使用标签或自定义标签来完成特定功能。
格式如:
<%@taglib uri=”tagURI” prefix=”tagPrefix”%> |
参数说明:
uri:uri制定了JSP要在web.xml文件中查找的标签库描述符,该描述符是一个标签描述文件(*.tld)的映射。在tld标签描述文件中定义了该标签库中的各个标签名称,并为每个标签指定一个标签处理类,另外,通过uri属性直接指定标签描述文件的路径,而无需再web.xml文件中进行配置,同样可以使用指定的标记。
prefix:指定一个在页面中使用由uri属性指定的标签库前缀(也就是一个前缀),前缀名不能为:jsp、jspx、java、Javax、sun、servlet和sunw。
这里举个例子加深理解:
<%@taglib uri=”http://java.sun.com/jsp/jstl/core”prefix=”c”%> //这里就表示指定使用一个http://java.sun.com/jsp/jstl/core库中的“c”这个前缀。 |
脚本表示可以可以很方便很灵活地生成页面中的动态内容,特别是Scriptlet脚本。JSP中的脚本表示包括以下三种:声明标识(Declaration)、JSP表达式(Expression)和脚本程序(Scriptlet)。
表达式用于向页面中输出信息,使用格式为:
<%=变量或可以返回值的方法或java表达式> |
特别注意:%和=之间不能有空格
表达式在页面中被转换为Servlet后,转换为了out.println()方法,所以JSP的表达式和JSP页面中嵌入到小脚本程序中的out.println()方法实现的功能相同。如果表达式最终输出的是一个对象,则该对象的toString()方法被调用,表达式将返回该对象的toString()方法的返回内容。
表达式可以应用在JSP页面中的如下位置:
<% String name=”张三”;%> 用户名:<%=name%> |
将生成如下结果:
用户名:张三 |
<% String path=”welcome.jsp”;%> |
将生成如下结果:
<% String name=”login.jsp”;%> |
将生成如下结果:
<% for(int i=1;i<3;i++){%>file<%=i%>: ”> |
将生成如下HTML代码
file1: file2: |
在JSP中可以声明变量或方法,其格式为:
<%! 声明变量或方法的代码 %> |
特别注意:%与!之间不要有空格
声明的语法和java中声明变量的语法是一样的。
在页面中通过声明表示声明的变量和方法,在整个页面内都有效。它们将成为JSP页面被转换为类文件后类中的属性和方法,且会被多线程多用户共享,也就是说,任何一个线程或用户对这个方法或属性的修改都会改变它们的原来的状态。它们的生命周期从创建到服务器关闭后结束。
脚本程序(scriptlet)是在JSP页面中使用“<%”与“%>”标记起来的一段java代码。在脚本程序中可以定义变量、调用方法以及进行各种表达式运算,且每行语句后面都要加分号。在脚本程序中定义的变量在整个页面内都有效,不会被其他线程共享,当前用户对该变量的操作不会影响到其它用户。当变量在页面关闭后就会被摧毁。
脚本程序的格式如下:
<% java 程序片段 %> |
HTML的注释方法也可以使用在JSP文件中。
注释格式如下:
在HTML的注释中可以嵌入JSP表达式。
注释格式如:
通过查看HTML源码可以看到表达式的结果。
使用隐式注释的内容,在HTML查看源码时也看不到,相比起HTML类型的注释来说要安全很多。
注释格式如:
<%--注释内容--%> |
JSP脚本程序本质上就是java代码,在其中使用到的几种注释,和在java 中使用的注释是同一个东西。有//单行注释,有/** …*/文本注释,有/* …*/多行注释。
这些注释都可以直接写在脚本程序中。
在JSP中提供了一系列使用XML语法写成的动作标识,这些标识可用来实现特殊的功能,例如请求的转发、在当前页中包含其它文件、在页面汇总创建一个JavaBEAN实例等。
动作标识是在页面请求中按出现的顺序被执行的。
JSP动作标识的属性前必须要有空格
动作标识通用的使用格式如:
<动作标识名称 属性1=”属性值1” 属性2=”属性值2”…/> |
或
<动作标识名称 属性1=”属性值1” 属性2=”属性值2”…> <子动作 属性1=“值1” 属性2=“值2” …/> 动作标识名称> |
在JSP中提供的常用JSP标准动作有:
|
该动作标识用来向当前的页面中包含其它文件,这个文件可以是动态文件也可以是静态文件。
使用的格式如:
|
或者向被包含的动态页面中传递参数:
|
参数说明:
使用incluse指令包含的页面实际编译时只有一个文件。但是使用
include指令包含的文件,实际上编译只会得到一个.class文件,这种包含过程称为静态包含。
我们说使用include指令包含的页面最终会和主页面合并为一个页面来编译,所以主页面和被包含的页面就要保持同样的一些约定,例如:
某主页面中charset:
<%@page contentType=”text/html”charset=”gb2312”%> <%@include path=”top.jsp”> |
但是包含的页面top.jsp中的charset:
<%@page contentType=”text/html”charset=”utf-8”%> |
两个页面的charset没有保持一致,就会导致编译时抛异常,这时只需要将charset统一就行了。
但是,使用
总结一句话:
使用格式如:
|
如果转发的是一个动态文件,还可以向该文件中传递参数使用格式如:
… |
参数说明:
重点强调:
请求转发时,存储在request对象中的信息会被保留并带到目标的页面中;而请求重定向是重新生成一个request请求,然后该请求定向到指定的URL,所以事先存储在request对象中的信息都不存在了。
使用格式如:
|
属性说明:
通过应用该动作标识可以再JSP页面中创建一个Bean实例,并且通过属性的设置可以将该实例存储到JSP中的指定范围内。如果在指定的范围内已经存在了指定的Bean实例,那么将使用这个实例,而不会重新创建。通过
使用格式如:
id:=”变量名” scope=”page|request|session|application” { //实际大括号是不写进去的 class=”package.className”| type=”数据类型”| class=”package.className”type=”数据类型”| beanName=”package.className”type=”数据类型” }/> |
也可以在标识体内嵌入子标识或其它内容:
|
属性简要说明:
属性 |
说明 |
id |
定义了一个变量名,程序中将使用该变量名对所创建的Bean实例进行引用 |
type |
指定了一个Id属性所定义变量的类型 |
scope |
定义Bean实例的范围,默认值为“page”,其他可选值为request/session/application |
class |
指定一个完整的类名,与beanName属性不能同时存在,若没有设置type属性,那么必须设置class属性 |
beanName |
指定一个完整的类名,与class属性不能同时存在,设置该属性时必须设置type属性,其属性值可以是一个表示完整类名的表达式。 |
属性详细说明:
该属性指定一个变量,该变量必须符合java中的变量命名规则。
type属性用于设置由id属性指定的变量的类型。type属性可以指定要创建实例的类的本身、类的父类或者一个接口。
该属性指定了所创建的Bean实例的存取范围,缺省值为page。
可以使用session对象的getAttribute(“id属性值”)来获取创建的Bean实例。
可以使用application对象的getAttribute(“id属性值”)方法来获取创建的Bean实例。
class属性指定了一个完整的类名,其中package指包的名字,className表示类的文件名称。通过class属性指定的类不能是抽象类,必须具有公共、无参构造方法。
class属性与type属性可以指定同一个类,在
|
这里假设UserBase类为UserInfo类的父类。该标识被执行时,程序先创建了一个以type属性的值为类型,以id属性值为为名称的变量us,并赋值为null,然后再session范围内查找这个us的Bean实例,如存在,则将其转换为type属性所指定的UserBase类型(这个转换必须是合法的)并赋值给us。如实例不存在,那么将通过new操作符来实例化一个UserInfo类的实例并赋值给变量us,最后将变量us存储在session范围内。
beanName属性与type属性可以指定同一个类,它们一起使用时的格式如下:
|
注意:这个默认范围就是session
通常情况下应用
|
如果想要多个页面共享这个实例,将scope值设置为“session”即可。
|
|
对于第一种,无论scope指定的范文内是否存在一个与id属性值相同的实例,
而对于第二种,如果scope指定的范围内已经存在一个与id属性值相同的实例,那么
该标识的使用方法如:
{ //大括号不写进去 property=”*”| property=“propertyName”| property=“propertyName” param=”parameterName”| property=”propertyName” value=”值或表达式” } //大括号不写进去 /> |
属性的简要说明:
属性 |
说明 |
name |
该属性是必需存在的,用来指定一个Bean实例 |
property |
必须存在的属性,可选值为“*”或Bean实例中的属性 |
param |
将param指定的请求中的一个参数赋给peoperty指定的Bean属性 |
value |
将value的值赋给property指定的Bean属性,该属性不能与param一起使用 |
属性详解:
2.property=”*”
请求中的参数与Bean实例中的属性一一对应赋值,如请求中存在空值参数或者请求中没有这个参数,name中的原属性不会被赋null,而是保留原来的值。这种方法要求请求参数与Bean中的属性同名。
底层解析:由于要求请求中参数要与Bean中属性的数据类型一致,但请求是String型的,所以JSP底层会自动将这些请求中的参数转换成对应的数据类型。
propertyName为Bean中的属性。这种方法将传递请求中的指定参数到指定的Bean属性。当Bean中没有对应的setXXX()方法时,将抛异常。同样这种方式也会自动进行数据类型转换。
param指定一个请求中的参数,property指定一个Bean中的属性,这种方法可以使不同名的请求参数赋值给不同名的属性。
value的值可以是一个字符串或是JSP表达式或是EL表达式。
当为字符串时,将自动转换为对应的数据类型。
当为JSP表达式时,要求表达式返回的值必须与property指定的Bean属性一致,否则抛异常。
使用格式如:
|
如果property指定的Bean属性是一个对象,那么这个对象的toString 方法将被调用。
… … |
使用
该标识的使用格式如:
code=”” codebase=”” [name=“”] [archive=””] [align=””] [height=””] [width=””] [hspace=””] [vspace=””] [jreversion=””] [nspluginurl=””] [iepluginurl=””] [ ] [ |
属性简要说明:
属性 |
说名 |
type |
该属性指定了要加载的插件对象的类型,可选值为applet和bean |
code |
指定了加载的java类文件的名称,该名称可包含扩展名和类包名,如“com.applet.MyApplet.class” |
codebase |
默认值为当前访问的JSP页面的路径,多个路径可用分号进行分割 |
archive |
指定预先加载的存档文件的路径,多个路径可用逗号进行分割 |
align |
加载的插件对象在页面中显示时的对齐方式,可选值为bottom、top、middle、left、right |
height和width |
加载的插件对象在页面中的长度和宽度,单位为像素,这两个属性值支持JSP表达式或EL表达式 |
hspace和vsapce |
加载的applet或bean在屏幕或单元格中所留出的空间大小。jspace表示左右,vspace表示上下,他们不支持任何表达式 |
jreversion |
在浏览器中执行applet或bean时所需的java runtime environment的版本,默认值为1.1 |
nspluginurl和iepluginurl |
分别指定了Netscape Navigator用户和Internet Explorer用户能使用的JRE的下载地址 |
|
在该标识中可包含多个 |
|
当加载java类文件失败时,用来显示给用户的提示信息 |
属性详解:
type属性指定了所要加载的插件对象的类型,一般为java appplet小程序或javabean类,该属性没有默认值,必须设置可选值中的一个,否则会抛异常。
code属性指定了加载的java类的文件名称。该名称可包含扩展文件名好类包名。
该属性用来指定code属性指定的java类文件的目录。默认值为当前JSP页面的路径。
比如一个位于根目录下的index.jsp文件,它的代码中包含的
http://localhost:8080/com/applet/myApplet.class |
例如:若当前的Web应用为JSP_Plugin,index.jsp文件位于其根目录下。
index.jsp包含如下代码:
|
那么容器将按照如下路径来查找MyApplet.class文件
http:localhost:8080/JSP_Plugin/com/applet/MyApplet.class |
这两个属性分别指定了Netscape Navigator用户和Internet Explorer用户能够使用的JRE的下载地址。
在该标识内可包含多个
该资料由吃蔬菜的天蝎猫整理自《JSP开发技术大全》明日科技 编著一书。