日期:2014-05-16  浏览次数:20304 次

JSP 手记
概念

JSP 是Java Server Page 的缩写,是Servlet 的简化。它是由Sun 公司提出的,并由许多公司参与制定的一种动态网页标准。

其主要特点是在HTML 页面中加入Java 代码片段,或者使用各种JSP 标签,包括使用用户标签,构成JSP 网页。

【早期使用JSP 页面的用户非常广泛,一个Web 应用可以全部由JSP 页面组成,只辅以少量的JavaBean 即可。自J2EE 标准出现以后,人们逐渐认识到使用JSP充当过多的角色是不合适的Q 因此, JSP 慢慢发展成学一的表现层技术,不再承担业务逻辑组件及持久层组件的责任。】

JSP 是Servlet 的扩展,在没有JSP 之前,就已经出现了Servlet 技术。Servlet 是利用输出流动态生成HTML 页面,包括每一个HTML 标签和每个在HTML 页面中出现的内容。



注释

JSP 注释用于表明在程序开发过程中的开发提示,它不会输出到客户端。

JSP 注释的格式如下:

〈%--在注释内容--%>

与JSP 注释形成对比的是HTML 注释, HTML 注释的格式是

<!--注释内容-->

JSP 页面会编译成一个Servlet 类,每个Servlet 在容器中只有一个实例:而在JSP 中声明的变量是类的成员变量,成员变量只在创建实例时初始化,该变量的值将一直保存,直到实例销毁。值得注意的是, infoO的值也可正常输出。因为JSP 声明的方法其实是在JSP 编译生成的Servlet 类的方法一Java 里的方法是不能独立存在的,即使在JSP 页面中也不行。



表达式

JSP 提供了一种输出表达式值的简单方法,输出表达式值的格式如下:

〈%=表达式%〉



脚本

JSP 脚本的应用非常广泛,可通过Java 代码镶嵌在HTML 代码中,即使用JSP 脚本。

因此,所有能在Java 程序中执行的代码,都可以通过JSP 脚本执行。

看下面的代码:

<! -- Java 脚本,这些脚本会对HTML 的标签产生作用一〉

〈%

for(int i = 0 ; i < 10 ; i++) {

%〉

<td><%=i%></td>

<%}%>

上面的JSP 页面,其简单的循环将导致<tr/>标签循环10 次,即生成一个10 行

的表格,并在表格中输出表达式值



三个编译指令

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

常见的编译指令有三个。

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

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

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

 

编译指令的格式如下:

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

 

page 指令

page 指令,通常位于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= ISO-8859-1"]

[isErrorPage=" true | false"]

%〉

下面依次介绍page 的各个属性。

language: 声明当前JSP 页面使用的脚本语言的种类,因为页面是JSP 页面,该属性的值通常都是java 。

extends: 确定JSP 程序编译时所产生的Java 类,需要继承的父类,或者需要实现的接口的全限定类名。

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

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

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

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

info: 设置该JSP 程序的信息,也可以看做其说明,可以通过Servlet. getServletInfo

方法获取该值。如果在JSP 页面中,可直接调用getServletInfo方法获取该值,因为JSP 页面的实质就是Servlet 。

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

isErroePage: 设置本JSP 页面是否为错误处理程序。如果该页面本身己是错误处理页面,则无须使用errorPage 属性。

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

 

include 指令

使用include 指令,可以将一个外部文件嵌入到当前JSP 文件中,同时解析这个页面

中的JSP 语句(如果有的话)。这是个静态的include 语旬,不会检查所包含JSP 页面的变化。

include 既可以包含静态的文本,也可以包含动态的JSP 页面。静态的编译指令

include ,是将被包含的页面加入进来,生成一个完整的页面。

include 编译指令的语法:

〈%@ include file="relativeURLSpec" %〉

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

JSP 的7 个动作指令

动作指令与编译指令不间,编译指令是通知Servlet 引擎的处理消息,而动作指令只

是运行时的脚本动作。编译指令在将JSP 编译成Servlet 时起作用:处理指令通常可替换

成Java 脚本,是JSP 脚本的标准化写法。



JSP 动作指令主要有如下7 个。

jsp:forward: 执行页面转向,将请求的处理转发到