转一句原博主的话,个人觉得非常不错
不力行,但学文,长浮华,成何人。但力行,不学文,任己见,昧理真。读书法,有三到,心眼口,信皆要
一、JSP 页面之组成
JSP 常用的语句主要有以下六种类型:
1、注释:<%--注释内容--%>
2、声明:<%! 预定义内容 %>
3、表达式:<% =表达式 %>
4、脚本段:<% 代码 %>
5、指令:<%@ 指令 %>
6、动作:<jsp: 动作 %>
PS:JSP 代码一定要用英文字符,不然的话可能会出现错误。当年,我在上学期间,一位同学本来写得代码没有错误,但无法运行成功。老师也和他一起调试了 N 长时间。怎么都不同。最后,伟大的老师大人问同学言,“你的,代码是如何写的,你打一遍给我看”。最后那位同学用搜狗输入法打了一遍 JSP 代码。最后,老师长舒一口气来了句,请用纯正的英文字符打。呵呵,好多这种输入法会让人错误认为自己打得是纯英文字符,其实全是中文的伪英文字符。由于我是用五笔打字,所以没有发生过这类错误。
(一)注释
注释顾名思意,就是为了帮助开发人员理解所写代码是干什么的小抄。当我们写了一大堆代码时,如果没有注释的话,隔了十天半个月后,再回过头来再看时,八成都不知道这段代码是干什么的(虽然是你写的)。所以,注释就是为了解决这类问题而做的。有时,写上注释也是帮助大家注意一些问题。比如如下的注释:
呵呵,这是我在网上找到的一些好玩的注释。大家可以学习一下。
JSP 代码的注释方法很简单,就是在“<%--”和“--%>”加入注释信息而已。但是,这些注释与我们所见到的HTML中的“<!-- HTML注释 -->”不太一样。因为 JSP 的注释只显示在服务器端,不会让客户看到。也就是像C语言那样。编译器会不会去编译注释中的内容,而将其跳过。我们可以通过下面的例子比较一下:
JSP 代码段:
下面是客户端访问服务器时,通过查看源代码看到的:
看吧,好像“<%-- 这是 JSP 的代码注释 --%>”这一行只显示出了一个空间,内容消失了!!!

(二)声明
声明语句,是要将 JSP 中所要用到的变量以及方法进行声明。比如,在 C/C++ 中的“int i;" ,在 ASP 中“Dim a”,在 JavaScript 中的“var a;”那样。在 JSP 中的语法格式是:
例如如下样子:
以上的例子就是声明的使用。我们有没有发现,如果你学过 Java 的话,基本上就是 Java 的语言。只不过前面多了个“<%!”,后面加了个“%>”。 其实没有什么大不了的。后面如果你看到 JSP 脚本段时,你会仰天长叹,这不就是 Java 吗?

(三)表达式
表达式是什么,它是由变量、变量,或其它什么乱七八糟组成的算式,用来计算并直接输入结果值。
其语法格式如下:
如果有过 ASP 开发的经验话,就不会很难想到这到底是什么了。因为在 ASP 中常见到这个。这个就是用于向 HTML 页面显示结果。比如下面的例子,大家一看就明了:
页面显示的结果:
(四)脚本段
JSP 脚本段可以包含任意且多行并合法的脚本语句。这些脚本语句其实就是 Java 代码。只不过,这些代码主要用于 Web 技术。而其语法是:
所执行后的结果将会显示在 HTML 页面当中。
好的,我们继续看一个例子:
结果:
(五)指令
JSP 指令是一些特殊的 JSP 语句,它是为 JSP引擎设计的,用于通知 JSP 引擎如何处理 JSP 页面,不直接产生任何可见输出。其语法格式如下:
我们在开发过程中主要会遇到以下几种所需要的指令:
1、include指令
格式:
这是干什么的呢?这个是用来在 JSP 文件编译之时,加载需要插入的文本或代码。就如同 ASP 中的“<!-- include file = "index.asp"-->”,或者在 PHP 中的“<?php include("index.php"); ?>”一样。
举个栗子:
index.jsp
head.jsp
执行结果:
我们可以看到,在 JSP 引擎编译前,先会读取指定,并通过 include 指令将两个页面合在一起。比如上例,index.jsp 使用 include 指令,将 head.jsp 加载到 include 指令所在处。
2、page指令
格式:
这个是不是看起来有点晕晕的。说实话,我也记不下来这么多。这引起干什么的,我通过一个表格让大家了解一下。累死我了。。。这打得。。。

属性名 | 使用说明 | 范例 |
language | 定义要使用的脚本语言,默认是“Java”,也是目前惟一有效的设定值,故可以不设。该指令作用于整个文本。 | language="java" |
import | 用来导入在后面的代码中将会乃至的一个或多个包/类。只有import可以在同一页面,为一个属性多次设值。多个属性请用“,”分开。说白了,就是和 Java 导入类包一个。只不过形式变了。 | import="java.util.*" |
extends | 定义 JSP 编译时需要继承的 Java 父类。 | extends="father.class" |
session | 设置在当前页中是否允许有Session操作——也就是Session开关。true:允许(默认);false:算了吧。 | session="true" |
errorPage | 设定如果页面出现异常,且没有捕获跳往何处? | errorPage="相对URL" |
isErrorPage | 当前页是否可以作为其它 JSP 页面的异常处理页?true:允许;false:算了吧(默认)。 | isErrorPage="false" |
contentType | 设定输出的MIME类型和 JSP 文件编码。默认是text/html,默认字符为ISO-8859-1 | <%@page contentType="text/html" pageEncoding="UTF-8"%> |
isThreadsafe | 是否支持多线程?为true,可以同时执行多个用户请求,为false就表明哥只能管一个人。默认为大多数:true | isThreadsafe="true" |
buffer | 设定 JspWrite类型预定义对象 out 缓冲区大小。 | buffer="none" |
autoFlush | 设置缓冲区被填满时是否自动刷新。 | autoFlush |
info | 用来定义一个将加入到已编译成功的页面中的字符串 | info="text" |
其实,在这里面,我们基本上只用到 import、errorPage 还有 contentType,其它的很少用。
3、taglib指令
格式:
tablib 指令用于定义一个标记库以及标记的前缀。什么意思呢?这是教科书上给的定义。我也没明白。最后,我查了一些书才明白什么意思,这玩意就是用来定义和访问自己所定义的标签。相关的内容,我会在以后和大家谈论。现在先给大家留个悬念(其实是手打字打麻了——一会儿老爸还要强制本少干家务

(六)动作
在世纪中国武打片振撼了整个美国。最著名的,且几乎无法超越的当属李小龙。
大家别误会,我不是要给大家放电影看。我只是想说,JSP 也是位动作迷。他为自己也创造了一种叫“动作”的功能——还好没叫功夫。
JSP 动作是用来控制 JSP 引擎行为,执行一些标准常用的 JSP 页面的动作。