21天学通Java Web开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第二篇 JSP 2.0开发篇

第3章 JSP指令元素

本章将详细介绍JSP的指令元素,包括page指令、include指令及taglib指令。将介绍如何通过 page 指令来声明所使用的脚本语言种类、指定导入的Java 包等。还将介绍如何通过include指令来包含各类文件。

通过本章的学习,读者应该能够完成如下几个目标。

· 熟练使用page指令及各属性的配置。

· 熟练使用include指令来包含各种文件。

· 了解使用taglib指令来引入标签库,并定义其前缀。

3.1 page指令

page指令主要用来设定JSP页面的全局属性,该配置将作用于整个JSP页面,甚至包括静态包含的文件。其语法格式如下。

        <%@ page属性1 = “属性值1”属性2 = “属性值2”%>

page指令包含13个属性,如表3-1所示。

表3-1 page指令包含的属性及属性的配置作用

下面将通过示例来介绍各属性的配置及作用。

3.1.1 language属性

language属性主要用来声明所使用的脚本语言种类,目前暂时只能使用Java语言。不过不排除以后可以使用如C、C++或其他语言的可能。language属性的默认值也是java。其属性配置语法格式如下。

        <%@ page language="java">

【范例3-1】示例代码3-1是一个简单的language属性配置示例。

示例代码3-1 TestLanguage.jsp

        01  <%@ page language="java"%>
        02  <html>
        03  <head>
        04       <title>TestLanguage</title>
        05  </head>
        06  <body>
        07       <%
        08           out.println("Test Language!");  //输出Test Language!语句
        09       %>
        10  </body>
        11  </html>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/TestLanguage.jsp,打开页面如图3-1所示。

图3-1 TestLanguage.jsp执行结果

【代码解析】示例代码第1行通过“<%@ page language="java"%>”声明该JSP使用的语言为Java语言。

3.1.2 extends属性

extends属性用来指定该JSP页面生成的Servlet继承于

哪个父类,设定时必须指定该类的全名,即包名加类名。一般很少使用,而且必须慎重使用,否则可能限制JSP的编译能力。其属性配置语法格式如下。

        <%@ page extends="继承的父类"%>

3.1.3 import属性

import属性用来指定导入的Java包,和Java语言基础中的import语句作用类似。不过有些包在JSP编译时就已经导入了,可以不用再导入,默认导入的包如下。

        java.lang.*;
        javax.servlet.*;
        javax.servlet.jsp.*;
        javax.servlet.http.*;

import属性的配置语法格式如下。

        <%@ page import="导入的包名" %>

【范例3-2】示例代码3-2是一个简单的import属性配置示例。

示例代码3-2 TestImport.jsp

        01  <%@ page language="java" import="java.util.*"%>
        02  <html>
        03  <head>
        04       <title>TestImport</title>
        05  </head>
        06  <body>
        07       <%
        08           Date now = new Date();    //声明一个Date实例化对象
        09           out.println(now);         //输出当前时间
        10       %>
        11  </body>
        12  </html>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/TestImport.jsp,打开页面如图3-2所示。

图3-2 TestImport.jsp执行结果

【代码解析】示例代码第1行通过使用page指令的import属性导入“java.util.*”包。第8行通过“Date now = new Date();”创建了一个Date实例对象now,第9行通过“out.println(now);”对now进行输出,这时将会在网页上打印输出当前的日期及时间信息。

3.1.4 session属性

session属性用来指定该JSP页面中是否可以使用session对象。如果设置为true,则表示该JSP页面中可以使用session对象;如果设置为false,则表示该JSP页面中不可以使用session对象。session属性的默认值为true。其属性配置语法格式如下。

        <%@ page session="true | false "%>

3.1.5 buffer属性

buffer属性用来指定输出流是否具有缓冲区,并设置缓冲区大小。如果设置为none,则表示输出流不具有缓冲功能;如设置为具体的数据,如“40KB”,则表示设置的缓冲区大小为40KB。其默认值为8KB。其属性配置语法格式如下。

        <%@ page buffer="none | 40KB"%>

