分享
 
 
 

(JSP)简明教程(二)

王朝java/jsp·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

JSP概述

JSP(IAVA SERVER PAGES)是由Sun 公司在java语言上开发出来的一种动态网页制作技术,其可使您可以将网页中的动态部分和静态的HTML相分离。您可以使用平常得心应手的工具并按照平常的方式来书写HTML语句。然后,将动态部分用特殊的标记嵌入即可,这些标记常常以“<%”开始并以“%>”结束。例如,这儿有一个JSP页面:

<html>

<head><title>jsp教程</title></head>

<body>

<I><%out.println(“hello world”);%></I>

</body></html>

它将输出“hello world”。

通常,您要将文件以“.jsp”为扩展名,并将它放置到任何您可以放置普通WEB页面的路径下。尽管JSP文件看起来更象是HTML文件而不是Servlet文件,但,事实上,它恰恰将转换为Servlet文件,其中的静态HTML仅仅用来输出Servlet服务方法返回的信息。如果JSP pages 已经被转换为Servlet且Servlet 被编译进而被装载(在第一次被Request时),当您再次Request 此JSP页面时,将察觉不到一瞬的延迟。也请留意这个现象,一些Web Servers允许您为它定义别名,从而,好象一个URL是指向一个HTML,但事实上它指向的是一个Servlet 或JSP pages.

构造一个JSP page,除了可内嵌的规则的HTML,还有三类主要的JSP元素:s cripting elements,Directives,和 Actions.使用s cripting elements您可以定义最终转换为Servlet的部分,Directives 使您可以控制这个Servlet的整体结构,而Actions使您可以指定可重用的已有组件,另外,还可控制JSP引擎的运行。为了简化s cripting elements,您可以在某一段上利用一些预定义的变量,如request。

本教程式是以JSP最新的1.1版本,进行讲解的。其语法概括如下表,其详细使用在随后的课程中详细讲解.

JSP 元素

语法

解释

JSP Expression

<%= 表达式 %>

Expression 用于计算并用于输出。

<jsp:expression>表达式</jsp:expression>,可使用的预定义的变量有request, response, out, session, application, config, and pageContext(在Sriptlets中也可使用)。

JSP s criptlet

<% 代码 %>

插入用于服务的代码。

<jsp:s criptlet>代码</jsp:s criptlet>

JSP Declaration

<!% 代码 %>

属于Servlet部分的代码但并不是服务方法。

<jsp:declaration>代码</jsp:declaration>

JSP page Directive

<%@ page att=”val” %>

指向Servlet引擎的路径。

<jsp:directive.page att="val"\>. 以下是其合法的属性(缺省值加粗):

l import="package.class"

l contentType="MIME-Type"

l isThreadSafe="true|false"

l session="true|false"

l buffer="sizekb|none"

l autoflush="true|false"

l extends="package.class"

l info="message"

l errorPage="url"

l isErrorPage="true|false"

l language="java"

JSP include Directive

<%@ include file =”URL” %>

当JSP page被翻译成Servlet 时将被包含进去的本地系统上的文件。

<jsp:directive.include file=”URL”\> 这个URL必须是相对的。当页面被请求时才用 “jsp:include action”调入。

JSP 注释

<%-- 注释--%>

当JSP 转换为Servlet 时将被忽略。

<-- 注释 -->

The JSP:include Action

<jsp:include page=”relative URL” flush=”true”/>

在页面被请求(Requested)时调入文件。

如果您想要在页面被转化(Translated)时将文件包含进来,则,请使用上面所提到的directive来代替。警告:在一些服务器上(Servers),被包含的文件只能是HTML或JSP,一般以文件的后缀名来判定。

The jsp:useBean Action

<jsp:useBean att=val*/>或<jsp:useBean att=val*>

…..

</jsp:useBean>

寻找或生成一个Java Bean.

可能的属性是:

l id="name"

l scope="page|request|session|application"

l class="package.class"

l type="package.class"

l beanName="package.class"

The jsp:setProperty Action

<jsp:setProperty att=val*/>

设置bean的属性,通过明确的指定或使用request得到的参数。

合法的属性:

l name="beanName"

l property="propertyName|*"

l param="parameterName"

l value="val”

The jsp:getProperty Action

<jsp:getProperty name=”propertyName” value=”val”/>

检索并输出bean的属性。

The jsp:forward Action

<jsp:forward page=”relative URL”/>

向前请求(request)另一个页面。

The jsp:plugin Action

