第5章 JSP基础知识 JSP页面主要由HTML、CSS、Java代码段(脚本元素)、注释、JSP指令和JSP动作等构 成。本章主要讲解JSP页面的基本语法构成。 本章主要内容如下所示。 (1)JSP页面的基本结构。 (2)JSP的注释。 (3)JSP的脚本元素。 (4)JSP的指令。 (5)JSP的动作。 5.1 JSP页面的基本结构 一个JSP页面由以下基本元素组成。 (1)HTML标签。 (2)CSS。 (3)变量和方法。 (4)Java代码段。 (5)JSP动作和指令。 (6)其他脚本元素(如JavaScript)等。 本节通过一个JSP实例,了解JSP页面的基本语法构成。具体的JSP基本语法部分将 在以后的章节里详细介绍。 【例5-1】 JSP页面的基本结构实例(pageStructure.jsp)。 1. <%@page contentType="text/html" pageEncoding="UTF-8"%> 2. <html> 3. <head> 4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5. <title>JSP 页面的基本结构实例</title> 6. </head> 7. <body> 8. <%!int sum=0; 9. int x=1; 10. %> 11. <% 12. while (x <=10) 13. { 14. sum+=x; 15. ++x; 16. } 170 17. %> 18. <p>1 加到10 的结果是:<%=sum%></p> 19. <p>现在的时间是:<%=new java.util.Date()%></p> 20. </body> 21. </html> 本程序的功能是计算1加到10的结果并将结果在页面第一行中显示,在第二行显示当 前系统时间,如图5-1所示。 图5-1 页面运行效果 从例5-1中可以看到,JSP页面除了比普通的HTML页面多一些Java代码、指令和动 作外,两者的基本结构相似。实际上,JSP 基本元素是嵌入在HTML 页面中的,为了和 HTML的标签有所区别,JSP标记都以“<%”或“<jsp”开头,以“%>”或“>”结尾。下面 对该JSP文件进行详细介绍。 第1行是JSP的page指令,它描述JSP文件转换成JSP服务器所能执行的Java代码 的控制信息,如JSP页面所使用的语言、对处理内容是否使用缓存、是否线程安全、错误页 面处理、指定内容类型、指定页面编码方式等。例如,contentType="text/html"用于指定 内容类型,pageEncoding="UTF-8"用来指定页面的编码方式。 第2~7行是一些HTML常用的标签,在第3章中已介绍,这里不再赘述。 第8~10行是JSP中的声明。JSP页面中用到的变量和方法与Java程序中用到的变 量和方法的声明是相同的,不过在JSP页面中声明以“<%!”或者“<%”开头,以“%>”结尾。 本例中对两个整型变量的声明并初始化,也可以写成“<%!intsum=0;intx=1;%>”。 第11~17行是JSP中的程序代码,即JSP中的脚本。JSP的程序代码封装了JSP页面 的业务处理逻辑———Java代码程序,以“<%”开头,以“%>”结尾。 第12~16行是一段标准的Java程序,其功能是对1加到10的计算。 第18行,“<p>1加到10的结果是:<%=sum%></p>”中的“<%=sum%>”是表 达式,在JSP中表达式以“<%=”开头,以“%>”结尾。本行语句用于输出1加到10的结果。 第19行,“<p>现在的时间是:<%=newjava.util.Date()%></p>”中的“<%= newjava.util.Date()%>”是使用表达式以及Java类库中的Date类获取系统的当前时间。 第20、21行是HTML的基本标签。 通过上面典型的JSP页面可以看出,JSP页面就是在HTML 或者XML 代码中嵌入 Java语法或者JSP元素,从而实现系统的业务功能,这一点读者将会在以后的学习中有更 171 深刻的体会。 想一想:JSP页面设计要遵循既定的语法规则和开发规范。你对软件开发规范的重要 性有什么认识? 作为一名软件工程师,你认为应该遵循哪些工程职业道德规范? 5.2 JSP的3种常用注释 程序中注释的作用是为了提高程序的可读性、可维护性和可扩展性,所以一个Java Web项目中需要各种各样的注释。在JSP中注释有3种类型:隐藏注释、HTML注释和 Java语言注释。下面分别介绍这3种注释的使用。 5.2.1 隐藏注释及其应用实例 隐藏注释是JSP的标准注释,写在JSP程序中,用于描述和说明JSP程序代码,在发布JSP 网页时完全被忽略,也不会输送到客户浏览器上。当希望隐藏JSP程序的注释时是很有用的。 其语法格式为 <%--注释语句--%> 注释语句为要添加的注释内容。 【例5-2】 隐藏注释实例(hideNotes.jsp)。 <%@page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>隐藏注释实例</title> </head> <body> <h3>本页面是演示隐藏注释的功能,在JSP 页面中的隐藏注释不会发布到客户端! </h3> <hr> <%--这一行注释在发布网页时不会被看到--%> <hr> </body> </html> hideNotes.jsp运行效果如图5-2所示。在发布网页时看不到注释,在客户端浏览器源 文件中也看不到注释。在浏览器中查看源文件的方法:单击“查看”→“源文件”命令。 5.2.2 HTML注释及其应用实例 HTML注释在发布网页时可以在浏览器源文件窗口中看到,即注释的内容会被输送到 客户端的浏览器中。该注释中也可以使用JSP的表达式。 其语法格式为 <!--注释语句[ <%=表达式%>] --> JSP常用 注释 172 图5-2 hideNotes.jsp的运行效果以及源文件 其中,注释语句是文字说明,表达式为JSP表达式。 【例5-3】 HTML注释实例(HTMLNotes.jsp)。 <%@page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>HTML 注释实例</title> </head> <body> <h3>本页面是演示HTML 注释的功能,在JSP 页面中的HTML 注释会在客户端源文件中看 到,但是不会发布到页面上! </h3> <hr> <!--这一行注释在发布网页时不会被看到,在源文件中可以看到<% = new java.util. Date()%>--> <hr> </body> </html> HTMLNotes.jsp的运行效果如图5-3所示。在发布网页时看不到注释,但在源文件中 可以看到注释,而且表达式是动态的,即根据表达式的值输出结果。 5.2.3 Java注释及其应用实例 在JSP程序中,也可遵循Java语言本身的注释规则对代码进行注释,这样的注释和隐 藏注释相似,在发布网页时完全忽略,在浏览器的源文件窗口中也看不到注释内容。 173 图5-3 HTMLNotes.jsp的运行效果以及源文件 其语法格式为 <%/*注释语句*/%> 或者 <%//注释语句%> 其中,注释语句为要添加的注释文本。 【例5-4】 Java注释实例(JavaNotes.jsp)。 <%@p3age contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Java 注释实例</title> </head> <body> <h3>本页面是演示Java 注释的功能,在JSP 页面中的Java 注释不会发布到客户端! </h3> <hr> <%//这一行注释在发布网页时不会被看到,在源文件中也看不到%> <hr> </body> </html> JavaNotes.jsp的运行效果如图5-4所示。在发布网页时看不到注释,在源文件中也看 不到注释。 174 图5-4 JavaNotes.jsp的运行效果以及源文件 5.3 JSP常用脚本元素 在JSP页面中,经常使用一些变量、方法、表达式以及脚本,下面分别介绍这些基本元 素的使用。 5.3.1 变量和方法的声明及其应用实例 在JSP页面中可以声明一个或者多个合法的变量和方法,声明后的变量和方法可以在 本JSP页面的任何位置使用,并将在JSP页面初始化时被初始化。 语法格式为 <%!语句1; …;[ 语句n; ] %> 其中,语句主要用来声明变量、方法。 在声明变量和方法时,需要注意以下几点。 (1)声明以“<%!”或者“<%”开头,以“%>”结尾。 (2)变量声明必须以“;”结尾。 (3)变量和方法的命名规则与Java中变量和方法的命名规则相同。 (4)可以直接使用在<%@ page%>中被包含进来的已经声明的变量和方法,不需要 重新声明。 (5)一个声明仅在一个页面中有效。如果想在每个页面都用到某些声明,最好把它们 写成一个单独的文件,然后用<%@include%>指令或<jsp:include>动作包含进来。 例如: <%! int i=0;%> JSP常用脚 本元素 175 <%! int x ,y,z,a,b,c,sum;%> <%! String str="北京!";%> <%! Date date=new java.util.Date();%> 【例5-5】 变量和方法的声明实例(declare.jsp)。 <%@page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>变量和方法的声明实例</title> </head> <body> <%! String str="JSP 技术带你走进动态网页开发时代!"; //变量声明 %> <%! String print(){ //方法声明 return str; } %> <%=print()%> </body> </html> declare.jsp的运行效果如图5-5所示。 图5-5 declare.jsp的运行效果 在declare.jsp中声明了一个字符串变量str和一个方法print(),该方法用来返回字符 串变量str的值。 5.3.2 表达式和脚本及其应用实例 1.表达式及其应用实例 JSP中的表达式是由变量、常量和运算符组成,可以将数据转换成一个字符串并直接在 网页上输出。 表达式的语法格式为 <%=表达式%> JSP的表达式中没有分号。 176 JSP的表达式常用在以下几种情况。 (1)向页面输出内容。 (2)生成动态的链接地址。 (3)动态指定form 表单处理页面。 注意:在“<%”与“=”之间不要有空格。 【例5-6】 表达式实例(expression.jsp)。 <%@page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>表达式实例</title> </head> <body> <%! String name="清华大学出版社"; String urlAddress="www.tup.tsinghua.edu.cn"; String page="www.sohu.com"; %> <br> 用户名: <%=name%> <br> <a href="<%=urlAddress%>">清华大学出版社网站</a> <br> <form action="<%=page%>"> </form> </body> </html> 本例演示了表达式的几种常用方式,expression.jsp的运行效果如图5-6所示。 图5-6 expression.jsp的运行效果 2.脚本及其应用实例 JSP脚本即Script,也就是JSP中的代码部分,是一段Java代码,几乎可以使用任何 Java语法,它是在请求期间执行,可以使用JSP 页面所定义的变量、方法、表达式或者 JavaBean。脚本定义的变量和方法在当前整个页面内有效,但不会被其他线程共享,用户对 该变量的作用不会影响其他用户,当变量所在页面关闭时该变量就会被销毁。 脚本的语法格式为 <%脚本语句%> 177 【例5-7】 脚本实例(scriptlet.jsp)。 <%@page contentType="text/html" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>脚本实例</title> </head> <body> <%! int x=6; %> <table> <% if(x==1){ %> <tr> <td>欢迎登录,您的权限是管理员!<td/> </tr> <% } else{ %> <tr> <td>欢迎登录,您的权限是普通用户!<td/> </tr> <% } %> </table> </body> </html> scriptlet.jsp的运行效果如图5-7所示。 图5-7 scriptlet.jsp的运行效果 JSP中大部分功能的实现可以通过JSP脚本实现。使用脚本程序比较灵活,它所实现 的功能是JSP表达式无法实现的,所以脚本在JSP中非常重要。有关JSP脚本的内容在以 后的章节中涉及很多,读者可以在今后的开发中不断学习和应用。 178 5.4 JSP常用指令 指令(Directive)描述JSP文件转换成JSP服务器所能执行的Java代码的控制信息,用 于指定整个JSP页面的相关信息,并设置JSP页面的相关属性。 常用的JSP指令有3种:page指令、include指令和taglib指令。 5.4.1 page指令及其应用实例 page指令用来定义JSP文件中的全局属性,它描述了与页面相关的一些信息,其作用 域为它所在JSP页面和其包含的文件。页面指令一般位于JSP页面的顶端,但是可以放在 JSP页面的任何位置,无论把<%@ page%>指令放在JSP文件的哪个地方,它的作用范 围都是整个JSP页面。为了JSP程序的可读性以及养成良好的编程习惯,最好把它放在 JSP文件的顶部。 在同一个JSP 页面中可以有多个page指令。在使用多个page指令时,其属性除 import属性外只能使用一次。 page指令的语法格式如下: <%@page [ language="java" ] [ extends="package.class" ] [ import="{package.class|package.*}, ..." ] [ session="true|false" ] [ buffer="none|8KB|sizeKB" ] [ autoFlush="true|false" ] [ isThreadSafe="true|false" ] [ info="text" ] [ errorPage="relativeURL" ] [ contentType="mimeType [ ;charset=characterSet ]" ] [ pageEncoding=" pageEncoding "] [ isErrorPage="true | false" ] %> 下面分别对这些属性的含义和用法进行介绍。 1.language属性 【功能说明】 language属性用于指定JSP页面中使用的脚本语言,其默认值为Java。 根据JSP2.0规范,目前只可以使用Java语言。 例如: <%@page language="java" %> 如果language属性指定了其他的脚本语言,将会产生异常。 2.extends属性 【功能说明】 extends属性用于指定JSP编译器父类的完整限定名,此JSP页面产生 的Servlet将由该父类扩展而来。 例如: JSP常用 指令