JSP入门初级教程之JSP概述.docx
- 文档编号:11196397
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:31
- 大小:35.78KB
JSP入门初级教程之JSP概述.docx
《JSP入门初级教程之JSP概述.docx》由会员分享,可在线阅读,更多相关《JSP入门初级教程之JSP概述.docx(31页珍藏版)》请在冰豆网上搜索。
JSP入门初级教程之JSP概述
JSP入门初级教程之JSP概述
JSP(JAVASERVERPAGES)是由Sun公司在java语言上开发出来的一种动态网页制作技术,其可使您可以将网页中的动态部分和静态的HTML相分离。
您可以使用平常得心应手的工具并按照平常的方式来书写HTML语句。
然后,将动态部分用特殊的标记嵌入即可,这些标记常常以“<%”开始并以“%>”结束。
例如,这儿有一个JSP页面:
<html>
<head><title>jsp教程</title></head>
<body>
<I><%out.println(“helloworld”);%></I>
</body></html>
它将输出“helloworld”。
通常,您要将文件以“.jsp”为扩展名,并将它放置到任何您可以放置普通WEB页面的路径下。
尽管JSP文件看起来更象是HTML文件而不是Servlet文件,但,事实上,它恰恰将转换为Servlet文件,其中的静态HTML仅仅用来输出Servlet服务方法返回的信息。
如果JSPpages已经被转换为Servlet且Servlet被编译进而被装载(在第一次被Request时),当您再次Request此JSP页面时,将察觉不到一瞬的延迟。
也请留意这个现象,一些WebServers允许您为它定义别名,从而,好象一个URL是指向一个HTML,但事实上它指向的是一个Servlet或JSPpages.
构造一个JSPpage,除了可内嵌的规则的HTML,还有三类主要的JSP元素:
Scriptingelements,Directives,和Actions.使用Scriptingelements您可以定义最终转换为Servlet的部分,Directives使您可以控制这个Servlet的整体结构,而Actions使您可以指定可重用的已有组件,另外,还可控制JSP引擎的运行。
为了简化Scriptingelements,您可以在某一段上利用一些预定义的变量,如request。
本教程式是以JSP1.1版本进行讲解的。
其语法概括如下表,其详细使用在随后的课程中详细讲解.
JSP元素
语法
解释
JSPExpression
<%=表达式%>
Expression用于计算并用于输出。
<jsp:
expression>表达式</jsp:
expression>,可使用的预定义的变量有request,response,out,session,application,config,andpageContext(在Sriptlets中也可使用)。
JSPScriptlet
<%代码%>
插入用于服务的代码。
<jsp:
scriptlet>代码</jsp:
scriptlet>
JSPDeclaration
<!
%代码%>
属于Servlet部分的代码但并不是服务方法。
<jsp:
declaration>代码</jsp:
declaration>
JSPpageDirective
<%@pageatt=”val”%>
指向Servlet引擎的路径。
<jsp:
directive.pageatt="val"\>.以下是其合法的属性(缺省值加粗):
import="package.class"
contentType="MIME-Type"
isThreadSafe="true|false"
session="true|false"
buffer="sizekb|none"
autoflush="true|false"
extends="package.class"
info="message"
errorPage="url"
isErrorPage="true|false"
language="java"
JSPincludeDirective
<%@includefile=”URL”%>
当JSPpage被翻译成Servlet时将被包含进去的本地系统上的文件。
<jsp:
directive.includefile=”URL”\>这个URL必须是相对的。
当页面被请求时才用“jsp:
includeaction”调入。
JSP注释
<%--注释--%>
当JSP转换为Servlet时将被忽略。
<--注释-->
TheJSP:
includeAction
<jsp:
includepage=”relativeURL”flush=”true”/>
在页面被请求(Requested)时调入文件。
如果您想要在页面被转化(Translated)时将文件包含进来,则,请使用上面所提到的directive来代替。
警告:
在一些服务器上(Servers),被包含的文件只能是HTML或JSP,一般以文件的后缀名来判定。
Thejsp:
useBeanAction
<jsp:
useBeanatt=val*/>或<jsp:
useBeanatt=val*>
…..
</jsp:
useBean>
寻找或生成一个JavaBean.
可能的属性是:
id="name"
scope="page|request|session|application"
class="package.class"
type="package.class"
beanName="package.class"
Thejsp:
setPropertyAction
<jsp:
setPropertyatt=val*/>
设置bean的属性,通过明确的指定或使用request得到的参数。
合法的属性:
name="beanName"
property="propertyName|*"
param="parameterName"
value="val”
Thejsp:
getPropertyAction
<jsp:
getPropertyname=”propertyName”value=”val”/>
检索并输出bean的属性。
Thejsp:
forwardAction
<jsp:
forwardpage=”relativeURL”/>
向前请求(request)另一个页面。
Thejsp:
pluginAction
<jsp:
pluginattribute=”value”*>
</jsp:
plugin>
生成特定的浏览器的OBJECT或EMBED标签,用来明确运行Applet所使用的JAVA插件(plugin)。
JSP入门初级教程之JSP指令
<JSPdirectivemso-hansi-font-family:
"">影响servlet类的整体结构。
它常用以下形式:
<%@directiveattribute=”value”%>
而且,您可以将多个属性写在一个语句中:
<%@directiveattribute1="value1"attribute2="value2"attributeN="valueN"%>
有两种主要的directive:
page,允许您做一些类似importclasses的事,定义servlet的超类(Superclass),
mso-hansi-font-family:
"">等;
include,允许您将文件插入servlet类中(当JSP文件翻译为servlet时)。
一、JSPpageDirective
语法:
<%@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"]
%>
Pagedirectivemso-hansi-font-family:
"">允许您定义一些区分大小写的属性:
(1)import=“package.class”或import=“package.class1,..,package.classN”。
mso-hansi-font-family:
"">
您可以定想要import的packages。
例如:
<%@pageimport="java.util.*"%>
import属性是这几个属性中唯一一个可以在一个JSP中出现多次的。
(2)contenType=“MIME=Type”或contentType=“MIME-Type;charset=Character-Set”mso-hansi-font-family:
"">
它指定输出的MIME类型。
缺省为“text/html”。
例如:
<%@pagecontentType="text/plain"%>"
在scriptlet中等价于:
<%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”。
如果值为“truemso-hansi-font-family:
"">”(缺省)表示:
当缓冲满时将自动清空,值为“falsemso-hansi-font-family:
"">”时表示:
当缓冲满时递出一个异常,这很少使用。
当buffer=”none”是若用falsemso-hansi-font-family:
"">值是不合法的。
(7)extends=”package.class”。
这将为servlet产生一个超类。
请特别谨慎的使用这一功能,因为,服务器也许已经定义了一个。
(8)info=“message”。
定义一个可以通过调用getServletInfo方法得到的串。
(9)errorPage=“URL”。
指定一个JSPmso-hansi-font-family:
"">页面来处理任何一个可抛出的但当前页面并未处理的意外错误。
(10)isErrorPage=“true|false”。
指定当前页面是否可以处理来自另一个页面的错误,缺省为“false”。
(11)language=“java”mso-hansi-font-family:
"">。
指出以下将使用的语言。
不过,不必为这一属性费心,因为,“javamso-hansi-font-family:
"">”既是缺省又是唯一合法的选择。
二JSPincludeDirective这种directive使您可以在JSP转换为servlet时将一个文件包含进来。
语法:
<jsp:
includepage="{relativeURL|<%=expression%>}"flush="true"/>mso-hansi-font-family:
";mso-font-kerning:
0pt">或
<jsp:
includepage="{relativeURL|<%=expression%>}"flush="true">
<jsp:
paramname="parameterName"
value="{parameterValue|<%=expression%>}"/>+
</jsp:
include>
URLmso-hansi-font-family:
"">通常相对于指向它的JSP页面,但是,普遍使用相对“URL”,您可以使用一个斜杠“/”作为URL的开始来告知系统URLmso-hansi-font-family:
"">相对的Webserver的主路径。
被包含的文件将以规则的JSP形式来解析,因此,您可以在其中使用静态HTML,scriptingelements,directives,和actions。
让我们来看一个例子,许多站点在每一个页面上包含一个小型的导航条。
它通常出现在页面的顶部或左右侧,并包含在每一个页面里。
这用includedirective来实现是很自然的,若用规则的HTMLmso-hansi-font-family:
"">来把这些语句拷到每一个页面无疑是个梦魇。
请看下列代码:
<HTML>
<HEAD>
<TITLE>JSP教程</TITLE>
</HEAD>
<BODY>
<%@includefile="/navbar.html"%>
<!
—本页面的其他部分...-->
</BODY>
</HTML>
因为文件是在页面被转换时插入的,因此,如果导航条改变了,您需要将所有指向它的JSPmso-hansi-font-family:
"">页面全部重新编译一次。
如果您的导航条并不常改变这样做无疑是高效的,但是,如果您的被包含文件更改频繁,则建议您使用jsp:
includeaction(后面将谈到)来替代,它在页面被请求时才包含文件。
JSP入门初级教程之预定义变量的使用
JSP表达式和scriptlets中的代码,提供了8种自动定义的变量,有时称做implicitobjects(固有对象)。
它们是:
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的属性pagedirective,您可以自己定义缓冲的大小,甚至可以在使用了buffer属性后关闭缓冲。
也请注意,out仅用于scriptlets之中,因为JSP表达式自动的放入输出流,所以极少需要明确的声明out。
session
应用与request相联系的HttpSession类。
因为session是自动创建的,即使没有一个引入的session,这种变量仍可绑定。
有一个例外是,如果您用pagedirective关闭session,再试图使用session时将导致错误(在JSP页面向servlet转换时)。
application
使用ServeletContext类,通过使用getServletConfig().getContext()得到。
config
是一个ServletConfig类的对象。
pageContext
这是JSP中的一个新的类PageContext,用于精练特定服务器的特点时使用,如提高JspWriters的执行效率。
如果您通过这个类访问而不是直接的,您的代码将仍然运行在“规则”的JSP/servlet引擎br>
page
在JAVA中不是很有用,它仅仅是用来保存在脚本的语言不是JAVA时的时间。
JSP入门初级教程之Actions的使用
JSPactions使用您可以动态的插入一个文件,重用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标签为Javaplugins生成特定的浏览器的代码。
1、jsp:
includeAction
这个action使您可以在即将生成的页面上包含进一些文件:
<jsp:
includepage="relativeURL"flush="true"/>
与includedirective不同,这个action是在页面被请求时才将文件包含进来,而,includedirective则是在JSP页面被转换为servlet时包含文件。
为了提高效率,includeaction做了一点小小的牺牲,即,它不允许被包含的页面含有一般的JSP代码(例如,不可设置HTTP头),但是,它具有显著的灵活性,如下面的JSP代码,它实现将四个不同的片段插入如下的页面。
每一次当标题改变的时候,您仅需修改这四个文件而无须更改主要的JSP页面。
WhatsNew.jsp
<HTML>
<HEAD>
<TITLE>JSP教程</TITLE>
<BODY>
<CENTER>
<TABLEBORDER=5BGCOLOR="#EF8429">
<TR><THCLASS="TITLE">What"sNewatChinesecomicsites</TABLE>
</CENTER>
<P>
Hereisasummaryofourfourmostrecentnewsstories:
<OL>
<LI><jsp:
includepage="news/Item1.html"flush="true"/>
<LI><jsp:
includepage="news/Item2.html"flush="true"/>
<LI><jsp:
includepage="news/Item3.html"flush="true"/>
<LI><jsp:
includepage="news/Item4.html"flush="true"/>
</OL>
</BODY>
</HTML>
当然您可以定义自己?
ML文件,但有一点请注意:
您应该将文件放到您的JSP目录下的news目录内。
jsp:
useBeanAction的使用
一、语法:
<jsp:
useBean
id="beanInstanceName"
scope="page|request|session|application"
{class="package.class"|
type="package.class"|
class="package.class"type="package.class"|
beanName="{package.class|<%=expression%>}"type="package.class"
}
{/>|
>其他元素
</jsp:
useBean>
}
这个action使您能将一个JavaBean装入一个JSP页面。
这是一个非常有用的能力,因为它使您可以使用可重用的JAVA类而不需牺牲性能。
最简单的语法用于指定一个bean:
<jsp:
useBeanid="name"class="package.class"/>
这通常意味着“实例化一个类的对象通过指定一个类,并将之与一个通过id指定名称的变量绑定”。
然而,就象我们看到的,您可以指定一个scope属性来使得bean不仅仅与当前的页面相联系。
在这种情形下,得到一个对已存在的bean的引用是非常有用的,而且,仅当没有相同的id和scope的bean存在时才创建一个新的。
现在,您已有了bean,您可以通过jsp:
setProperty来修改它,或者,通过使用之前用id指定的名字来使用scriptlet或明确的调用方法。
当您说“这个bean有一个称为foo的X类型的属性”,您真正的意思是“这个类有一个称为getFoo的方法,它返回X类型的某类值,还有另一个方法称为setFoo,它以X为参数。
”这jsp:
setPropertyaction将在下一单元详细的介绍,但是现在您既可以给出一个明确的值,给出一个属性来说明此值是从request的参数继承而来,也可以仅仅列出属性来标志此值应该从与属性名同名的参数继承而来。
您可以通过调用适用的getXxx方法,或更普遍的,使用jsp:
getPropertyaction,来得到已存在的JSP表达式或scriptlet属性。
请注意,为bean指定的类必须在服务器的规则的类路径下,而不是用来保留当改变时自动装载的类的路径。
例如,在JavaWebServer上,它和它所用的类必须到类的目录或在lib目录下的一个jar文件内,而不是在servlets的目录下。
下面让我们来看一个非常简单的例子,它装载一个bean并且设置/得到一个简单的串参数。
BeanTest.jsp
<HEAD>
<TITLE>ReusingJavaBeansinJSP</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLEBORDER=5>
<TR><THC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 入门 初级教程 概述