JSP基本语法

来源:互联网 发布:it部门管理软件 编辑:程序博客网 时间:2024/06/07 14:04


JSP基本规范

1. 页面构成

JSP原始代码中高喊了模板元素和JSP元素。模板元素之的是不需要经过JSP容器特殊处理、直接发送到客户端的所有非JSP元素的其他内容,例如HTML、JavaScrapt/CSS等。JSP元素则指的是由JSP引擎直接处理的部分,这一部分必须符合JSP语法规范,否则会导致编译错误。JSP元素主要包括一下几个方面。

  • 脚本元素(Scripting Elements):声明、脚本段、表达式。
  • 注释指令(Comment Elements):HTML注释、Java注释、JSP隐式注释。
  • 指令元素(Directive Elements):page、include、taglib 等
  • 动作元素(Action Elements):jsp:include、jsp:forward、jsp:useBean等。
在传统的HTML页面文件中加入Java程序片段和JSP标签就构成了一个JSP页面文件,JSP页面中的程序片段代码是以<%和%>作为开始和结束标记的。

2. 命名规范

JSP页面文件的扩展名用.jsp来表示,文件的命名必须符合标识符规定,并且大小写敏感。JSP页面可以由客户端直接请求,也可以被其他JSP页面或Servlet包含或重定向。

3. 属性值

JSP中使用的JSP元素包括指令元素、动作元素等都可以指定属性。属性值的格式遵循XML规范,通常是放在双引号中。属性值可以有两种:文字属性值和表达式,但引号的使用规则是一致的。


JSP脚本元素

在JSP页面中,脚本元素使用得最为频繁,因为他们能很方便、灵活得生成页面中的动态内容,特别是Scriptlets脚本段程序。JSP2.0中保留了JSP旧版本的3个给予语言的脚本类型:脚本段(Scriptlets),声明(Declarations)和表达式(Expressions)。另外还引入了新的脚本元素:EL(表达式语言)。

1. 脚本段

脚本段是以<%开始,以%>结束的,中间包括一段合法的Java代码。在脚本段中可以定义变量、调试方法和进行各种表达式运算,并且每行语句后面要加上分好。在代码段内定义的变量只在当前的整个页面内有效,属于页面内的局部变量,当前用户对该变量的操作不会影响到其他用户。
脚本段的使用语法如下:
<% 合法的Java代码片段 %>
每个JSP页面中都可以使用任意数量的脚本段,这些脚本段在请求处理时在服务器端按顺序执行,是否产生输入,由脚本段中的代码决定。脚本段能够完成的功能有:
(1)声明将要用到的局部变量。
(2)使用out对象显示输出信息。
(3)使用JSP的任何内置对象和任何声明过的对象。
(4)当JSP页面接受到客户端请求时,脚本段就会自动执行。
由于脚本段中定义的变量是页面内的局部变量,因此,每次调用该页面时都会显示同样的结果。

2. 声明

在JSP页面中,声明是一段Java代码,它用来定义JSP文件转换后的Servlet文件中类的属性和方法。声明后的变量和方法可以在JSP页面的任何地方使用,并且它们仅在当前页面内有效。声明不会产生任何输出内容。
声明语法格式如下:
<%! 声明1;声明2;..... %>
当JSP页面初始化时,就会初始化声明,从而可以被其他的脚本元素如脚本段、表达式和表达式语言等所使用。
声明变量:声明定义的变量是页面内的全局变量,这些变量的内存空间直到服务器关闭时才释放。也就是说,任何一个用户对JSP页面的全局变量操作的结果都会影响到其他用户。对于局部变量,则在脚本段中定义。例如<%! int a=1,b=2; %>  <%! String name="zhang"; %>
注意:每个声明仅在一个JSP页面中有效,若想在多个JSP页面中有效,可以将声明写在一个JSP页面中,然后使用include指令将其包含在每个JSP页面中。

3. 表达式

表达式以<%=开始,以%>结束,中间为一个合法的Java表达式,用来将中间表达式的内容输出到页面。表达式是在请求包含比大师的JSP页面时计算它的值,所得的结果转换成String类型的字符串并与模板数据组和在一起,按照先后顺序依次将结果值输出到浏览器中。计算按照从左到又的顺序进行。
使用表达式的语法格式如下:
<%= 符合Java语法的不完整的Java语句(结尾不带分好)%>
例如:<%= 1+2+3 %>   <%= "abc" %>
注意:表达式开始标记<%=之间没有任何空格,不能写成< % =。由于表达式不是完整的Java语句,所以在表达式的后面不能放置“;”。


注释元素

注释可以增强JSP文件的可读性,易于JSP文件的维护,也可以用来去掉代码段,以方便程序员编码测试。JSP中的注释可分为3种:HTML注释、Java语言注释、JSP隐含注释。

1. HTML注释

在标记符号"!--"和"-->"之间加入注释内容,JSP页面可以直接使用HTMlL注释。
例如:<!-- 这里是HTML注释 -->
JSP引擎把HTML注释交给客户端,因此客户通过浏览器查看JSP生成的HTML结果界面是,能够看到HTML注释。

2. Java语言注释

由于JSP中脚本段<% %>内的代码是基于Java语言的,因此,在JSP中同样可以使用Java语言中的注释机制,不会受到任何影响。使用Java语言注释机制完成的注释,其注释内容在JSP容器自动生成的Servlet源文件中会保留下来,但是在浏览器端是看不到任何Java注释信息的。
脚本段内的Java代码,使用Java注释的语法格式为:
  • 单行注释://
  • 多行注释:/* ... */

3. JSP隐含注释

JSP中的注释通常是给开发人员测试或屏蔽Java代码段使用的,而不是给客户端使用的。这种特殊的注释是在JSP代码中使用"<%--"和”--%>"来实现的。使用JSP隐含注释的内容不仅在浏览器端看不到,甚至在JSP容器自动生成的Servlet源代码中也不会看到。隐含注释的语法格式如下:
<%-- 开发人员专用的隐含注释 --%>

指令元素

指令元素在客户端是不可见的,它是被服务器解释并执行的。通过指令元素可以使服务器按照指令的设置来执行动作和设置整个JSP页面范围内有效的属性。在一个指令中,可以设置多个属性,这些属性的设置可以影响整个页面。指令元素并不产生任何页面输出信息。
JSP中主要包括3中指令元素:page指令、include指令和taglib指令。
指令通常以"<%@"标记开始,以"%>"标记结束。例如<%@ 指令名 属性1=”值1“ 属性2=”值2“ ...%>

1. page指令

page指令即页面指令,用来定义整个JSP页面的一些属性和这些属性的值。水库性值总是用单引号或双引号括起来,例如:

<%@ pagelanguage="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>

page指令可以放在JSP页面中的任意行,但为了便于程序代码的阅读,习惯上放在文件的开始部分。page指令有多种属性,通过这些属性的设置可以影响当前的JSP页面。

page指令的属性包括:language、import/contentType、pageEncoding、pageEncoding、session、buffer、autoFlush、isThreadSafe、info、errorPage、isErrorPage和isELIgnored等。import属性和pageEncoding属性可以指定多次,但其他属性只能指定一个值,否则会导致转换错误。

page指令的作用对整个页面有效,与其位置无关,但由于属性pageEncoding和contentType决定页面的字符编码,因此习惯设置在页面的开始位置。

属性:

1.language属性