3.1.6 autoFlush属性

autoFlush属性用来指定缓冲区是否自动进行强制输出。如果设置为true,那么当缓冲区满的时候仍然能够输出正常;如果设置为false,那么当缓冲区满的时候,将会产生异常。如果buffer属性设置为none,那么就不能将autoFlush属性设置为false。autoFlush属性的默认值为true。其属性配置语法格式如下。

        <%@ page autoFlush="true | false"%>

3.1.7 isThreadSafe属性

isThreadSafe属性用来指定该JSP文件是否支持多线程使用。如果设置为true,则表示该JSP文件支持多线程的使用,也就是表示该JSP文件能够同时处理多个用户的请求;如果设置为false,则表示该JSP文件不支持多线程的使用,也就是表示该JSP文件只能一次处理一个用户的请求。isThreadSafe属性的默认值为true。其属性配置语法格式如下。

        <%@ page isThreadSafe="true | false"%>

3.1.8 info属性

info属性用来设置该JSP文件的相关信息,可以是任何的信息字符串,并通过Servlet.getServletInfo方法来取得该信息。其属性配置语法格式如下。

        <%@ page info="JSP文件相关信息%>

【范例3-3】示例代码3-3是一个简单的info属性配置示例。

示例代码3-3 TestInfo.jsp

        01  <%@ page info="this is jsp"%>
        02  <html>
        03  <head>
        04       <title>TestInfo</title>
        05  </head>
        06  <body>
        07       <%
        08           String str = getServletInfo();     //声明字符串str
        09           out.println(str);                  //输出str值
        10       %>
        11  </body>
        12  </html>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/TestInfo.jsp,打开页面如图3-3所示。

图3-3 TestInfo.jsp执行结果

【代码解析】示例代码第1行通过使用page指令的info属性设置该JSP的相关信息为“this is jsp”。第8行通过“String str =getServletInfo();”获得该JSP的相关信息并赋值给str字符串。第9行通过“out.println(str);”对str字符串进行输出,这时将会在网页上打印输出str字符串内容。

3.1.9 errorPage属性

errorPage属性用来设置在当前JSP文件发生异常错误时,网页重新跳转到能够处理异常的JSP文件。其属性配置语法格式如下。

        <%@ page errorPage="错误处理页面"%>

3.1.10 isErrorPage属性

isErrorPage属性用来指定该JSP文件是否为能够处理异常的JSP文件,其默认值为false。其属性配置语法格式如下。

        <%@ page errorPage="true | false"%>

3.1.11 contentType属性

contentType属性用来指定该JSP文件的MIME格式,以及网页编码格式。其属性配置语法格式如下。

        <%@ page contentType="text/html;charset=ISO-8859-1"%>

【范例3-4】示例代码3-4是一个简单的contentType属性配置示例。

示例代码3-4 TestContentType.jsp

        01  <html>
        02  <head>
        03       <title>TestContentType</title>
        04  </head>
        05  <body>
        06       <%
        07           String str = "你好!JSP";       //声明字符串str
        08           out.println(str);              //输出字符串str值
        09       %>
        10  </body>
        11  </html>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/TestContentType.jsp,打开页面如图3-4所示。

图3-4 TestContentType.jsp执行结果

【代码解析】示例代码第7行通过“String str = "你好!JSP";”声明了一个字符串str,其值为“你好!JSP”。第8行通过“out.println(str);”对str字符串进行输出,这时将会在网页上打印输出str字符串内容。这时候发现网页上显示的中文为乱码,这是因为JSP使用的默认编码格式为“ISO-8859-1”。这时只需要通 过设定page 指令的contentType属性为“text/html;charset=gb2312”,就可以正常地显示中文,显示效果如图3-5所示。

图3-5 TestContentType.jsp执行结果

3.1.12 pageEncoding属性

pageEncoding属性用来指定网页的编码格式。其属性配置语法格式如下。

        <%@ page pageEncoding=" ISO-8859-1"%>

【范例3-5】示例代码3-5是一个简单的pageEncoding属性配置示例。

