近日,看《林师傅在首尔》,感觉越看越饿。没办法,最后改成边看边吃了。本来胖胖的身体,因为看这部连续剧的原因更胖了。哎。。。请大家记住,一定要吃饭时看,不然后悔呀。。。


言归正传,前两章主要是 JSP 的一些简单地介绍,从本章开始,我们要正式去学习 JSP 的具体知识。如果有过 Web 开发经历的人员,可以依个人情况来想今后的章节,因为有一些一看就懂,有一些可能与平常所用到的开发语言不太一样。毕竟,所有学到的知识全都是为了同一个目的——实用为基础建立起来的。如果不实用哪成呀。


古人有云,“不力行,但学文,长浮华,成何人。但力行,不学文,任己见,昧理真。读书法,有三到,心眼口,信皆要”。所以,我们在今后的学习中,一定要用到实处,理论 + 实践 = NB。大笑


好了,我们开始今天的学习。


一、JSP 页面之组成

JSP 常用的语句主要有以下六种类型:

1、注释:<%--注释内容--%>

2、声明:<%! 预定义内容 %>

3、表达式:<% =表达式 %>

4、脚本段:<% 代码 %>

5、指令:<%@ 指令 %>

6、动作:<jsp: 动作 %>


PS:JSP 代码一定要用英文字符,不然的话可能会出现错误。当年,我在上学期间,一位同学本来写得代码没有错误,但无法运行成功。老师也和他一起调试了 N 长时间。怎么都不同。最后,伟大的老师大人问同学言,“你的,代码是如何写的,你打一遍给我看”。最后那位同学用搜狗输入法打了一遍 JSP 代码。最后,老师长舒一口气来了句,请用纯正的英文字符打。呵呵,好多这种输入法会让人错误认为自己打得是纯英文字符,其实全是中文的伪英文字符。由于我是用五笔打字,所以没有发生过这类错误。偷笑


(一)注释

注释顾名思意,就是为了帮助开发人员理解所写代码是干什么的小抄。当我们写了一大堆代码时,如果没有注释的话,隔了十天半个月后,再回过头来再看时,八成都不知道这段代码是干什么的(虽然是你写的)。所以,注释就是为了解决这类问题而做的。有时,写上注释也是帮助大家注意一些问题。比如如下的注释:


[java] view plaincopy

  1. <%--  

  2. 亲爱的代码维护人员:  

  3. 当您尝试优化这段代码但发现这是一个极端错误的决定的时候,请修改下面的计时器,以便警示后人。  

  4. 总计浪费在这段代码的时间 = 16小时  

  5. --%>  


[java] view plaincopy

  1. <%--  

  2. 你可能会认为你读得懂以下的代码。但是你不会懂的,相信我吧。  

  3. 要是你尝试玩弄这段代码的话,你将会在无尽的通宵中不断地咒骂自己为什么会认为自己聪明到可以优化这段代码。  

  4. 好了,现在请关闭这个文件去玩点别的吧。  

  5. --%>  



[java] view plaincopy

  1. <%--  

  2. 程序员1(于200267日):在登陆界面临时加入一些调试代码  

  3. 程序员2(于2007522日):临你个屁啊  

  4. --%>  


呵呵,这是我在网上找到的一些好玩的注释。大家可以学习一下。



JSP 代码的注释方法很简单,就是在“<%--”和“--%>”加入注释信息而已。但是,这些注释与我们所见到的HTML中的“<!-- HTML注释 -->”不太一样。因为 JSP 的注释只显示在服务器端,不会让客户看到。也就是像C语言那样。编译器会不会去编译注释中的内容,而将其跳过。我们可以通过下面的例子比较一下:


JSP 代码段:


[html] view plaincopy

  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>  

  2. <!DOCTYPE html>  

  3. <html>  

  4.     <head>  

  5.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  6.         <title>JSP Page</title>  

  7.     </head>  

  8.     <body>  

  9.         <!-- 这是 HTML 的代码注释 -->  

  10.         <%-- 这是 JSP 的代码注释 --%>  

  11.         <h1>Hello World!</h1>  

  12.     </body>  

  13. </html>  


下面是客户端访问服务器时,通过查看源代码看到的:



[html] view plaincopy

  1. <!DOCTYPE html>  

  2. <html>  

  3.     <head>  

  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  5.         <title>JSP Page</title>  

  6.     </head>  

  7.     <body>  

  8.         <!-- 这是 HTML 的代码注释 -->  

  9.           

  10.         <h1>Hello World!</h1>  

  11.     </body>  

  12. </html>  


看吧,好像“<%-- 这是 JSP 的代码注释 --%>”这一行只显示出了一个空间,内容消失了!!!疑问



(二)声明

声明语句,是要将 JSP 中所要用到的变量以及方法进行声明。比如,在 C/C++ 中的“int i;" ,在 ASP 中“Dim a”,在 JavaScript 中的“var a;”那样。在 JSP 中的语法格式是:


[java] view plaincopy

  1. <%! 声明;[声明];...%>  


例如如下样子:



[java] view plaincopy

  1. <%! int i = 6; %>  

  2. <%! int a, b, c; double d; %>  

  3. <%! Image a = new Image(60); %>  


以上的例子就是声明的使用。我们有没有发现,如果你学过 Java 的话,基本上就是 Java 的语言。只不过前面多了个“<%!”,后面加了个“%>”。 其实没有什么大不了的。后面如果你看到 JSP 脚本段时,你会仰天长叹,这不就是 Java 吗?偷笑



(三)表达式

表达式是什么,它是由变量、变量,或其它什么乱七八糟组成的算式,用来计算并直接输入结果值。

其语法格式如下:


[java] view plaincopy

  1. <%= 表达式 %>  