langage属性指定JSP中使用脚本元素是会采用何种语言。目前容器已实现的脚本语言只有Java变成语言,表示脚本的语法必须符合Java语言规范。将来JSP版本会支持其他的脚本语言。该属性的默认值为Java,所有,一般情况下,没有必要再指定这个属性。
2.pageEncoding属性
pageEncoding属性用来指定JSP页面的字符编码,默认值为西欧字符编码ISO-8859-1,该编码方式不支持中文。如果指定JSP页面的字符编码方式支持中文编码,则需要将page指令的pageEncoding属性值设置为“GB2312"、"GBK"、或"UTF-8"。
3.contentType属性
contentType属性用来指定JSP输出内容的类型和字符编码方式。属性值中内容类型部分可以为text/html(纯文本的HTML页面)、text/plain(纯文本文件)、application/msword(Word文件)、application/x-msexecl(Excel文件)等,默认值为text/html。属性值中编码方式部分可以为“GB2312"、"GBK"、或"UTF-8"等。使用contentType属性的格式为:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
4.info属性
info属性用来指定给有关页面的描述信息,属性值可以是任意字符串,如当前页面的坐着、版本、版权或其他有关的页面信息。在JSP页面中可以使用getServletInfo()方法获取info属性值。
5.import属性
import属性用来为JSP页面导入该页面所需要的Java类包,这样就可以在JSP页面的程序片部分、变量及函数声明部分、表达式部分使用包中的类。
在JSP中有些Java类包是有import属性默认导入的,不需要声明就可以使用。默认值包括:java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*。
6.session属性
session属性用来设置当前页面session内置对象是否可用。该属性默认值为true,表示当前页面支持session;
7.errorPage属性
errorPage属性的属性值通常是一个JSP的URL,用来指定异常处理页面。当当前页面运行发生异常时,在当前页面处理不了这个异常的情况下 ,JSP容器就会执行该属性指定的页面,并将指定页面的处理结果返回到浏览器中显示。
8.isErrorPage属性
isErrorPage属性用来指定当前JSP页面是不是异常处理页面。该属性通常与errorPage属性结合使用,用以处理JSP中的异常。当isErrorPage属性值设置为true时,才可以在该页面使用exception异常处理对象的相关方法来获取JSP页面的出错原因等信息。
9.buffer属性
buffer属性用来设置out对象的缓冲区的大小或不使用缓冲区。若buffer属性取值为“none”表示不使用缓冲区,而直接通过PrintWriter对象进行输出。若buffer属性指定为数值,则输出缓冲区的大小不应小于小于该值。buffer属性默认值是8KB。使用buffer属性指定的大小只是缓冲区的最小值,JSP容器选择的缓冲区大小可能比指定的值大。
10. autoFlush属性
autoFlush属性用来指定当out对象的缓冲区被填满时,缓冲区是否自动刷新。
autoFlush是布尔类型的,默认值是true,表示当缓冲区已满时,自动将其中的内容输出到客户端。当autoFlush属性值为false时,如果out对象的缓冲区已满,就会出现缓存溢出异常。
当buffer属性取值为“none”时,autoFlush属性的值就必须设置为true。
11. isELIgnored属性
isELIgnored属性用来控制是否禁止EL表达式使用,属性值为布尔类型,如果属性值为true,则表示此JSP页面中禁止使用EL表达式。

2. include指令

JSP中include指令的作用是在JSP页面出现该指令的位置处,静态包含一个文件。被包含的文件必须是可访问和可使用的,即被高喊的文件内容可以被JSP解析。该文件必须和当前JSP页面在同一个Web应用中。

所谓静态包含,就是当前JSP页面和插入的部分合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java类文件。此种静态包含文件的方法执行效率高。

在实际应用中,往往在所有页面中使用同一的HTML头格式,如果将这一部分定义在单独文件中,其他页面就可以使用include指令包含该文件了。
<%@ include file="filename" %>

3. taglib指令

taglib指令用于向JSP页面中引入所需要使用的标记库的定义,这个指令还可以给标记库指定一个前缀,当JSP页面中用到标记库中的标记是,就使用这个前缀来表示所有这些标记。
在页面中使用taglib失灵可以方便地滴啊用标记库中定义的任意标记,以达到简化页面代码的目的。
艾taglib指令中使用uri属性指定标记库的uri地址,使用prefix属性定义标记库的前缀。在JSP页面中使用标记时,一般格式为<前缀:标记名>,标记名为标记库中定义过的标记的具体名称。
<%@ taglib uri="标记库的uri地址" prefix=前缀名" %>

动作元素

在JSP中提供了一系列使用XML定义的动作标记,这些标记可用来实现特殊的功能,例如转发请求,页面内跳转,在当前页面中包含其他源文件、在页面中创建JavaBean实例等。
与指令元素不同的是,指令元素是在翻译阶段被执行的,用来设置整个JSP页面;动作元素是在JSP页面的执行阶段按照在页面中出现的顺序被执行的,只有它们被执行时才会实现自己的功能。JSP动作元素能够影响输出流和对象的创建、使用、修改等,使用的标记遵循XML元素的语法格式。

1. <jsp:include>和<jsp:param>

<jsp:include>动作元素用于向当前页面中包含其它文件,这个文件可以是静态文件,也可以是动态文件。该元素的语法格式如下
<jsp:include page="被高喊的JSP页面的路径" flush="true|false"/>
<jsp:include page="被高喊的JSP页面的路径" flush="true|false">
{<jsp:param name="name" value="value"/>}
</jsp:include>

<jsp:param>自动做用于向被包含的动态页面中传递参数。

2. <jsp:forward>

<jsp:forward>动作元素用于运行时在服务器端结束当前的页面的执行,并从当前页面转向指定页面。转向的目标页面可以是静态HTML页面、JSP页面或Java Servlet类。
<jsp:forward>动作是在服务器端完成的,在浏览器端地址栏中的内容并不会改变。
<jsp:forward>动作只包含一个page属性,可以使用<jsp:param>元素来指定参数列表。
例: <jsp:forward page="相对路径URL“/>
<jsp:forward page="相对路径URL">
<jsp:param name="name" value="value"/>
</jsp:forward>