示例代码3-5 TestPageEncoding.jsp

        01  <%@ page pageEncoding="gb2312"%>
        02  <html>
        03  <head>
        04       <title>TestPageEncoding</title>
        05  </head>
        06  <body>
        07       <%
        08           String str = "欢迎大家来到JSP王国!";    //声明字符串str
        09           out.println(str);                        //输出字符串str值
        10       %>
        11  </body>
        12  </html>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/TestPageEncoding.jsp,打开页面如图3-6所示。

图3-6 TestPageEncoding.jsp执行结果

【代码解析】示例代码第1行通过“<%@ page pageEncoding="gb2312"%>”来设定网页的编码格式为“gb2312”。第8行通过“String str = "欢迎大家来到JSP王国!";”声明了一个字符串str,其值为“欢迎大家来到JSP王国!”。第9行通过“out.println(str);”对str字符串进行输出,这时将会在网页上打印输出str字符串内容,并且不会出现中文乱码的情况。

3.1.13 isELIgnored属性

isELIgnored属性用来指定该JSP文件是否支持EL表达式。如果设置为true,则表示JSP文件将忽略EL表达式,也就是EL表达式不会被执行;如果设置为false,则表示EL表达式不会被忽略,该EL表达式将会被执行。其属性配置语法格式如下。

        <%@ page isELIgnored="true | false"%>

3.2 include指令

include 指令用于在JSP文件中插入一个包含文本或代码的文件。包含的文件可以是一个HTML文件,或者是一个文本文件,当然也可以是一个JSP文件。

使用include指令包含文件,将会被包含的文件所执行的结果插入到JSP文件放置include指令的位置。只有当被包含的文件执行完成后,该JSP文件才会恢复执行。

include指令的语法格式如下。

        <%@ include file="被包含文件地址"%>

其中include指令只有一个属性值,也就是file,其属性值为被包含文件的URL地址。

3.2.1 包含文本文件

使用include指令包含文本文件非常简单,只需通过file属性指定被包含的文本文件的URL地址即可。

【范例 3-6】范例3-6是一个简单的包含文本文件示例。其包含两个文件,一个是用来包含文本文件的IncludeTXT.jsp,代码为示例代码3-6(A);一个是被包含的文本文件,代码为示例代码3-6(B)。

示例代码3-6(A) IncludeTXT.jsp

        01  <%@ page language="java" contentType="text/html;charset=gb2312"%>
        02  <html>
        03  <head>
        04       <title>包含文本文件</title>
        05  </head>
        06  <body>
        07       包含文本文件,文件内容如下。<br>
        08       <%@ include file="content.txt"%>
        09  </body>
        10  </html>

示例代码3-6(B) context.txt

        hello World

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/IncludeTXT.jsp,打开页面如图3-7所示。

图3-7 IncludeTXT.jsp执行结果

【代码解析】示例代码IncludeTXT.jsp第8行通过使用include指令包含content.txt文本文件。当JSP执行到第8行时就会将content.txt文本文件的内容进行输出,并最终显示在页面上。

修改其中被包含的文本文件content.txt的代码如下。

        JSP世界欢迎你

这时候再运行IncludeTXT.jsp,页面如图3-8所示。

图3-8 显示中文乱码

这时候发现页面显示出现了中文乱码问题,要解决该问题,只需在该文本文件的第一行加入如下代码。

        <%@ page contentType="text/html;charset=gb2312"%>

这时候再运行IncludeTXT.jsp,就能正常地显示中文,页面如图3-9所示。

图3-9中文正常显示

【范例 3-7】示例代码3-7是一个包含三个文本文件的示例。其包含四个文件,一个是用来包含文本文件的IncludeTXT2.jsp,代码为示例代码3-7(A);其他三个是被包含的文本文件,代码为示例代码3-7(B)、3-7(C)及3-7(D)。

