jsp编译指令学习笔记

发表于: java/j2ee | 作者: | 日期: 2010/1/09 03:01

=====================================
JSP编译指令概述
编译指令的英文原话是“directive”,原意是“指示、命令”的意思。在一些java技术书籍中将其称翻译为“伪指令”,也有将其翻译为“编译指令”的,我个人更习惯叫编译指令。只要知道都是指的“directive”就OK了。

JSP的编译指令是通知JSP引擎的消息,它不直接生成输出。编译指令都有默认值,因此开发人员无须为每个指令设置值。

常见的编译指令有3个:

page:该指令是针对当前页面的指令。

include:用于指定包含另一个页面。

taglib:用于定义和访问自定义标签。

使用编译指令的语法格式如下:

<%@ 编译指令名 属性名="属性值"…%>

=====================================
page指令
page指令用来定义JSP文件中的全局属性。其通常位于JSP页面的顶端,一个JSP页面可以使用多条page指令。page指令的语法格式如下:

<%@page [language="Java"] [extends="package.class"] [import="package.class│package.*,…"] [session="true│false"] [buffer="none│8kb│size kb"] [autoFlush="true│false"] [isThreadSafe="true│false"] [info="text"] [errorPage="relativeURL"] [contentType="mimeType[;charset=characterSet]"│"text/html;charSet=ISO8859-1"] [isErrorPage="true│false"] %>

下面依次介绍page指令各属性的意义。

language:
声明当前JSP页面使用的脚本语言的种类,因为页面是JSP页面,该属性的值通常都是java,该属性的默认值也是java,所以通常无须设置。

extends:
指定JSP页面编译所产生的Java类所继承的父类,或所实现的接口。

import:
用来导入包。下面几个包是默认自动导入的,不需要显式导入。默认导入的包有:java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*。

session:
设定这个JSP页面是否需要HTTP Session。

buffer:
指定输出缓冲区的大小。输出缓冲区的JSP内部对象:out用于缓存JSP页面对客户浏览器的输出,默认值为8kb,可以设置为none,也可以设置为其他的值,单位为kb。

autoFlush:
当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true时为正常输出;如果设置为false,则会在buffer溢出时产生一个异常。

info:
设置该JSP程序的信息,也可以看做其说明,可以通过Servlet.getServletInfo()方法获取该值。如果在JSP页面中,可直接调用getServletInfo()方法获取该值,因为JSP页面的实质就是Servlet。

errorPage:
指定错误处理页面。如果本页面产生了异常或者错误,而该JSP页面没有对应的处理代码,则会自动调用该指令所指定的JSP页面。

因为JSP内建了异常机制支持,所以JSP可以不处理异常,即使是checked异常。

isErrorPage:
设置本JSP页面是否为错误处理程序。如果该页面本身已是错误处理页面,则通常无须指定errorPage属性。

contentType:
用于设定生成网页的文件格式和编码方式,即MIME类型和页面字符集类型,默认的MIME类型是text/html;默认的字符集类型为ISO-8859-1。

=====================================
include指令
使用include指令,可以将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句(如果有的话)。这是个静态的include语句,它会把目标页面的其他编译指令也包含进来,但动态include则不会。

include既可以包含静态的文本,也可以包含动态的JSP页面。静态的include编译指令会将被包含的页面加入本页面,融合成一个页面。

include编译指令的语法:


<%@include file="relativeURLSpec"%>

如果被嵌入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的include语句。

以下是一个示例:


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



静态include测试



<%@include file="scriptlet.jsp"%>


关于include编译指令与动作指令的区别可以参考以下链接:
http://www.darkmi.com/blog/archives/1021

=====================================
taglib编译指令
定义一个标签库以及其自定义标签的前缀。

taglib指令的语法格式如下:

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

示例:


<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

说明:
tagPrefix:
自定义标签的前缀名。如果前缀为bean,那么在页面上使用的此标签库中任何标签标签应写为<bean:XXX>,这里XXX是标签名。

URIToTagLibrary:
标签库本身的URI。可以是以“/”开始的绝对路径名,“/”解释为Web应用的根。或者是一个充作TLD符号名的URL。这种情况下,名字必须通过web.xml文件中的<tablig>入口被映射到实际的TLD。

自定义标签的开发看这里:http://www.darkmi.com/blog/archives/1032
=====================================

: https://blog.darkmi.com/2010/01/09/1026.html

本文相关评论 - 1条评论都没有呢
Post a comment now » 本文目前不可评论

No comments yet.

Sorry, the comment form is closed at this time.