热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

jsp中page指令用法详解

这篇文章主要介绍了jsp中page指令用法,以实例形式较为详细的分析了JSP中page相关指令的功能、定义及用法,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了jsp中page指令用法。分享给大家供大家参考。具体如下:

一、JSP 指令

JSP 指令(directive)影响由 JSP 页面生成的 servlet 的整体结构。下面的模板给出指令的两种可能形式。属性值两边的双引号可以替换为单引号,但引号标记不能完全省略。如果要在属性值中使用引号,则要在它们之前添加反斜杠,' 使用 \'," 使用 \"

<% directive attribute="value" %>
<% directive attribute1="value1"
attribute2="value2"
......
attribute3="value3" %>

在 JSP 中,主要有3种类型的指令:page,include 和 taglib。page 指令允许通过类的导入、servlet 超类的定制、内容类型的设置、以及诸如此类的事物来控制 servlet 的结构。page 指令可以放在文档中的任何地方。第二个指令,include 允许在 JSP 文件转换到 servlet 时,将一个文件插入到 JSP 页面中。include 指令应该放 置在文档中希望插入文件的地方。第三个指令,taglib,定义自 定义的标记标签。

二、JSP page 指令

page 指令可以定义下面这些大小写敏感的属性(大致按照使用的频率列出):import、contentType、pageEncoding、session、isELIgnored(只限 JSP 2.0)、buffer、autoFlush、info、errorPage、isErrorPage、isThreadSafe、language 和 extends。

2.1 import 属性

使用 page 指令的 import 属性指定 JSP 页面转换成的 servlet 应该输入的包。在 JSP 中,包是绝对必需的。原因是,如果没有使用包,系统则认为所引用的类与当前类在同一个包中。例如,假定一个 JSP 页面包含下面的 scriptlet:

代码如下:
<% Test t=new Test(); %>

在此,如果 Test 在某个输入包中,则没有歧义。但是,如果 Test 不在包中,或者页面没有明确地导入 Test 所属的包,那么系统将会认为 Test 就在这个自动生成的 servlet 所在的包中。但问题是自动生成的 servlet 所在的包是未知的!服务器在创建 servlet 时,常常会根据 JSP 页面所在的目录来决定它的包。别的服务器可能使用其他不同的方式。因此,不能指望不使用包的类能够正常工作。对于 bean 也同样如此,因为 bean 不过是遵循某些简单命名约定和结构约定的类。

默认情况下,servlet 导入 java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*,也许还包括一些服务器特有的包。编写 JSP 代码时,绝不要依靠任何自动导入的服务器特有类。这样做会使得代码不可移植。

使用 import 属性时,可以采用下面两种形式:

<%@ page import="package.class" %>
<%@ page import="package.class1, ..., package.classN" %>

例如,下面的指令表示 java.util 包和 cn.foololdfat 包中的所有类在使用时无需给出明确的包标识符:

代码如下:
<%@ page import="java.uti1.*, cn.foololdfat.*" %>

import 是 page 的属性中惟一允许在同一文档中多次出现的属性。尽管 page 指令可以出现在文档中的任何地方,但一般不是将 import 语句放在文档顶部附近,就是放在相应的包首次使用之前。

2.2 contentType 和 pageEncoding 属性

contentType 属性设置 Content-Type 响应报头,标明即将发送到客户程序的文档的 MIME 类型。有关MIME 类型的更多信息,参见Java Web 开发 (5) HTTP 响应报头。

使用 contentType 属性时,可以采用下面两种形式:

<%@ page cOntentType="MIME-TYPE" %>
<%@ page cOntentType="MIME-Type; charset=Character-Set" %>

例如,指令

代码如下:
<%@ page cOntentType="application/vnd.ms-excel" %>

和下面的 scriptlet 所起到的作用基木相同

代码如下:
<% responce.setContentType("application/vnd.ms-excel"); %>

