jsp中page指令用法详解_JSP编程

本文实例讲述了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程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jsp
page指令
三菱plc编程指令详解、欧姆龙plc编程指令、mov指令的用法、三菱步进指令编程实例、m8029指令用法,以便于您获取更多的相关知识。

时间: 2024-09-30 09:38:13

jsp中page指令用法详解_JSP编程的相关文章

Angular 中 select指令用法详解_AngularJS

最近在angular中使用select指令时,出现了很多问题,搞得很郁闷.查看了很多资料后,发现select指令并不简单,决定总结一下. select用法: <select ng-model="" [name=""] [required=""] [ng-required=""] [ng-options=""]> </select> 属性说明: 发现并没有ng-change属性 ng-

jsp中checkbox用法详解_JSP编程

String[] picked = request.getParameterValues("open"); if (picked != null) { for (int i = 0;i < picked.length; i++) { // System.out.println("11"+picked[i]); uDao.getCheckOpen( picked[i]); } } 今天怀着惶恐的心情用了下checkbox,一直以为挺神秘的东西,可是当你决定静下心

JSP中param标签用法实例分析_JSP编程

本文实例分析了JSP中param标签用法.分享给大家供大家参考,具体如下: Jsp中param标签的使用 <jsp:param>操作被用来以"名-值"对的形式为其他标签提供附加信息.它和<jsp:include>.<jsp:forward>.<jsp:plugin>一起使用,方法如下: 复制代码 代码如下: <jsp:param name="paramName" value="paramValue&qu

jsp中自定义标签用法实例分析_JSP编程

本文实例讲述了jsp中自定义标签用法.分享给大家供大家参考.具体如下: 这里简单的写了一个自定义标签,自己定义标签的好处就是在jsp页面中可以使用自己定义的功能,完全与Java代码分离 1. tld文件如下: 首先是要写×.tld文件,当项目随着服务器启动的时候,会检查项目中有没有*tld文件. 写的tld文件 <?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://ja

JSP编译指令page、include详解_JSP编程

1. JSP指令 分类:1).page  2).include  3).taglib 语法:  <%@ 指令名称  属性1="值1" .....%> 2. Page编译指令: • 作用:利用Page编译指令可以设置JSP的页面属性.通常位于JSP页面的顶端,对同一个页面可以有多个page指令.• page指令语法格式: 复制代码 代码如下: <%@page [language="Java"]    //声明JSP页面使用语言的种类 [extends

JSP学习之Java Web中的安全控制实例详解_JSP编程

本文实例讲述了JSP学习之Java Web中的安全控制.分享给大家供大家参考.具体如下: 一.目标: ① 掌握登录之后的一般处理过程: ② 能够为每个页面添加安全控制: ③ 能够共享验证代码: ④ 使用过滤器对权限进行验证: ⑤ 能够对文件的局部内容进行验证: ⑥ 掌握安全验证码的基本实现方式: ⑦ 通过异常处理增强安全性. 二.主要内容: ① 通过修改前面的登录功能,分别对管理员和普通用户的登录进行处理: ② 为管理员才能访问的页面添加控制: ③ 共享各个页面中的控制代码,使用专门的文件,然后

JSP 中EL表达式用法详解

EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =user.getSex( );

JSP 从配置文件获取参数详解_JSP编程

这一节将介绍 ServletContext 和 ServletConfig 这两个接口. 通过这两个接口,我们可以在web.xml中设置一些参数,如数据库地址.用户名密码等,供 Servlet 使用, 这样每次参数值变动时,不用重新编译Servlet了. javax.servlet.ServletContext接口(上下文参数)是针对整个项目的全局设置, 而javax.servlet.ServletConfig接口(初始化参数)是针对当前Servlet的设置. 两者的设置内容都写在web.xml

javascript jquery-jquery中getScript()的用法详解,从一个远程js文件中读取数据

问题描述 jquery中getScript()的用法详解,从一个远程js文件中读取数据 第一个html文件: <html> <head> <script type="text/javascript" src="jquery-2.1.3.js"></script> $.getScript("shuj.js",function(){alert("aaaaa");}) </hea