790 likes | 997 Views
JSP 元素. 本章主要内容. JSP 指令元素 JSP 脚本元素 JSP 动作元素. 2.1 JSP 注释元素. JSP 页面中的注释用于说明程序段的主要作用或程序员的意图,方便日后维护或备忘。 JSP 页面中的注释主要两种: JSP 注释和 HTML 注释。. 2.1 JSP 注释元素. 2.1.1 JSP 注释 JSP 注释也叫隐藏注释或服务器端注释,只有打开 JSP 页面后才能看到它。 JSP 注释中的内容被编译器忽略,不会出现在 Servlet 程序中,也不会返回给客户端浏览器。其基本语法为: <%-- 注释的内容 --%>.
E N D
本章主要内容 • JSP指令元素 • JSP脚本元素 • JSP动作元素
2.1 JSP注释元素 • JSP页面中的注释用于说明程序段的主要作用或程序员的意图,方便日后维护或备忘。JSP页面中的注释主要两种:JSP注释和HTML注释。
2.1 JSP注释元素 • 2.1.1 JSP注释 • JSP注释也叫隐藏注释或服务器端注释,只有打开JSP页面后才能看到它。JSP注释中的内容被编译器忽略,不会出现在Servlet程序中,也不会返回给客户端浏览器。其基本语法为: <%-- 注释的内容 --%>
2.2 JSP注释元素 • 例如: JSP注释在JSP页面上的位置没有统一规定,但习惯上写在程序段前,需要注意:JSP注释属于标记级的注释,不要把它嵌套在类似于“<% %>”的标记内。
2.2 JSP注释元素 • 2.2.2 HTML注释 • HTML注释也叫输出注释,属于HTML标记范畴,也是标记级的注释。其基本语法为: <!-- 注释内容 [<%%>|<%=%>] -->
2.2 JSP注释元素 • HTML注释被JSP编译器视为HTML标记,直接用out.write()方法输出。标记中的注释内容会返回到客户端浏览器,但注释信息不会在浏览器中显示。 • 在HTML注释中,可以使用<%%>或<%=%>等标记输出一些动态的注释信息。
2.3 JSP指令元素 • JSP指令元素(Directive Elements)主要供JSP容器使用,为JSP容器提供相关的页面属性信息,用于指示JSP容器如何正确地翻译代码,或者执行特定的操作。 • JSP指令元素主要包括三个:include、page和taglib,它们的基本语法格式形如: <%@ 指令元素 属性="值" %>
2.3 JSP指令元素 • 2.3.1 include指令元素 1、include指令的基本语法 • include指令元素称为文件包含,是在JSP容器把JSP网页翻译成Servlet程序时,将指定文本文件的内容嵌入Servlet程序中,替换include指令。其基本语法为 <%@ include file="relativeURLspec" %>
2.3 JSP指令元素 • file属性指出被包含资源的URL,可使用相对路径或绝对路径。绝对路径以Web应用的上下文路径名“/xxxx”开头,如:
2.3 JSP指令元素 2、include指令的使用注意事项 • include指令适合于包含静态内容。 • include指令是代码静态绑定,被include指令包含的内容在编译时会被静态地嵌入Servlet程序中 。 • include指令影响JSP页面的可读性。
<%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> <html> <head> <title>ex4-8.jsp</title> </head> <body><center><br><br><br><br> <h1> 现在是北京时间: <%@include file="nowtime.jsp" %> </h1> </body> </html> <%@ page import="java.util.*“ %> <%@ page import="java.util.*" %> <%=new java.util.Date()%> <%= (new java.util.Date() ).toLocaleString() %> 其中nowtime.jsp的源码为 12
2.3 JSP指令元素 • 2.3.2 page指令元素 • page指令用于设置当前JSP页面的属性。 • page指令中的属性大多数只需要在JSP页面中定义一次 。 • page指令中允许重复使用多次的属性有pageEncoding和import属性等。习惯上,把page指令写在JSP页面的头部。
2.3 JSP指令元素 • page指令的基本语法格式如下 <%@ page language="java" extends=" ……." import=" ……." session=" true|false" buffer="none|default|sizekb" autoFlush="true|false" isThreadSafe="true|false" info="…….." isErrorPage="true|false" errorPage="…….." contentType="……." pageEncoding="default" isELIgnored="true|false" %>
2.3 JSP指令元素 1、language属性 • 这个属性定义JSP页面脚本代码所采用的编程语言,默认值为java。 2、extends属性 • JSP页面最终会被JSP容器编译成一个Servlet程序,extends属性用于定义这个Servlet程序的父类。
2.3 JSP指令元素 3、import属性 • import属性用于导入当前JSP页面中要用到的其它Java类。如果要导入多个Java类,用逗号来分隔它们,例如要导入java.util.*和java.io.*,可写为: • 也可以分为两行来写,例如: <%@page import="java.util.*,java.io.*"%> <%@page import="java.util.*"%> <%@page import="java.io.*"%>
2.3 JSP指令元素 4、pageEncoding属性 • pageEncoding定义当前页面的字符编码标准,默认的字符集为ISO-8859-1,如果页面中有简体中文,则字符集应该定义为GB2312或GBK。
2.3 JSP指令元素 5、contentType属性 • contentType属性定义MIME类型(MIME-type)和字符集。 • MIME (Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务)使用简单的ASCII文本来传递E-mail信息, E-mail中允许包含有任意类型的附件文件。
2.3 JSP指令元素 • 给HTTP协议附加了MIME-type信息,用于指明HTTP中所传递信息的数据类型,浏览器接收完数据后,按照数据的类型调用合适的软件来处理这些数据。 • 例如,如果接收到的信息是一个Excel文件,则IE5浏览器会自动启动Excel软件来处理这些信息,如果Excel软件启动失败或客户端找不到Excel软件时,IE浏览器提示用户将接收到的信息另存为文件。
2.3 JSP指令元素 常见的MIME-type类型
2.3 JSP指令元素 • contentType属性的一般用法如下示: <%@ page contentType="text/html; charset=gb2312">
2.3 JSP指令元素 6、session属性 • session属性用来指示JSP页面的Servlet实现类中,是否要生成一个session隐含对象。关于session隐含对象,在后续的章节中有详细的介绍。
2.3 JSP指令元素 7、buffer属性 • out对象是JSP页面的隐含对象之一,用于向客户端返回信息。buffer属性为out对象定义输出流缓冲区,则out.write()输出的信息会暂时存储在缓冲区中,缓冲区被刷新后,其中的信息会通过PrintWriter对象传给客户端。
2.3 JSP指令元素 • 输出缓冲区能够改善系统的性能。buffer属性取值为none时,表示不设缓冲区,则out对象的输出信息会直接传递PrintWriter。当buffer取值为nkb时,表示缓冲区的大小为nKB,默认值为8KB。一个应用样例如: <%@page buffer="64kb"%>
2.3 JSP指令元素 8、autoFlush属性 • 定义out对象缓冲区的刷新属性。autoFulsh取值为true时,表示缓冲区满时自动执行刷新操作,取值为false表示缓冲区满时,抛出一个IOException异常。默认值为true。这个属性一般和buffer属性联合使用,如果buffer="none"时,则autoFlush="true"无效。一个应用样例如: <%@page buffer="2kb" autoFlush="false"%>
2.3 JSP指令元素 9、isThreadSafe属性 • isThreadSafe="true"时,表示JSP编译后所得的Servlet程序以多线程方式工作,采用Servlet多线程方式工作能提高程序的响应速度,减少系统开销。默认值为true。当isThreadSafe="false"时,表示Servlet程序以单线程方式工作。
2.3 JSP指令元素 10、info属性 • 定义JSP页面的信息,如版权、开发日期等,可通过javax.sevlet.Servlet.getServletInfo()方法读取这些信息。一个样例如下示: <body> <%@page info="xxx公司信息部研发,2007-1-9"%> <%=getServletInfo()%> </body>
2.3 JSP指令元素 11、isELIgnored 属性 • isELIgnored="true"时,表示忽略JSP页面中的EL表达式,isELIgnored="false"时表示JSP页面中的EL表达式要被解释和执行。默认值为true。EL表达式是JSP2.0中新增的技术规范,在后续章节有详细的介绍。
2.3 JSP指令元素 12、errorPage属性 • JSP页面如果发生了运行时异常,出错原因、出错的类名、出错的行号、出错的方法名等信息会被封装在异常对象中。errorPage属性用于指明:JSP页面发生运行时异常,则把异常对象传递给指定的出错页处理,errorPage中的值为出错页的URL,可用相对路径或绝对路径表达。此项默认值为空,则运行时异常信息直接显示在浏览器上。应用样例如下示:
2.3 JSP指令元素 <%@ page errorPage="nullString.jsp" %> 或: <%@ page errorPage="/error/nullString.jsp" %> • 当前JSP页面出现运行时异常,服务器会把异常对象传递给nullString.jsp页面处理。 • errorPage属性在JSP页面中只需定义一次,如果定义多次,编译时可能会引发“重复标记”的语法错误。
2.3 JSP指令元素 13、isErrorPage属性 • isErrorPage="true"时,定义本JSP页面为异常对象处理页,特点是当前JSP页面的Servlet实现类中定义有exception隐含对象,接收异常页传递过来的异常信息。exception对象是Throwable类型的,在后续章节中有介绍。 • isErrorPage="false"时,Servlet程序中不定义exception隐含对象。
2.3 JSP指令元素 • 【例2-3】定义一个exam208.jsp页面,运行时会发生异常,并能自动切换至exam209.jsp页面显示出错的类名、方法名、出错原因等信息。操作步骤如下: (1)启动DW8,新建JSP文件exam208.jsp。在exam208.jsp的代码视图中,将第1行中的<%@page %>指令属性修改如下:
2.3 JSP指令元素 • 定义若exam208.jsp发生运行时异常,则转至exam209.jsp页面显示异常信息。 • 在exam208.jsp的<body></body>间输入如下的代码,使exam208.jsp运行时发生对象引用为空的异常: <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="exam209.jsp" %>
2.3 JSP指令元素 • 保存exam208.jsp 第1行: <body> 第2行: <% 第3行: String s=null; 第4行: int i=s.length(); 第5行: %> 第6行: </body>
2.3 JSP指令元素 • (2)在DW8中新建JSP文件exam209.jsp。在exam209.jsp的代码视图中,修改第1行<%@page%>指令,定义当前页为异常对象处理页: <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" isErrorPage="true" %>
2.3 JSP指令元素 • 在exam209.jsp中的<body></body>标记内,添加如下示的代码: 第1行: <body> 第2行: <% 第3行: StackTraceElement a[]=exception.getStackTrace(); 第4行: out.print("出错原因:"+exception+"<br>"); 第5行: out.print("出错的文件:"+a[0].getFileName()+"<br>"); 第6行: out.print("出错的方法名:"+a[0].getMethodName()+"<br>"); 第7行: out.print("出错的行号:"+a[0].getLineNumber()+"<br>"); 第8行: %> 第9行: </body>
2.3 JSP指令元素 • (3)预览。启动Tomcat,预览exam208.jsp页面,结果如图2-3示。
2.3 JSP指令元素 • 在实验过程中,如果exam208.jsp和exam209.jsp中的代码均没有语法错误,但预览exam208.jsp后,异常信息无法显示,只是在IE5浏览器中出现“该页无法显示”的提示,这是服务器传递给IE5的错误信息不足1KB以及IE5的高级选项中设置了“显示友好HTTP错误信息”参数引起,最简单的解决方法是在exam209.jsp页面的<head></head>标记内,加入<!-- - -> 注释标记,在注释标记中多粘贴一些文字,使服务器的返回信息在1KB以上。
2.3 JSP指令元素 • 例如在exam209.jsp的<head></head>标记中,加入以下的注释:
2.3 JSP指令元素 • 2.3.3 taglib指令 1、taglib标记库 • taglib是JSP中实现模型与表示分离的重要机制,一个标记的后台有相关的Java程序与之对应,在JSP页面中使用了一个标记,则表示此处调用相应的Java程序,程序运行结果传回至标记处显示。
2.3 JSP指令元素 • taglib的优势是明显的:它实现了模型与表示的分离,提高了Java代码的可重用性和可维护性,例如要修改代码时,程序员只需要对Java程序进行重新编译,不需要触及网页表示层。 • 在JSP中,标记库主要包括标准标记库和扩展标记库。标准标记库就是常用的JSP动作(JSP Action),例如:<jsp:useBean>、<jsp:include>等。扩展标记库包括JSTL和用户自定义的标记等,在后续的章节中有详细的介绍。
2.3 JSP指令元素 2、taglib指令 • 在JSP页面中可以直接使用JSP动作,但如果要使用扩展标记库,要求在JSP页面头部用taglib指令作出声明。taglib指令的语法格式为: <%@taglib uri="taglibURI" prefix="pre"%>
2.3 JSP指令元素 • 其中uri属性值是待用标记库的URI,每个标记库都有一个唯一的URI,这个URI在标记库的配置文件中已作定义,此处直接引用。prefix属性值是待用标记的前缀,在标记库的配置文件中也已经作定义,此处也是直接引用。例如: <%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql"%> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
2.4 JSP脚本元素 • 2.4.1 声明元素 • 声明元素<%! %>用于声明类成员变量、成员方法或内部类。 1、声明元素的基本语法格式 <%! declaration(s) %>
2.4 JSP脚本元素 2、用声明元素声明类成员变量 • 例如: <%! int x1=100,a[]=new int[6]; static double x2; String str=null; %>
2.4 JSP脚本元素 3、用声明元素声明成员方法 例如: <%! //定义adder()方法计算1+2+...+n int adder(int n) { int sum=0; for(int i=1;i<=n;i++) sum=sum+i; return sum; } %>
2.4 JSP脚本元素 • 2.4.2 脚本小程序 • 脚本小程序就是一段Java代码。在JSP页面中声明脚本小程序的基本语法格式为: • Tomcat把<% %>标记内的Java代码段放在Servlet实现类 _jspService()方法的try{}内,所以在<%%>内定义的变量属于局部变量,并且作用范围仅限于try{}内。如果有多个<% %>标记,则按出现的先后顺序转译到try{}内。 <% scriptlet %>
2.4 JSP脚本元素 • 一个样例如下示:
2.4 JSP脚本元素 • 【例2-4】有一个空白的学生成绩表格如下示,第1行是表格的标题行,第2行起是数据行。第1行标题栏的文字要居中对齐,背景色为浅紫色(#CC66FF)。要求用JSP脚本程序段产生5行数据行,并且奇数号数据行背景色为浅黄色(#FFFF99),偶数号数据行背景色为浅绿色(#33FF66),最终得到一个6行3列的空白学生成绩表。