<jsp:plugin attribute=”value”*>

</jsp:plugin>

生成特定的浏览器的OBJECT 或EMBED标签,用来明确运行Applet所 使用的JAVA插件(plugin)。

JSP directive mso-hansi-font-family:"">影响servlet 类的整体结构。它常用以下形式:

<%@ directive attribute=”value”%>

而且,您可以将多个属性写在一个语句中:

<%@ directive attribute1="value1"

attribute2="value2"

attributeN="valueN" %>

有两种主要的directive:

page,允许您做一些类似import classes的事,定义servlet的超类(Superclass),

mso-hansi-font-family:"">等;

include,允许您将文件插入servlet类中(当JSP文件翻译为servlet时)。

一、JSP page Directive

语法:

<%@ 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 directive mso-hansi-font-family:"">允许您定义一些区分大小写的属性:

(1)import = “package.class”或 import = “package.class1,..,package.classN”。

mso-hansi-font-family:"">

您可以定想要import的packages。例如:

<%@ page import="java.util.*" %>

import属性是这几个属性中唯一一个可以在一个JSP中出现多次的。

||||||(2)contenType = “MIME=Type” 或contentType=“MIME-Type;charset=Character-Set”

mso-hansi-font-family:"">

它指定输出的MIME类型。缺省为“text/html”。例如:

<%@ page contentType="text/plain" %>"

在s criptlet中等价于:

<% response.setContentType("text/plain"); %>

(3)isThreadSafe = “true | false”.如果值为“true”(缺省)表示:将进行普通的servlet处理,多个请求将被一个servlet实例并行处理,在这种情况下,编程人员同步访问多个实例变量。值为“false”时表示:servlet将实现单线程模式(SingleThreadModel),不管请求是顺序提交还是并发出现,都将提供不同的分离的servlet实例。

(4)session=”true | false”。 如果值为“true”(缺省)表示:预定义变量session(继承HttpSession)应该绑定到一个已存在的session,否则就应该创建一个并将之绑定。值为“false”时表示:将不使用session变量,如果试图使用,将在JSP向servlet转化时出现错误。

(5)buffer = “sizekb | none”。为JspWriter输出确定缓冲的大小。缺省由服务器而定,但至少要有8kb。

(6)autoflush=”true | false”。 如果值为“true mso-hansi-font-family:"">”(缺省)表示:当缓冲满时将自动清空,值为“false mso-hansi-font-family:"">”时表示:当缓冲满时递出一个异常,这很少使用。当buffer=”none”是若用false mso-hansi-font-family:"">值是不合法的。

(7)extends=”package.class”。这将为servlet产生一个超类。请特别谨慎的使用这一功能,因为,服务器也许已经定义了一个。

(8)info = “message”。定义一个可以通过调用getServletInfo方法得到的串。

(9)errorPage = “URL”。指定一个JSP mso-hansi-font-family:"">页面来处理任何一个可抛出的但当前页面并未处理的意外错误。

(10)isErrorPage = “true | false”。指定当前页面是否可以处理来自另一个页面的错误,缺省为“false”。

(11)language = “java” mso-hansi-font-family:"">。指出以下将使用的语言。不过,不必为这一属性费心,因为,“java mso-hansi-font-family:"">”既是缺省又是唯一合法的选择。

二JSP include Directive 这种directive 使您可以在JSP转换为servlet时将一个文件包含进来。语法:

<jsp:include page="{relativeURL | <%= expression %>}" flush="true" />mso-hansi-font-family:";mso-font-kerning: 0pt">或

<jsp:include page="{relativeURL | <%= expression %>}" flush="true" >

<jsp:param name="parameterName"

value="{parameterValue | <%=expression %>}" />+

</jsp:include>

URL mso-hansi-font-family:"">通常相对于指向它的JSP页面,但是,普遍使用相对“URL”,您可以使用一个斜杠“/”作为URL的开始来告知系统URL mso-hansi-font-family:"">相对的Web server的主路径。被包含的文件将以规则的JSP形式来解析,因此,您可以在其中使用静态HTML,s cripting elements,directives,和 actions。

让我们来看一个例子,许多站点在每一个页面上包含一个小型的导航条。它通常出现在页面的顶部或左右侧,并包含在每一个页面里。这用include directive 来实现是很自然的,若用规则的HTML mso-hansi-font-family:"">来把这些语句拷到每一个页面无疑是个梦魇。请看下列代码:

<HTML>

<HEAD>

<TITLE> JSP教程</TITLE>

