2 动态网页设计技术.docx

上传人:b****1 文档编号:23047929 上传时间:2023-04-30 格式:DOCX 页数:31 大小:43.17KB
下载 相关 举报
2 动态网页设计技术.docx_第1页
第1页 / 共31页
2 动态网页设计技术.docx_第2页
第2页 / 共31页
2 动态网页设计技术.docx_第3页
第3页 / 共31页
2 动态网页设计技术.docx_第4页
第4页 / 共31页
2 动态网页设计技术.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

2 动态网页设计技术.docx

《2 动态网页设计技术.docx》由会员分享,可在线阅读,更多相关《2 动态网页设计技术.docx(31页珍藏版)》请在冰豆网上搜索。

2 动态网页设计技术.docx

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">

JavaServerPages

VLINK="#551A8B"ALINK="#FF0000">

JSP应用实例

下面是一些利用各种JSP功能生成的动态内容:

  • 表达式.

    你的主机名:

    <%=request.getRemoteHost()%>.

  • JSPScriptlet.

    <%out.println("查询字符串:

    "+

    request.getQueryString());%>

  • 声明(和表达式).

    <%!

    privateintaccessCount=0;%>

    服务器启动以来访问次数:

    <%=++accessCount%>

  • 指令(和表达式).

    <%@pageimport="java.util.*"%>

    当前日期:

    <%=newDate()%>

2.3JSP内建对象

为了简化JSP表达式和脚本的代码编写,JSP提供了一些预先定义对象,使用这些对象时可以不事先定义它们。

JSP页面中可以使用的预定义对象如下表所示:

预定义对象

类型

描述

存活范围

request

javax.servlet.ServletRequest

javax.servlet.HttpServletRequest

触发服务的请求

request

response

javax.servlet.ServletResponse

javax.servlet.HttpServletResponse

对请求的响应

page

pageContext

javax.servlet.jsp.PageContext

JSP页面的页面上下文

page

session

javax.servlet.http.HttpSession

为发出请求的客户端创建的会话对象,该对象仅对HTTP协议有效。

session

application

javax.servlet.ServletContext

从servlet配置对象中获取的servlet上下文,也可通过getServletConfig().get

Context()获得。

application

out

javax.servlet.jsp.JspWriter

写入输出流的对象

page

config

javax.servlet.ServletConfig

当前页面的ServletConfig

page

page

java.lang.Object

执行当前请求的页面实现类的实例。

page

另外,在出错处理页面中,你还可以访问预定义对象exception:

预定义对象

类型

描述

存活范围

exception

java.lang.Throwable

导致出错处理页面被唤醒的未捕获的Throwable。

page

下面逐一对上述预定义对象进行详细描述。

2.3.1request对象

通过request对象可以获得客户请求的参数、方法类型、HTTP头、客户端主机信息等。

下表列出request对象的部分方法。

返回值

方法

String

getParameter(Stringname)

以字符串类型返回请求参数的值;如果参数不存在返回null。

参数类

java.util.Enumeration

getParameterNames()

返回包含在请求中的所有参数名称的枚举型。

Object

getAttribute(Stringname)

以对象类型返回命名属性的值;如果命名属性不存在返回null。

属性类

void

setAttribute(Stringname,Objectobject)

在request对象中保存一个命名属性。

java.util.Enumeration

getAttributeNames()

返回包含在请求中的所有命名属性的名称的枚举型。

void

removeAttribute(Stringname)

删除request对象中的命名属性。

String

getCharacterEncoding()

获得request对象中字符编码的名称。

字符集类

void

setCharacterEncoding(StringcharSet)

设置request对象中字符编码的名称。

String

getRemoteAddr()

获得发送请求客户端主机的IP地址。

客户主机

String

getRemoteHost()

获得发送请求客户端主机的名称。

Cookie[]

getCookies()

以数组形式返回包含在客户机请求中的所有Cookie对象。

String

getHeader(Stringname)

略。

Http头

java.util.Enumeration

getHeaderNames()

略。

HttpSession

getSession()

返回与本请求相关联的当前会话;如果不存在,则创建一个新的会话。

会话类

举例:

2.3.2response对象

response对象是对客户请求的响应,一般由继承HttpServletResponse而来。

可以用来添加Cookie、设置HTTP状态码和response头等。

下表列出request对象的部分方法。

返回值

方法

void

addCookie(Cookiecookie)

向响应添加特定的Cookie。

void

addHeader(Stringname,Stringvalue)

添加一个含有名称和值的响应头部。

vodi

sendError(intsc)

使用特定的状态码向客户端发送一个错误响应,并清空缓冲。

void

sendError(intsc,java.lang.Stringmsg)

使用特定的状态码向客户端发送一个错误响应,并清空缓冲。

void

setStatus(intsc)

设置相应的状态码。

2.3.3out对象

out对象是用来向客户端发送内容的PrintWriter。

然而,为了让response对象更为实用,out是带缓存功能的PrintWriter,即JspWriter。

JSP允许通过page指令的buffer属性调整缓存的大小,甚至允许关闭缓存。

out一般只在Scriptlet内使用,这是因为JSP表达式是自动发送到输出流的,很少需要显式地引用out。

out对象的方法有out.pringln(Objectobject)、out.fluse()、out.clear()、out.clearBuffer()、out.close()等方法。

2.3.4session对象

session对象是和请求关联的HttpSession对象。

前面我们已经介绍过会话的自动创建,我们知道,即使不存在session引用,这个对象也是自动绑定的。

但有一个例外,这就是如果你用page指令的session属性关闭了会话,此时对session变量的引用将导致JSP页面转换成Servlet时出错。

下表列出session对象的部分方法。

返回值

方法

Object

getAttribute(Stringname)

Returnstheobjectboundwiththespecifiednameinthissession,ornullifnoobjectisboundunderthename.

java.util.Enumeration

getAttributeNames()

ReturnsanEnumerationofStringobjectscontainingthenamesofalltheobjectsboundtothissession.

void

removeAttribute(Stringname)

从会话中删除绑定到指定名称的对象。

void

setAttribute(java.lang.Stringname,java.lang.Objectvalue)

根据制定的名称将对象绑定到会话中。

String

getId()

返回分配给会话的唯一标示符。

void

invalidate()

取消会话,并解除绑定到它上面的所有对象。

int

getMaxInactiveInterval()

Returnsthemaximumtimeinterval,inseconds,thattheservletcontainerwillkeepthissessionopenbetweenclientaccesses.

void

setMaxInactiveInterval(intinterval)

以秒为单位设置两个客户请求之间的最大时间间隔,超过该间隔将取消会话。

举例:

为说明session对象的具体应用,接下来我们用三个页面模拟一个多页面的Web应用。

第一个页面(q1.html)仅包含一个要求输入用户名字的HTML表单,代码如下:

 

 

 

 请输入您的姓名:

 

 

 

 

 

  第二个页面是一个JSP页面(q2.jsp),它通过request对象提取q1.html表单中的thename值,将它存储为name变量,然后将这个name值保存到session对象中。

session对象是一个名字/值对的集合,在这里,名字/值对中的名字为"thename",值即为name变量的值。

由于session对象在会话期间是一直有效的,因此这里保存的变量对后继的页面也有效。

q2.jsp的另外一个任务是询问第二个问题。

下面是它的代码:

 

 

 <%@pagelanguage="java"%>

 <%!

Stringname="";%>

 <%

 name=request.getParameter("thename");

 session.putValue("thename",name);

 %>

 您的姓名是:

<%=name%>

 

 

 您喜欢吃什么?

 

 

 

 

 

 

  第三个页面也是一个JSP页面(q3.jsp),主要任务是显示问答结果。

它从session对象提取thename的值并显示它,以此证明虽然该值在第一个页面输入,但通过session对象得以保留。

q3.jsp的另外一个任务是提取在第二个页面中的用户输入并显示它:

 

 

 <%@pagelanguage="java"%>

 <%!

Stringfood="";%>

 <%

 food=request.getParameter("food");

 Stringname=(String)session.getValue("thename");

 %>

 您的姓名是:

<%=name%>

 

 您喜欢吃:

<%=food%>

 

 

2.3.5application对象

application对象是一个ServletContext,也可以通过getServletConfig().getContext()获得。

可以在其中存放应用程序的初始化参数、全局性对象等。

下表列出application对象的部分方法。

返回值

方法

Object

getAttribute(Stringname)

Returnstheservletcontai

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1