如果有过 ASP 开发的经验话,就不会很难想到这到底是什么了。因为在 ASP 中常见到这个。这个就是用于向 HTML 页面显示结果。比如下面的例子,大家一看就明了:


[html] view plaincopy

  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>  

  2. <!DOCTYPE html>  

  3. <html>  

  4.     <head>  

  5.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  6.         <title>JSP Page</title>  

  7.     </head>  

  8.     <body>  

  9.         <%! int i = 1;%>  

  10.         i = <%=i%>  

  11.         <br />  

  12.         i * 2 = <%= i * 2 %>  

  13.     </body>  

  14. </html>  



页面显示的结果:




(四)脚本段

JSP 脚本段可以包含任意且多行并合法的脚本语句。这些脚本语句其实就是 Java 代码。只不过,这些代码主要用于 Web 技术。而其语法是:


[java] view plaincopy

  1. <%  

  2. 脚本代码1  

  3. 脚本代码2  

  4. ……  

  5. 脚本代码N  

  6. %>  


所执行后的结果将会显示在 HTML 页面当中。



好的,我们继续看一个例子:


[html] view plaincopy

  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>  

  2. <!DOCTYPE html>  

  3. <html>  

  4.     <head>  

  5.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  6.         <title>JSP Page</title>  

  7.     </head>  

  8.     <body>  

  9.         <%  

  10.             int i, sum = 0;  

  11.             for(i = 1; i <= 10; i++){  

  12.                 sum += i;   

  13.             }  

  14.             out.println("Sum(1+2+...+10) = " + sum);  

  15.         %>  

  16.     </body>  

  17. </html>  


结果:




(五)指令

JSP 指令是一些特殊的 JSP 语句,它是为 JSP引擎设计的,用于通知 JSP 引擎如何处理 JSP 页面,不直接产生任何可见输出。其语法格式如下:


[java] view plaincopy

  1. <%@ 指令 %>  


我们在开发过程中主要会遇到以下几种所需要的指令:

1、include指令

格式:


[java] view plaincopy

  1. <%@ include file = "相对 / 绝对 路径"%>  


这是干什么的呢?这个是用来在 JSP 文件编译之时,加载需要插入的文本或代码。就如同 ASP 中的“<!-- include file = "index.asp"-->”,或者在 PHP 中的“<?php include("index.php"); ?>”一样。



举个栗子:

index.jsp


[html] view plaincopy

  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>  

  2. <!DOCTYPE html>  

  3. <html>  

  4.     <head>  

  5.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

  6.         <title>JSP Page</title>  

  7.     </head>  

  8.     <body>  

  9.         <p>加载 head.jsp</p>  

  10.         <%@include file = "head.jsp"%>  

  11.         <p>完成 head.jsp</p>  

  12.           

  13.         <p>由于指令是用于通知 JSP 引擎如何 JSP 页面,所以在编译前,会先通过指令来决定如何编译 JSP 页面</p>  

  14.         <p>取得 head.jsp 文件中的 i 的值:<%= i%></p>  

  15.     </body>  

  16. </html>  


head.jsp



[java] view plaincopy

  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>  

  2. <%  

  3.   int i = 1;  

  4. %>  

  5. <p>这里是 head.jsp</p>  


执行结果:




我们可以看到,在 JSP 引擎编译前,先会读取指定,并通过 include 指令将两个页面合在一起。比如上例,index.jsp 使用 include 指令,将 head.jsp 加载到 include 指令所在处。


2、page指令

格式:


[java] view plaincopy

  1. <%@ page  

  2.   [language="java"]  

  3.   [import="{package.class | package.*},……"]  

  4.   [extends="package.class"]  

  5.   [session="true | false"]  

  6.   [buffer="none | 8Kb | sizeKb"]  

  7.   [autoFlush="true | false"]  

  8.   [isThreadSafe="true | false"]  

  9.   [info="text"]  

  10.   [errorPage="relativeURL"]  

  11.   [contentType="mimeType[;pageEncode=encode]"|"text/html; charset=utf-8"]  

  12.   [isErrorPage="true | false"]  

  13. %>  


这个是不是看起来有点晕晕的。说实话,我也记不下来这么多。这引起干什么的,我通过一个表格让大家了解一下。累死我了。。。这打得。。。奋斗


属性名使用说明范例
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就表明哥只能管一个人。默认为大多数:trueisThreadsafe="true"
buffer设定 JspWrite类型预定义对象 out 缓冲区大小。buffer="none"
autoFlush设置缓冲区被填满时是否自动刷新。autoFlush
info用来定义一个将加入到已编译成功的页面中的字符串info="text"

其实,在这里面,我们基本上只用到 import、errorPage 还有 contentType,其它的很少用。


3、taglib指令

格式:


[java] view plaincopy

  1. <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>  


tablib 指令用于定义一个标记库以及标记的前缀。什么意思呢?这是教科书上给的定义。我也没明白。最后,我查了一些书才明白什么意思,这玩意就是用来定义和访问自己所定义的标签。相关的内容,我会在以后和大家谈论。现在先给大家留个悬念(其实是手打字打麻了——一会儿老爸还要强制本少干家务大哭)。



(六)动作

在世纪中国武打片振撼了整个美国。最著名的,且几乎无法超越的当属李小龙。



大家别误会,我不是要给大家放电影看。我只是想说,JSP 也是位动作迷。他为自己也创造了一种叫“动作”的功能——还好没叫功夫。


JSP 动作是用来控制 JSP 引擎行为,执行一些标准常用的 JSP 页面的动作。那具体什么是动作呢?这个我在下次在“JSP基础语法【二】”中,花一章节的内容来告诉大家。毕竟今天的内容太多了。如果消化不了可不成。呵呵,下次见。偷笑