• 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);
                  %>

更多...

加载中...