`

servlet和jsp核心编程(第2版)第十二章page指令学习笔记

阅读更多
第十二章 控制所生成的servlet的结构:JSP page指令
核心方法
1.我们一定要将我们的实用工具类和bean放在包中。原因见import属性第一点。

首先page指令允许我们通过类的导入、servlet超类的定制、内容类型的设置、以及诸如此类的事物来控制servlet的结构。注意这里是转换为servlet后的结构,不是jsp的结构。还有要注意page指令定义下面这些大小写敏感的属性。
学习笔记
、import属性
1.我们可以使用page指令的import属性指定JSP页面转换成的servlet应该输入的包。
<%Test t  = new Test();%>
如果我们没有将这个Test放在类中,或者我们没有导入它所在的包,那么系统就会认为Test就在这个jsp页面所转换的servlet所在的包中,但是自动生成的servlet所在的包是未知的,每个服务器指定servlet所在的包都会不同,所以我们就一定要将我们的实用工具类和bean放在包中。

2.默认情况下,servlet导入java.lang.*;javax.servlet.*;javax.servlet.jsp.*;javax.servlet.http.*;也许还要包含一些服务器特有的包,但这样做会使我们的代码不可移植。

3.我们可以
<%@page import = "package.class1,package.class2"%>

这样来引入多个包。

、contentType和pageEncoding属性
1.这里要注意contentType隶属实体报头,不是什么请求报头和响应报头的内容,实体报头定义了关于实体正文和请求所标识的资源元信息。具体可参见:http://www.iteye.com/topic/563082
2.常规的servlet,其默认的MIME类型为text/plain,而jsp页面默认为text/html,默认字符集,ISO-8859-1
3.使用contentType有两种方式
,<%@page contentType = "MIME-TYPE"%>和<%response.setContentType
("application/vnd.ms-excel");%>

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

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

这个true和false指的是 “是否创建会话把它绑定到session”,如果设置为false就代表阻止JSP页面为那些尚不拥有会话的用户创建会话。这里要联想到会话的创建过程,没有会话也就意味着没有名为JSESSIONID的这个cookie。而由于会话针对的是用户,而这个用户不一定只访问这个页面,所以单一的设置某个页面的session为false,不会关闭会话跟踪。我的理解就是要么不设置session,使他为默认值,要么全设为false,关闭了会话跟踪。

、isELIgnored属性
isELIgnored 属性控制的是:忽略(true)JSP 2.0 表达式语言(EL),还是进行正常的求值(false)。如果 web.xml 指定 servlet 2.4(对应 JSP 2.0)或之后的版本,那么默认值为false。使用这个属性时,可以采用下面两种形式:
<%@ page isELIgnored="false" %>
<%@ page isELIgnored="true" %>


、buffer 和 autoFlush 属性
1.buffer 属性指定 out 变量(类型为 JspWriter )使用的缓冲区的大小。使用这个属性时,可以采用下面两种形式:
<%@ page buffer="sizekb" %>
<%@ page buffer="none" %>

有时输出内容的每一行都需要较长的生成时间,此时禁用缓冲或使用小缓冲区会更有效率;这样,用户能够在每一行生成之后立即看到它们,而不是等待更长的时间看到成组的行。

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

在 buffer="none" 时,false 值是不合法的。
、info属性
info 属性定义一个可以在 servlet 中通过 getServletInfo 方法获取的字符串,使用 info 属性时,采用下面的形式:
<%@ page info="Some Message" %>

、errorPage 和 isErrorPage 属性
1.errorPage是指定那个页面处理errorPage所在页面的错误。
2.isErrorPage,指定该属性所在页面的是错误处理页面。一般我们将错误页面放置在WEB-INF目录中,由于服务器禁止客户直接访问WEB-INF,这种安排能够阻止用户访问错误处理页面,

3.发生错误时,错误处理页面由服务器访问,而非客户去访问,这类错误页面不会生成response.sendRedirect调用,客户只会看到最初请求的URL,看不到错误页面的URL。
其他的isThreadSafe属性、extends属性、language属性不常用可参见下面的URL
本章内容具体可参考 http://blog.csdn.net/microfhu/article/details/6944368
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics