首页 > 编程笔记 > Java笔记

JSP Page指令:页面指令

JSP Page 指令即页面指令,利用页面指令可以定义在整个 JSP 页面范围内有效的属性,page 指令可以放在 JSP 页面中的任意行,但习惯上放在文件的开始部分,方便阅读程序代码。Page 指令具有多种属性,通过这些属性的设置可以影响当前的 JSP 页面。

例如,在页面中正确设置当前页面响应的MIME类型为 "text/html",如果 MIME 类型设置不正确,则当服务器将数据传输给客户端进行显示时,客户端将无法识别传送的数据,从而不能正确地显示内容。
Page 指令中包含许多的属性。除 import 属性外,其他属性只能在指令中出现一次。

语法:

<%@page
  [language="java"]
  [contentType="mimeType;charset=CHARSET"]
  [import="{package.class|pageage.*},……"]
  [extends="package.class"]
  [session="true|false"]
  [buffer="none|8kb|size kb]
   [autoFlush="true|false"]
   [isThreadSafe="true|false"]
   [info="text"]
   [errorPage="relativeURL"]
   [isErrorPage="true|false"]
   [isELIgnored="true|false"]
   [pageEncoding="CHARSET"]
   %>

虽然 Page 指令具有如此多的属性,但是在实际编程时,程序员并不需要一一列出。其中很多属性可以忽略,此时 Page 指令将使用这些属性的默认值来设置 JSP 页面。

属性说明
属性 说明
autoFlush 该属性默认值为 true,表示当缓冲区已满时,自动将其中的内容输出到客户端。如果设为 false,则当缓冲区中的内容超出其设置的大小时,会产生 "JSP Buffer overflow" 溢出异常。
buffer 该属性设置 out 对象(JspWriter 类型)使用的缓冲区的大小。若设置为 none,表示不使用缓存,而直接通过 PrintWriter 对象进行输出;如果将该属性指定为数值,则输出缓冲区的大小不应小于该值。默认值为 8KB(因服务器的不同而不同,但大多数情况下都为 8KB)。
contentType 该属性设置页面响应的 MIME 类型,通常被设置为 text/html。
errorPage 该属性用来指定一个当前页面出现异常时所要调用的页面。如果属性值是以“/”开头的路径,则将在当前应用程序的根目录下查找文件;否则,将在当前页面的目录下查找文件。
extends 该属性用于指定一个 JSP 页面转换为 Servlet 后继承的类。在 JSP 中通常不会设置该属性,JSP 容器会提供转换后的 Servlet 继承的父类。并且如果设置了该属性,一些改动会影响 JSP 的编译能力。
import  该属性类似于 Java中 的 import 语句,用来向 JSP 文件中导入需要用到的包。
info 该属性可设置为任意字符串,如当前页面的作者或其他有关的页面信息。可通过 Servlet.getServletInfo() 方法来获取设置的字符串。
isErrorPage 若将该属性值设为 true,此时在当前页面中可以使用 exception 异常对象。若在其他页面中通过 errorPage 属性指定了该页面,则当调用页面出现异常时,则会跳转到该页面,并且在该页面中可通过 exception 对象输出错误信息。相反,如果将该属性设置为 false,则在当前页面中不能使用 exception 对象。该属性默认值为 false。
isELIgnored 通过该属性的设置,可以使 JSP 容器忽略表达式语言“${}”。其值只能为 true 或 false。设为 true,则忽略表达式语言。
isThreadSafe 该属性默认值为 true,表示当前 JSP 页面被转换为 Servlet 后,会以多线程的方式来处理来自多个用户的请求;如果设为 false,则转换后的 Servlet 会实现 SigleThreadModel 接口,该 Servlet 将以单线程的方式来处理用户请求,即其他请求必须等待直到前一个请求被处理结束。
language 该属性用来设置当前页面中编写 JSP 脚本使用的语言,默认值为 "java"。
pageEncoding 该属性用来设置 JSP 页面字符的编码。默认值为 "ISO-8859-1"。
session Session 属性的值用于设置是否需要使用服务器内置的 session 对象,该属性默认值为 true,表示当前页面支持 session;设为false表示不支持 session。

示例1

本示例将 page 指令的 autoFlush 属性设置为 true,此时如果缓冲区满,就会自动地将缓冲区中的内容输出到客户端。关键代码如下:
<%@page autoFlush="true"%>


注意:若 buffer 属性设为 none,则 autoFlush 不能设为 false。

示例2

本示例设置 buffer 属性的值为 8KB,即将缓冲区的大小设置为 8KB,关键代码如下:
<%@page buffer="8kb"%>

示例3

如果类属性设置不正确,如本示例设置为 "text/css",那么客户端浏览器在显示 HTML 样式时,就不能对 HTML 标记进行解释,而显示 HTML 代码,关键代码如下:
<%@page contentType="text/html"%>

示例4

在该属性中还可以设置 JSP 字符的编码,如本示例设置为 "gb2312",可以接受中文,关键代码如下:
<%@page contentType="text/html;charset=gb2312"%>

示例5

本示例设置 errorPage 属性为 error.jsp,即将当前页面出现的异常发送到 error.jsp 页面,关键代码如下:
<%@page errorPage="error.jsp"%>

示例6

本示例将属性 extends 的值设为 "java.util.Date",即当前页面转换为 Servlet 后的继承的类是 java.util.Date,关键代码如下:
<%@page extends="java.util.Date"%>

示例7

本示例在 Page 指令中可多次使用该属性来导入多个包,关键代码如下:
<%@page import="java.util.*"%>
<%@page import="java.text.*"%>
或者通过逗号间隔来导入多个包,关键代码如下:
<%@page import="java.util.*,java.text.*"%>
在 JSP 中已经默认导入了以下包:
  java.lang.*
  javax.servlet.*
  javax.servlet.jsp.*
  javax.servlet.http.*
所以,即使没有通过 import 属性设置,在 JSP 页面中也可以调用上述包中的类。

若要在页面中使用编写的 JavaBeans,也可通过 import 属性导入。还可以通过 <jsp:useBean> 动作标签来创建一个 JavaBean 示例进行调用。

示例8

本示例应用 info 属性显示页面信息,关键代码如下:
<%@page info="This is index.jsp!"%>
  <%=this.getServletInfo()%>
访问页面后的结果是: 显示页面信息: This is index.jsp

示例9

若当前应用下包含 index.jsp 和 error.jsp 文件。在 index.jsp 页面中进行数据的格式化操作,发生异常后将信息显示到 error.jsp 页面,关键代码如下:
<%@page contentType="text/html;charset=gb2312"errorPage="error.jsp"%>
  <%
     String name="lzw";
     Integer.parseInt(name);  //将字符串转化为整型
   %>
上述代码将一个非数字格式的字符串转化为整型,因此将发生异常,最终进入 errorPage 属性指定的 error.jsp 页面显示错误信息。

在 error.jsp 页面中需要将 isErrorPage 属性设为 true,然后才能调用 exception 对象输出错误信息。error.jsp 页面的代码如下:
<%@page contentType="text/html;charset=gb2312"isErrorPage="true"%>
出现错误!错误如下:
<%=exception.getMessage()%>
访问 index.jsp 页面后,结果如下:
For input string: "lzw"

示例10

本示例应用 isELIgnored 属性,设置其值为 false,表示不忽略表达式语言“${}”,关键代码如下:
<%@page isELIgnored="false"%>

示例11

本示例将 isTreadSafe 属性设为 true,则当前页面被转换为 Servlet 后,会以多线程的方式处理来自用户的请求,关键代码如下:
<%@page isThreadSafe="true"%>

示例12

本示例设置了当前页面中使用 Java 语言来编写 JSP 脚本,并且目前只能是 Java 语言,关键代码如下:
<%@page language="java"%>

示例13

本示例是将页面字符编码的设定属性设置为 "ISO-8859-1",那么本页面将不会支持中文格式的内容,关键代码如下:
<%@page pageEncoding="ISO-8859-1"%>

示例14

本示例将 session 属性设置为 true,则表示可以使用服务器内置的 session 对象,关键代码如下:
<%@page session="true"%>

典型应用

本示例通过应用 page 指令设置 contenType 属性的值为 "image/jpeg",当访问 index.jsp 页面时,客户端的浏览器将启动图形解码器来解析执行收到的信息。代码如下:
<%@page language="java"import="java.util.*"pageEncoding="gb2312"%>
  <%@page contentType="image/jpeg"%>
    <%@page import="java.awt.*"%>
      <%@page import="java.io.*"%>
        <%@page import="java.awt.image.*"%>
          <%@page import="java.awt.geom.*"%>
            <%@page import="com.sun.image.codec.jpeg.*"%>
              <%int width=200,height=200;  //描述具有可访问图像数据缓冲区的Image
                    BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
                    Graphics g=image.getGraphics();
                    g.setColor(Color.white);
                    g.fillRect(0,0,width,height);
                    Graphics2D g_2d=(Graphics2D)g;  //以double精度定义椭圆
                    Ellipse2D ellipse=new Ellipse2D.Double(40,80,100,40);
                    g_2d.setColor(Color.blue);  //执行从2D坐标到其他2D坐标的线性映射
                    AffineTransform trans=new AffineTransform();
                    for(int i=1;i<=12;i++){
                       trans.rotate(30.0*Math.PI/180,90,100);
                       g_2d.setTransform(trans);
                       g_2d.draw(ellipse);
                       }
                    g.dispose();  //获取指向客户端的输出流
                    OutputStream outClient=response.getOutputStream();
                    JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(outClient);
                    encoder.encode(image);
              %>

所有教程

优秀文章