示例代码3-7(A) IncludeTXT2.jsp

        01  <%@ page language="java" contentType="text/html;charset=gb2312"%>
        02  <html>
        03  <head>
        04       <title>包含文本文件</title>
        05  </head>
        06  <body>
        07       包含文本文件content1,文件内容如下。<br>
        08       <%@ include file="content1.txt"%><br>
        09       包含文本文件content2,文件内容如下。<br>
        10       <%@ include file="content2.txt"%><br>
        11       包含文本文件content3,文件内容如下。<br>
        12       <%@ include file="content3.txt"%>
        13  </body>
        14  </html>

示例代码3-7(B) content1.txt

        01  <%@ page contentType="text/html;charset=gb2312"%>
        02  这是文本文件1

示例代码3-7(C) content2.txt

        01  <%@ page contentType="text/html;charset=gb2312"%>
        02  这是文本文件2

示例代码3-7(D) content3.txt

        01  <%@ page contentType="text/html;charset=gb2312"%>
        02  这是文本文件3

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/IncludeTXT2.jsp,打开页面如图3-10所示。

图3-10 IncludeTXT2.jsp执行结果

【代码解析】示例代码IncludeTXT2.jsp第8行、第10行及第12行,分别通过使用include指令包含content1.txt、content2.txt和content3.txt三个文本文件。当JSP执行到第8行、第10行及第12行时就会将content1.txt、content2.txt和content3.txt三个文本文件的内容分别进行输出,并最终显示在页面上。

3.2.2 包含HTML文件

使用include指令包含HTML文件非常简单,只需通过file属性指定被包含的HTML文件的URL地址即可。

【范例3-8】范例3-8是一个包含HTML文件的示例。其包含两个文件,一个是用来包含HTML的IncludeHTML.jsp,代码为示例代码3-8(A);一个是被包含的HTML文件,代码为示例代码3-8(B)。

示例代码3-8(A) IncludeHTML.jsp

        01  <%@ page language="java" contentType="text/html;charset=gb2312"%>
        02  <html>
        03  <head>
        04       <title>包含HTML文件</title>
        05  </head>
        06  <body>
        07       包含HTML文件,文件内容如下。<br>
        08       <%@ include file="content.html"%>
        09  </body>
        10  </html>

示例代码3-8(B) content.html

        <h1>Hello,World</h1>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/IncludeHTML.jsp,打开页面如图3-11所示。

图3-11 IncludeHTML.jsp执行结果

【代码解析】示例代码第8行通过使用include指令包含content.html文件。当JSP执行到第8行时就会将content.html文件的内容进行输出,并最终显示在页面上。

3.2.3 包含JSP文件

使用include指令包含JSP文件非常简单,只需通过file属性指定被包含的JSP文件的URL地址即可。

【范例3-9】范例3-9是一个包含JSP文件的示例。其包含两个文件,一个是用来包含JSP的IncludeJSP.jsp,代码为示例代码3-9(A);一个是被包含的JSP文件,代码为示例代码3-9(B)。

示例代码3-9(A) IncludeJSP.jsp

        01  <%@ page language="java" contentType="text/html;charset=gb2312"%>
        02  <html>
        03  <head>
        04       <title>包含JSP文件</title>
        05  </head>
        06  <body>
        07       包含JSP文件,文件内容如下。<br>
        08       <%@ include file="content.jsp"%>
        09  </body>
        10  </html>

示例代码3-9(B) content.jsp

        <%@ page import="java.util.*"%>
        <%=new Date()%>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/IncludeJSP.jsp,打开页面如图3-12所示。

图3-12 IncludeJSP.jsp执行结果

【代码解析】示例代码第8行通过使用include指令包含content.jsp文件。当JSP执行到第8行时就会执行content.jsp文件的内容,并最终显示在页面上。

3.3 taglib指令

taglib指令用来声明此JSP文件使用了自定义标签,同时引用所指定的标签库并设置标签库的前缀。其语法格式如下。

        <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix"%>

taglib指令包含两个属性,分别为uri和prefix。

其中uri属性用来指定标签库的存放位置,prefix属性用来指定该标签库使用的前缀。

【范例3-10】示例代码3-10是一个taglib指令使用示例。

