2 动态网页设计技术.docx
《2 动态网页设计技术.docx》由会员分享,可在线阅读,更多相关《2 动态网页设计技术.docx(31页珍藏版)》请在冰豆网上搜索。
2动态网页设计技术
2动态网页设计技术
2.1Web网站访问机理
JSP又称JavaServerPages,是java平台下用于构建包含动态网内容(比如HTML、DHTML、XHTML和XML)的技术。
一个JSP页面是一个基于文本的文档,它可以用来描述如何处理客户端的请求,如何为客户端创建一个响应。
在JSP页面中除了可以包含文本、HTML标记等外,还可以包含JSP的自身的几种元素:
指令、脚本元素和动
静态页面文件的访问机理图:
2
1
动态页面文件的访问机理图:
4将接收到的结果返回给客户端
3执行结果返回给Web服务器
2转发给JSP容器
1请求的是*.jsp文件
2.2JSP基本语法
2.2.1JSP的表达式
JSP表达式用来把Java数据直接输出页面。
其语法如下:
<%=Java表达式%>
计算Java表达式得到的结果,并将其转换成字符串,然后输出到页面。
计算在运行时进行(页面被请求时),因此可以访问和请求有关的全部信息。
例如,下面的代码显示页面被请求的日期/时间:
当前时间:
<%=newjava.util.Date()%>
或<%=(newjava.util.Date()).toLocaleString()%>
输出远程主机例子:
Yourhostname:
<%=request.getRemoteHost()%>
2.2.2JSP的脚本
如果你要完成的任务比插入简单的表达式更加复杂,可以使用JSP脚本。
JSP脚本允许你把任意的Java代码插入JSP页面中。
JSP脚本语法如下:
<%Java代码%>
和JSP表达式一样,脚本也可以访问所有预定义的变量。
例如,如果你要向结果页面输出内容,可以使用out变量:
<%
StringqueryData=request.getQueryString();
out.println("AttachedGETdata:
"+queryData);
%>
JSP脚本和HTML标记混合使用的例子:
<%if(Math.random()<0.5){%>
Haveaniceday!
<%}else{%>
Havealousyday!
<%=%>
2.2.3JSP的声明
JSP声明用来定义JSP页面的脚本命令使用到的变量和方法,其语法如下:
<%!
Java代码%>
由于声明不会有任何输出,因此它们往往和JSP表达式或脚本命令结合在一起使用。
例如,下面的JSP代码片断输出自从服务器启动(或Servlet类被改动并重新装载以来)当前页面被请求的次数:
<%!
privateintaccessCount=0;%>
自从服务器启动以来页面访问次数为:
<%=++accessCount%>
2.2.4page指令
page指令定义了一系列页面依赖属性,并能将这些属性传递给JSP容器。
page指令的形式为:
<%@page
[language="java"]
[extends="package.class"]
[import="{package.class|.*},..."]
[session="true|false"]
[buffer="none|8kb|sizekb"]
[autoFlush="true|false"]
[isThreadSafe="true|false"]
[info="text"]
[errorPage="relativeURL"]
[contentType="mimeType[;charset=characterSet]"|"text/html;charset=ISO-8859-1"]
[isErrorPage="true|false"]
%>
page指令的属性解释如下:
(1)language
定义了在jsp使用的脚本语言,目前java是缺省又是唯一合法的选择。
language=”java”
(2)extends
extends=”package.class”。
这将为servlet产生一个超类。
请特别谨慎的使用这一功能,因为,服务器也许已经定义了一个。
(3)import
import=”package.class”或import=”package.class1,..,package.classN”。
通过该属性你可以导出在jsp文件中要使用到的类(在java中完成某种功能的类文件)。
举例:
<%@pageimport="java.util.*"%>
import属性是这几个属性中唯一一个可以在一个JSP中出现多次的。
(4)session
session=”true|false”。
如果值为“true”(缺省)表示:
预定义变量session(继承HttpSession)应该绑定到一个已存在的session,否则就应该创建一个并将之绑定。
值为“false”时表示:
将不使用session变量,如果试图使用,将在JSP向servlet转化时出现错误。
(5)buffer
buffer=”sizekb|none”。
为JspWriter输出确定缓冲的大小。
缺省由服务器而定,但至少要有8kb。
(6)autoflush
autoflush=”true|false”。
如果值为”true”(缺省)表示:
当缓冲满时将自动清空,值为”false“时表示:
当缓冲满时递出一个异常,这很少使用。
当buffer=”none”是若”false”值是不合法的。
(7)isThreadSafe
isThreadSafe=”true|false”.如果值为“true”(缺省)表示:
将进行普通的servlet处理,多个请求将被一个servlet实例并行处理,在这种情况下,编程人员同步访问多个实例变量。
值为“false”时表示:
servlet将实现单线程模式(SingleThreadModel),不管请求是顺序提交还是并发出现,都将提供不同的分离的servlet实例。
(8)info
info=”message”。
定义一个可以通过调用getServletInfo方法得到的串。
(9)isErrorPage
isErrorPage=”true|false”。
指定当前页面是否可以处理来自另一个页面的错误,缺省为“false”。
(10)errorPage
errorPage=”URL”。
指定一个JSP页面来处理任何一个可抛出的但当前页面并未处理的意外错误。
(11)contentType
contenType=”MIME-Type”或contentType=”MIME-Type;charset=Character-Set”.它指定输出的MIME类型。
缺省为“text/html”。
举例:
<%@pagecontentType="text/plain"%>
<%@pagecontentType=”text/html;charset=GB2312”%>
2.2.5include指令
include指令可以在jsp文件编译为servlet类文件时,将一个文件包含进来。
include指令的形式如下:
<%@includefile=”URL”%>
URL通常相对于指向它的JSP页面。
但是,普遍使用相对“URL”,可以使用一个斜杠“/”作为URL的开始来告知系统URL相对的Webserver的主路径。
被包含的文件将以规则的JSP形式来解析,因此,您可以在其中使用静态HTML,scriptingelements,directives,和actions。
让我们来看一个例子,许多站点在每一个页面上包含一个小型的导航条。
它通常出现在页面的顶部或左右侧,并包含在每一个页面里。
这用includedirective来实现是很自然的,若用规则的HTML来把这些语句拷到每一个页面无疑是个梦魇。
请看下列代码:
JSP教程<%@includefile="/navbar.html"%>
—本页面的其他部分...-->
因为文件是在页面被转换时插入的,因此,如果导航条改变了,您需要将所有指向它的JSP页面全部重新编译一次。
如果您的导航条并不常改变这样做无疑是高效的,但是,如果您的被包含文件更改频繁,则建议您使用include>动作(后面将谈到)来替代,它在页面被请求时才包含文件。
2.2.6JSP的注释
JSP注释的形式为:
<%--注释--%>或<%/**注释...**/%>
JSP注释和字符引用约定
下面是一些特殊的标记或字符,你可以利用它们插入注释或可能被视为具有特殊含义的字符。
<%--comment--%>JSP注释,也称为“隐藏注释”。
JSP引擎将忽略它。
标记内的所有JSP脚本元素、指令和动作都将不起作用。
--comment-->HTML注释,也称为“输出的注释”,直接出现在结果HTML文档中。
标记内的所有JSP脚本元素、指令和动作正常执行。
<\%在模板文本(静态HTML)中实际上希望出现“<%”的地方使用。
%\>在脚本元素内实际上希望出现“%>”的地方使用。
\'使用单引号的属性内的单引号。
不过,你既可以使用单引号也可以使用双引号,而另外一种引号将具有普通含义。
\"使用双引号的属性内的双引号。
参见“\'”的说明。
脚本和指令应用举例
下面是一个使用JSP表达式、Scriptlet、声明、指令的简单例子。
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
JavaServerPagesVLINK="#551A8B"ALINK="#FF0000">
JSP应用实例
下面是一些利用各种JSP功能生成的动态内容:
- 表达式.
你的主机名:
<%=request.getRemoteHost()%>.
- JSPScriptlet.
<%out.println("查询字符串:
"+
request.getQueryString());%>
- 声明(和表达式).
<%!
privateintaccessCount=0;%>
服务器启动以来访问次数:
<%=++accessCount%>
- 指令(和表达式).
<%@pageimport="java.util.*"%>
当前日期:
<%=newDate()%>
|