两种形式的第一点不同是,response.setContentType 使用明确的 Java 代码(这是一些开发人员力图避免使用的方式),而 page 指令只用到 JSP 语法。第二点不同是,指令被特殊处理,它们不是在出现的位置直接成为 _jspService 代码。这意味着 response.setContentType 能够有条件地调用,而 page 指令不能。条件性地设置内容的类型主要用在同一内容能够以多种不同的形式进行显示的情况下。

不同于常规 servlet (默认的 MIME 类型为 text/plain),JSP 页面的默认 MIME 类型是 text/html (默认字符集为 ISO-8859-1)。因此,如果 JSP 页曲以 Latin 字符集输出 HTML则根本无需使用 contentType,如果希望同时更改内容的类型和字符集,可以使用下面的语句:

代码如下:
<%@ page cOntentType="someMimeType; charset=someCharacterSet" %>

但是,如果只想更改字符集,使用 pageEncoding 属性更为简单。例如,中文 JSP 页面可以使用下面的语句:

代码如下:
<%@ page pageEncoding="GBK" %>

可考虑将Java Web 开发 (5) HTTP 响应报头中生成 Excel 表格的例子用 JSP 实现,以体会 contentType 的作用。
2.3 session 属性
session 属性控制页面是否参与 HTTP 会话。使用这个属性时,可以采用下面两种形式:

<%@ page session="true" %> <%--Default--%>
<%@ page session="false" %>

true 值(默认)表示,如果存在已有会话,则预定义变量 session (类型为HttpSession)应该绑定到现有的会话;否则,创建新的会话并将其绑定到 session。false 值表示不自动创建会话,在 JSP 页面转换成 servlet 时,对变量 session 的访问会导致错误。
对于高流量的网站,使用 session="false" 可以节省大量的服务器内存。但要注意,session="false" 并不禁用会话跟踪,它只是阻止 JSP 页面为那些尚不拥有会话的用户创建新的会话。由于会话是针对用户,不是针对贞面,所以,关闭某个页面的会话跟踪没有任何益处,除非有可能在同一客户会话中访问到的相关页面都关闭会话跟踪。
2.4 isELIgnored 属性
isELIgnored 属性控制的是:忽略(true)JSP 2.0 表达式语言(EL),还是进行正常的求值(false)。这是 JSP 2.0 新引入的属性;在只支持 JSP 1.2 及早期版本的服务器中,使用这项属性是不合法的。这个属性的默认值依赖于 Web 应用所使用的 web.xml 的版本。如果 web.xml 指定 servlet 2.3(对应JSP 1.2)或更早版本,默认值为 true(但变更默认值依旧是合法的,JSP 2.0 兼容的服务器中都允许使用这项属性,不管 web.xml 的版本如何)。如果 web.xml 指定 servlet 2.4(对应 JSP 2.0)或之后的版本,那么默认值为false。使用这个属性时,可以采用下面两种形式:

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

2.5 buffer 和 autoFlush 属性
buffer 属性指定 out 变量(类型为 JspWriter )使用的缓冲区的大小。使用这个属性时,可以采用下面两种形式:

<%@ page buffer="sizekb" %>
<%@ page buffer="none" %>

服务器实际使用的缓冲区可能比指定的更大,但不会小于指定的大小。例如,<%@ page buffer="32kb" %> 表示应该对文档的内容进行缓存,除非累积至少为32KB、页面完成或明确地对输出执行清空(例如使用 response. flushBuffer),否则不将文档发送给客户。

默认的缓冲区大小与服务器相关,但至少8KB。如果要将缓冲功能关闭,应该十分小心:这样做要求设置报头或状态代码的 JSP 元素都要出现在文件的顶部,位于任何 HTML 内容之前。另一方面,有时输出内容的每一行都需要较长的生成时间,此时禁用缓冲或使用小缓冲区会更有效率;这样,用户能够在每一行生成之后立即看到它们,而不是等待更长的时间看到成组的行。