</HEAD>

<BODY>

<%@ include file="/navbar.html" %>

<!— 本页面的其他部分... -->

</BODY>

</HTML>

因为文件是在页面被转换时插入的,因此,如果导航条改变了,您需要将所有指向它的JSP mso-hansi-font-family:"">页面全部重新编译一次。如果您的导航条并不常改变这样做无疑是高效的,但是,如果您的被包含文件更改频繁,则建议您使用jsp:include action(后面将谈到)来替代,它在页面被请求时才包含文件。

为了简化JSP表达式和s criptlets中的代码,提供了8种自动定义的变量,有时称做implicit objects(固有对象)。它们是:request,response,out,session,application,config,pageContext,和 page。下面我们来详细的了解它们。

request

与request相联系的是HttpServletRequest类,使您可以得到request的参数(通过getParameter方法),request 的类型(GET,POST,HEAD,等等),和引入的HTTP头(cookies,Referer,等等)。严格来说,request是类ServletRequest的一个子类而不是HttpServletRequest类的,事实上,如果request的协议不是HTTP,那麽它几乎不会工作。

response

对客户端的response与HttpServletResponse 相连。请注意,因为输出流是放入缓冲的,所以可以设置HTTP状态码和response头,尽管在标准的servlets中不允许将之发送到客户端。

out

这里使用PrintWriter类来发送输出到客户端。然而,为了使response对象有效,可使用一个PrintWrite类的使用缓冲的版本JspWriter。使用session的属性page directive,您可以自己定义缓冲的大小,甚至可以在使用了buffer属性后关闭缓冲。也请注意,out仅用于s criptlets之中,因为JSP表达式自动的放入输出流,所以极少需要明确的声明out。

session

应用与request相联系的HttpSession类。因为session是自动创建的,即使没有一个引入的session,这种变量仍可绑定。有一个例外是,如果您用page directive关闭session,再试图使用session时将导致错误(在JSP页面向servlet转换时)。

application

使用ServeletContext类,通过使用getServletConfig().getContext()得到。

config

是一个ServletConfig类的对象。

pageContext

这是JSP中的一个新的类PageContext,用于精练特定服务器的特点时使用,如提高JspWriters的执行效率。如果您通过这个类访问而不是直接的,您的代码将仍然运行在“规则”的JSP /servlet引擎。

page

在JAVA中不是很有用,它仅仅是用来保存在脚本的语言不是JAVA时的时间。

JSP actions 使用您可以动态的插入一个文件,重用JavaBeans组件,前进到另一个页面,或为Java 插件生成一个HTML。可以使用的action 有:

(1) jsp:include --在页面被请求时包含进一个文件。

(2) jsp:useBean--找到或实例化一个JavaBean。

(3) jsp:setProperty--设置一个JavaBean属性。

(4) jsp:getProperty--将JavaBean的属性插入到输出。

(5) jsp:forward--让请求者可以向前到一个新的页面。

(6) jsp:plugin--用OBJECT或EMBED标签为Java plugins生成特定的浏览器的代码。

1、jsp:include Action

这个action使您可以在即将生成的页面上包含进一些文件:

<jsp:include page="relative URL" flush="true" />

与include directive不同,这个action是在页面被请求时才将文件包含进来,而,include directive则是在JSP页面被转换为servlet时包含文件。为了提高效率,include action做了一点小小的牺牲,即,它不允许被包含的页面含有一般的JSP代码(例如,不可设置HTTP头),但是,它具有显著的灵活性,如下面的JSP 代码,它实现将四个不同的片段插入如下的页面。每一次当标题改变的时候,您仅需修改这四个文件而无须更改主要的JSP 页面。

WhatsNew.jsp

<HTML>

<HEAD>

<TITLE> JSP教程</TITLE>

<BODY >

<CENTER>

<TABLE BORDER=5 BGCOLOR="#EF8429">

<TR><TH CLASS="TITLE"> What"s New at Chinese comic sites</TABLE>

</CENTER>

<P>

Here is a summary of our four most recent news stories:

<OL>

<LI><jsp:include page="news/Item1.html" flush="true"/>

<LI><jsp:include page="news/Item2.html" flush="true"/>

<LI><jsp:include page="news/Item3.html" flush="true"/>

<LI><jsp:include page="news/Item4.html" flush="true"/>

</OL>

</BODY>

</HTML>

当然您可以定义自己的HTML文件,但有一点请注意:

您应该将文件放到您的JSP目录下的news目录内。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有