示例代码3-10 TestTaglib.jsp

        01  <%@ page contentType="text/html;charset=GB2312" %>
        02  <%--声明页面中将要引用的标签库--%>
        03  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
        04  <html>
        05  <head>
        06       <title>taglib指令使用示例</title>
        07  </head>
        08  <body>
        09       <%--使用JSTL标签输出字符串--%>
        10       <c:out value="Hello, World!" />
        11  </body>
        12  </html>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/TestTaglib.jsp,打开页面如图3-13所示。

图3-13 TestTaglib.jsp执行结果

【代码解析】示例代码第3行使用taglib指令,表示在该JSP文件中将使用JSTL的核心标签库,同时指定该标签库的前缀为c。第10行通过使用JSTL核心标签库的<c:out>标签输出“Hello, World!”。

3.4 综合练习

1.在同一个JSP文件中使用include指令分别来包含一个文本文件、一个HTML文件及一个JSP文件。

        01  <%@ page language="java" contentType="text/html;charset=gb2312"%>
        02  <html>
        03  <head>
        04       <title>包含混合文件</title>
        05  </head>
        06  <body>
        07       包含文本文件,文件内容如下。<br>
        08       <%@ include file="content.txt"%><br>
        09       包含HTML文件,文件内容如下。<br>
        10       <%@ include file="content.html"%><br>
        11       包含JSP文件,文件内容如下。<br>
        12       <%@ include file="content.jsp"%>
        13  </body>
        14  </html>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/Practice.jsp,打开页面如图3-14所示。

图3-14 Practice.jsp执行结果

2.在JSP文件中使用page指令的import属性导入“java.util.*”包,构造一个ArrayList实例对象并添加元素。最后通过使用JSP表达式分别输出ArrayList实例对象中的元素。

        01  <%@  page  language="java"  import="java.util.*"  contentType="text/html;
    charset=gb2312"%>
        02  <html>
        03  <head>
        04       <title>导入Java包</title>
        05  </head>
        06  <body>
        07       <%
        08           ArrayList<String>arr=new ArrayList<String>();  //构造一个ArrayList
   实例对象
        09           arr.add("C语言");     //添加元素
        10           arr.add("C++语言");   //添加元素
        11           arr.add("Java语言");  //添加元素
        12       %>
        13       <%--取出第一个元素,并输出 --%>
        14       <%=arr.get(0) %><br>
        15       <%--取出第二个元素,并输出 --%>
        16       <%=arr.get(1) %><br>
        17       <%--取出第三个元素,并输出 --%>
        18       <%=arr.get(2) %>
        19  </body>
        20  </html>

【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch03/Practice2.jsp,打开页面如图3-15所示。

图3-15 Practice2.jsp执行结果

3.5 小结

JSP指令元素的内容相比前面的基础内容略微复杂一些,尤其是page指令包含了许多的属性,读者可能会觉得无从记忆,这里建议大家不要死记硬背,而是要基于理解来记忆。对于每一个属性配置,本章都给出了实际的示例,读者可以对照这些示例来自行动手编写代码。

3.6 习题

一、填空题

1.language属性主要用来___________,目前暂时只能使用___________。

2.import属性用来___________。

3.contentType属性用来___________,以及___________。

4.使用include指令包含文件时,只需指定其___________属性为文件的URL地址。

二、选择题

1.不属于page指令的是___________。

A.extends

B.include

C.info

D.import

2.使用include指定的___________属性来指定被包含文件。

A.info

B.file

C.url

D.fileURL

3.通过taglib指令引入标签库,需要指定___________属性和___________属性。

A.uri

B.url

C.prefix

D.head

三、简答题

1.page指令一共包含多少个属性?这些属性分别是哪些?各有什么作用?

2.如何使用include指令来包含文件?其包含文件的原理是什么?

3.如何使用taglib指令来声明使用的标签库及前缀?为什么要使用前缀?

四、编程题

1.编写一个JSP程序,使用page指令的import属性导入“java.util.*”包,通过构造一个LinkedList实例对象并添加元素,最后在页面上显示LinkedList实例对象中的元素值。

2.改写综合练习中的第一个示例,使用循环输出ArrayList实例对象中的元素值。