autoFlush 属性控制当缓冲区充满之后,是应该自动清空输出缓冲区(默认),还是在缓冲区溢出后抛出一个异常(autoFlush="false")。使用这个属性时,可以采用下面两种形式:

<%@ page autoFlush="true" %> <%--Default--%>
<%@ page autoFlush="false" %>

在 buffer="none" 时,false 值是不合法的。如果客户程序是常规的 Web 浏览器,那么 autoFlush="false" 的使用极为罕见。但是,如果客户程序是定制应用程序,可能希望确保应用程序要么接收到完整的消息,要么根本没有消息。false 值还可以用来捕获产生过多数据的数据库查询,但是,一般说来,将这些逻辑放在数据访问代码中(而非表示代码)要更好一些。

2.6 info 属性

info 属性定义一个可以在 servlet 中通过 getServletInfo 方法获取的字符串,使用 info 属性时,采用下面的形式:

代码如下:
<%@ page info="Some Message" %>

2.7 errorPage 和 isErrorPage 属性

errorPage 属性用来指定一个 JSP 页面,由该页面来处理当前页面中抛出但未被捕获的任何异常(即类型为 Throwable 的对象)。它的应用方式如下:

代码如下:
<%@ page errorPaqe="Relative URL" %>

指定的错误页面可以通过 exception 变量访问抛出的异常。
isErrorPage 属性表示当前页是否可以作为其他 JSP 页面的错误页面。使用 isErrorPage 属性时,可以采用下面两种形式:

<%@ page isErrorPage="true" %>
<%@ page isErrorPage="false" %> <%--Default--%>

2.8 isThreadSafe 属性

isThreadSafe 属性控制由 JSP 页面生成的 servlet 是允许并行访问(默认),还是同一时间不允许多个请求访问单个 servlet 实例(isThreadSafe="false")。使用 isThreadSafe 属性时,可以采用下面两种形式:

<%@ page isThreadSafe="true" %> <%--Default--%>
<%@page isThreadSafe="false" %>

遗憾的是,阻止并发访问的标准机制是实现 SingleThreadModel接口。尽管在早期推荐使用 SingleThreadModel 和 isThreadSafe="false",但最近的经验表明 SingleThreadModel 的设计很差,使得它基本土毫无用处。因而,应该避免使用 isThreadSafe,采用显式的同步措施取而代之。

2.9 extends 属性

extends 属性指定 JSP 页面所生成的 servlet 的超类(superclass )。它采用下面的形式:

代码如下:
<%@ page extends="package.class" %>

这个属性一般为开发人员或提供商保留,由他们对页面的运作方式做出根本性的改变(如添加个性化特性)。一般人应该避免使用这个属性,除非引用由服务器提供商专为这种目的提供的类。

2.10 language 属性

从某种角度讲,language 属性的作用是指定页面使用的脚本语言,如下所示:

代码如下:
<%@ page language="java" %>

就现在来说,由于 Java 既是默认选择,也是惟一合法的选择,所以没必要再去关心这个属性。

希望本文所述对大家的JSP程序设计有所帮助。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • Lodop中特殊符号打印设计和预览样式不同的问题解析
    本文主要解析了在Lodop中使用特殊符号打印设计和预览样式不同的问题。由于调用的本机ie引擎版本可能不同,导致在不同浏览器下样式解析不同。同时,未指定文字字体和样式设置也会导致打印设计和预览的差异。文章提出了通过指定具体字体和样式来解决问题的方法,并强调了以打印预览和虚拟打印机测试为准。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 电销机器人作为一种人工智能技术载体,可以帮助企业提升电销效率并节省人工成本。然而,电销机器人市场缺乏统一的市场准入标准,产品品质良莠不齐。创业者在代理或购买电销机器人时应注意谨防用录音冒充真人语音通话以及宣传技术与实际效果不符的情况。选择电销机器人时需要考察公司资质和产品品质,尤其要关注语音识别率。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
author-avatar
A198806192616
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有