版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaWeb网站设计开发温浩宇第8章JSP技术基础西安电子科技大学内容8.1JSP技术概况8.2JSP基本语法8.3JSP指令8.4JSP动作8.5JavaBean技术8.1JSP技术概况
JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术是将小段的Java程序代码(Scriptlet)和JSP标签插入HTML文件中,形成在服务器端运行的JSP文件(通常扩展名为.jsp)。作为基于Java的网站开发技术,JSP应用程序具有跨平台等特性,因而在网站项目开发中得到广泛应用。JSP与JavaServlet一样都是在服务器端执行的,执行的结果通常以HTML文件的形式由Web服务器返回给浏览器端。8.1JSP技术概况JSP在的技术优势:(1)跨平台性。JSP技术支持多种操作系统和硬件平台,可以在Windows、Linux、Unix中直接部署,代码无需改动。(2)可伸缩性。JSP可以运行在很小的系统中来支持小规模的Web服务,也可以运行到多台服务器中来支持集群和负载均衡机制。(3)开发工具的多样性和开放性。目前,已经有了许多优秀的开发工具支持JSP的开发,而且其中有很多是开源产品。广泛的技术支持为JSP的发展带来了巨大的动力。(4)服务器端的可扩展性。JSP支持服务器端组件,JSP可以使用成熟的JavaBean组件来实现复杂商务功能。DEMOJSPHello8.1演示.mp48.2JSP基本语法8.2.1Java脚本在“<%”和“%>”之间可以包含任何符合Java语言语法的程序片段。此标签中嵌入的代码段在服务器端被执行,真正实现动态网页的功能。一个JSP页面可以嵌入多个程序片,这些程序片被JSP引擎按顺序执行。下面例子中的程序片(ShowServerTime.jsp)负责显示服务器的时间:<%Datenow=newDate();DateFormatd1=DateFormat.getDateInstance();Stringstr1=d1.format(now);out.write("用Date方式显示时间:"+now+"<br>");out.write("用DateFormat.getDateInstance格式化时间后为:"+str1);%>DEMOJava脚本8.2.1演示.mp48.2JSP基本语法8.2.2表达式JSP中表达式经常被用到,在<%=和%>之间可包含任何一个有效的Java表达式。表达式在服务器端经过计算后,将计算结果转化成字符串插入到该表达式在JSP文件中的位置上。表达式后面不能加分号。下面的例子(expression_test.jsp)使用表达式输出100的平方根:
100的平方根为
<%=Math.sqrt(100)%>DEMOJSP表达式8.2.2演示.mp48.2JSP基本语法8.2.3声明
<%!
%>被称为JSP声明,用于声明所生成Servlet类的成员,即变量、方法和类都可以声明。<%!和%>标签之间的所有内容都会增加到类中,而且置于_jspService()方法之外。使用该标签可以声明静态变量和方法,成为页面级别的共享变量,可被访问此网页的所有用户共享。(1)变量声明……
<%!intnumber=0;%>……intnumber=0;……out.print(++number);8.2JSP基本语法(2)方法声明……
<!--下面的代码声明一个方法square()--><%!doublesquare(doublex){doubleresult=Math.pow(x,2);returnresult;}%>……
在“<%!”和“%>”之间声明的方法在整个JSP页面内有效,但在该方法内定义的变量只在该方法内有效。这些方法将在Java程序片中被调用,当方法被调用时,方法内定义的变量被分配内存,调用完毕即可释放所占用的内存。当多个客户同时请求一个JSP页面,调用方法操作成员变量时,可以在方法前增加“synchronized”实现同步。8.2JSP基本语法(3)类声明在“<%!”和“%>”之间还可以声明类,该类在JSP页面内有效。即JSP页面中的Java程序片可以调用该类创建对象。def_class.jsp……<%!publicclassSquareRoot{doublenumber; SquareRoot(doublenumber) {this.number=number; } doublecompute() {returnMath.sqrt(number); } }%>……DEMOJSP声明8.2.3演示.mp48.2JSP基本语法8.2.4JSP中的注释JSP中的注释可分为两种:
(1)HTML注释:在<!--和-->之间加入注释内容。<!--注释内容-->JSP引擎把HTML注释交给客户,客户端通过浏览器查看JSP的源文件时,能够看到HTML注释。(2)JSP注释:在<%--和--%>之间加入注释内容。
<%--注释内容--%>JSP引擎忽略JSP注释,即在编译JSP页面时忽略该注释,客户端无法看到相应的注释内容。8.3JSP指令JSP指令主要用来提供整个JSP页面的相关信息并指定JSP页面的相关属性。它们是通知JSP引擎的消息,不直接生成输出。语法格式如下:<%@指令名属性名=“属性值”%>常见的编译指令有如下三个:
page:该指令是针对当前页面的指令,用于定义页面的全局属性。
include:用于指定包含另一个静态文件。
taglib:用于定义和访问自定义标签。8.3JSP指令8.3.1page指令page指令通常位于JSP页面的顶端,一个JSP页面可以使用多条JSP指令。其语法格式如下:<%@page属性1=“值1”属性2=“值2”……%>Page指令的常用属性如下表所示。8.3JSP指令属性名称属性作用language=”java”设定JSP网页的脚本语言。目前只可以使用Java语言contentType=”contentInfo”设定MIME类型和JSP网页的编码方式extends=”parentClass|interface”设定JSP页面编译所产生的Java类所继承的父类,或所实现的接口import=”packageList”引入该网页中要使用的Java包session=”true|false”设定此JSP网页是否可以使用session对象,默认值为trueerrorPage=”relativeURL”设定网页运行发生错误时,转向的URLisErrorPage=”true|false”设定此JSP页面是否为处理异常错误的页面buffer=”none|sizekb”设定输出流是否使用缓冲区,默认值为8KBinfo=”string”设置该JSP页面的说明信息,可以通过Servlet.getServletInfo()方法获取该值。如果在JSP页面中,可直接调用getServletInfo()方法获取该值。autoFlush=”true|false”设定输出流的缓冲区是否要自动清除,缓冲区满会产生异常,默认值trueisELIgnored=”true|false”设定在此JSP网页中是执行还是忽略EL表达式。pageEncoding=”characterEncoding”设定生成网页的编码字符集DEMOpage指令8.3.1演示.mp48.3JSP指令8.3.2include指令include指令用来在JSP页面出现该指令的位置处,静态插入一个文件(如JSP文件、HTML文件、txt文件等),不能插入用<%=和%>表示的表达式代表的文件。被插入的文件必须是可访问和可使用的,即该文件必须和当前JSP页面在同一Web服务目录中。。include指令的语法格式如下:<%@includefile=”被插入文件URL”%>注意:使用inlude指令插入含有中文的静态文件时,必须确保JSP文件和被插入文件的编码方式一致,可以采用UTF-8、gbk、gb2312等方式,JSP文件可以采用page指令的pageEncoding属性设置编码方式,html文件在存储的时候要选择其编码方式。DEMOinclude指令8.3.2演示.mp48.3JSP指令8.3.3taglib指令在JSP中taglib指令用来声明此JSP文件使用的自定义标签,同时引用标签库,并指定标签的前缀。语法格式为:<%@tagliburi=”标签库的URI”prefix=”标签前缀”%>taglib指令有两个属性值:
uri:指明标签库文件的存放位置。
prefix:指明该自定义标签使用时的前缀。DEMOtaglib指令8.3.3演示.mp48.4JSP动作
JSP动作标签在JSP页面运行时执行服务器端的任务(例如包含一个文件、页面跳转、传递参数等),不需要我们编写Java代码。而上一节提到的JSP指令标签则在将JSP编译成Servlet时起作用。我们可以形象地将JSP动作标签看成动态的,JSP指令标签看成静态的。
常用的JSP动作标签有:include:包含一个静态的或动态的文件forward:执行页面跳转,将请求的处理转发到下一个页面param:为其他标签提供附加信息,如传递参数plugin:在客户端浏览器中执行一个Applet或JavaBeanusebean、setProperty、getProperty8.4JSP动作8.4.1include动作include动作标签用来在JSP页面中动态包含一个文件。所谓动态即包含页面程序与被包含页面的程序是彼此独立的,互不影响,仅仅在JSP引擎运行包含页面时执行到<jsp:include>标签,JSP引擎会插入被包含页面的body内容。include动作标签的语法格式如下:<jsp:includepage=”{静态URL|<%=表达式%>”flush=”true|false”}/>或者<jsp:includepage=”{静态URL|<%=表达式%>”flush=”true|false”}><jsp:paramname=”参数名”value=”{参数值|<%=表达式%>}”/></jsp:include>8.4JSP动作静态包含和动态包含的区别如下:(1)静态包含是将被包含页面的代码完全导入,两个页面融合成一个整体Servlet,而动态包含则在Servlet中使用include方法来引入被包含页面的内容。(2)静态包含时被包含页面的编译指令会起作用;而动态包含是被包含页面的编译指令则失去作用,只是插入页面的body内容。(3)动态包含还可以向被包含页面传递参数。DEMOinclude动作8.4.1演示.mp48.4JSP动作8.4.2forward动作
forward动作可以把请求转发到同一Web应用中的其他页面,既可以是静态的HTML页面,也可以是JSP页面,或一个Servlet。但用户浏览器中的URL地址不会发生变化,还是转发之前的页面地址。该动作标签的语法格式如下:<jsp:forwardpage=”{静态URL|<%=表达式%>}”/>或者<jsp:forwardpage=”{静态URL|<%=表达式%>}”><jsp:paramname=”参数名”value=”{参数值|<%=表达式%>}”/></jsp:forward>DEMOforward动作8.4.2演示.mp48.4JSP动作8.4.3param动作Param动作标签用于设置参数值,这个标签本身不能单独使用。因为单独的param动作没有实际意义。它一般和下面三个动作标签嵌套使用。
jsp:include、jsp:forward、jsp:plugin当与include动作嵌套使用时,param动作设定的参数值将被传入被包含的页面;当与forward动作嵌套使用时,param动作设定的参数值将传入跳转的页面;当与plugin动作嵌套使用时,参数值则被传入Applet实例或JavaBean实例。param动作的语法格式如下:<jsp:paramname=”paramName”value=”paramValue”/>8.5JavaBean技术JavaBean是一种Java语言写成的可复用组件。它是由一个或多个public方法、属性和事件组成的组件,可以在各种应用程序中使用,以支持应用程序的可复用性。JavaBean可以通过内省机制(Introspection)来访问和操纵其内部属性和方法。8.5JavaBean技术作为一种Java类,必须被定义为public,另外需要遵守一些规范,主要包括:(1)JavaBean类如果有构造函数,则必须是有一个无参数的public构造函数,以便让容器对象在设计时和运行时生成JavaBean实例化对象。(2)JavaBean类可以包含属性,而属性的定义是由getXxx和setXxx函数构成。对于boolean类型的属性,可以用“is”函数来代替get函数。(3)JavaBean类为可串行化(Serializable),使得对象中的属性和状态可以被持久地保存于文件或数据库中。DEMOJavaBean类的定义8.5.1演示.mp48.5JavaBean技术如果要在JSP中使用某个JavaBean对象,可以采用useBean动作标签。useBean的语法格式如下:<jsp:useBeanid=”name”class=”classname”scope=”page|request|session|application”/>其中,id属性用来定义JavaBean的实例名,class属性确定JavaBean的实现类。scope属性用于指定JavaBean实例的作用范围,该范围有4种取值。8.5JavaBean技术采用useBean动作声明的JavaBean实例的有效范围:(1)page:JSP引擎为每个用户分配不同的beans,尽管每个用户的beans功能一样,但是它们占用不同的内存空间。该beans只在当前页面有效,当用户离开该页面时,JSP引擎取消分配给该用户的beans。(2)request:该benas的有效范围是request生命期内。在任何执行相同请求的JSP文件中使用该beans,直到页面执行完毕向客户端发回响应或转到另一个文件为止。8.5JavaBean技术(3)session:该beans的有效范围是会话期间。从创建beans开始,就能在任何使用相同beans的JSP文件中使用该beans注意:在创建beans的JSP文件的page指令中必须指定session为”true”。(4)application:从创建beans开始,就能在任何相同application的JSP文件中使用该beans,它存在于整个application生命周期内,任何共享此application的JSP文件都能使用同一beans。8.5JavaBean技术useBean动作标签的具体执行过程如下:(1)在指定的scope中查找名为name的JavaBean实例。(2)若找到,则创建一个名为name、类型为classname的局部变量,其引用指向该JavaBean;若未找到,则在该scope中创建一个名为name、类型为classname的JavaBean,并创建相应的局部变量指向它。8.5JavaBean技术当在JSP文件中采用useBean动作标签创建一个JavaBean实例后,使用setProperty动作标签设置JavaBean的属性值,具体语法格式如下:<jsp:setPropertyname="beanName"propertyDetails/>其中:(1)name=“beanname”是必选属性。其值为JavaBean的实例名称,即在这之前用jsp:useBean引入的id。8.5JavaBean技术
(2)propertyDetails可以通过四种不同的方法来指定属性的信息。[1]property="*"[2]property="propertyName“[3]property="propertyName"param="parameterName"[4]property="propertyName"value="propertyValue"8.5JavaBean技术当要获取JavaBean的属性值时,可以使用getProperty动作标签,具体语法格式如下:<jsp:getPropertyname="beanName"property="propertyName"/>其中name是必选属性,其值为JavaBean的示例名;property也是一个必选属性,其值为前面name指定的JavaBean的属性名。DEMOJavaBean应用8.5.2演示.mp4课后思考题(1)简述JSP的运行原理,比较JSP和Servlet各自的优缺点。(2)JSP的生命周期包含哪几个阶段?(3)JSP的声明有什么作用?(4)JSP的注释有哪些,有哪些区别?(5)JSP的page指令有什么作用?(6)JSP的指令标签和动作标签的区别是什么?(7)比较include指令和include动作在用法上的区别。(8)什么是JavaBean?JavaBean的编码规则有哪些?(9)在JSP中如何使用JavaBean?为JavaBean设置属性值的方法有哪些?如何获取JavaBean的属性值?JavaWeb网站设计开发温浩宇第9章JSP隐式对象西安电子科技大学内容9.1JSP隐式对象概述9.2JSP对象的作用域9.3out对象9.4request对象9.5response对象9.6session对象9.7application对象9.8page对象9.9pageContext对象9.10config对象9.11exception对象9.1JSP隐式对象概述JSP隐式对象(ImplicitObjects)是Servlet容器为每个页面提供的一组Java对象,它们是在JSP页面执行过程中自动实例化并提供给JSP页面使用的。JSP隐式对象也被称为隐藏对象、隐含对象、内置对象或内建对象等。对象名称功能描述对象类型作用域out输出对象,用于发送信息给客户端,如HTML页面、XML文档等。jakarta.Servlet.jsp.JspWriterpagerequest封装客户端的请求信息,用于接收客户端传递过来的所有参数。jakarta.Servlet.ServletRequestrequestresponse表示服务器对客户端的响应,用于向客户端发送HTTP响应。jakarta.Servlet.ServletResponsepagesession表示客户和服务器之间的一次会话,用于保存用户的会话信息。jakarta.Servlet.http.HttpSessionsessionapplication表示服务器Web应用本身,用于访问Web应用的一些属性信息。jakarta.Servlet.ServletContextapplicationexception用于处理JSP页面的异常信息。java.lang.Throwablepageconfig用于访问当前JSP所在的Web应用的配置。jakarta.Servlet.ServletConfigpagepage代表JSP页面本身,本质上就是当前Servlet实例的this。jakarta.servlet.http.HttpServletpagepageContext表示JSP页面的上下文,用于管理网页的属性。jakarta.Servlet.jsp.PageContextpageJSP提供了四种不同时长的作用域:page、request、session、application,下面分别对其具体有效期进行说明:page:只在当前页面有效。request:在一次请求范围内有效。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。session:指客户浏览器与服务器一次会话范围内,如果与服务器连接断开,那么session就结束了。application:有效范围是整个应用,从应用启动,到应用结束。9.2JSP对象的作用域application(范围最大)sessionrequestpage(范围最小)9.3out对象out对象表示一个页面输出流。开发者通常使用out.print()和out.println()这两个方法把结果输出到网页上。out对象的用法代码如下:…<title>out对象示例</title>…<h3>out对象常用方法示例</h3>…9.3out对象…<%for(inti=0;i<10;i++)out.println(i+"{剩余"+out.getRemaining()+"字节}<br>");%>缓存大小:<%=out.getBufferSize()+"字节<br>"%>剩余缓存大小:<%=out.getRemaining()
+"字节<br>"%>自动刷新:<%=out.isAutoFlush()%>…DEMO隐式对象out9.3演示.mp49.4request对象request对象是JSP中最常用的对象之一。它封装了由客户端生成的HTTP请求的所有内容,包括请求参数、属性、请求头信息、cookies及数据。通过调用request对象的相应方法可以获取具体的参数值。另外,还可以在request的生命周期内设置额外的属性。9.4request对象在request对象的方法中,使用频率最高的是getParameter(Stringstr1)方法,用来获取用户通过表单提交到服务器的参数值。下面的例子(request_param.jsp)获取用户通过user_info.html提交的参数值,并显示在客户端的浏览器上。DEMO隐式对象request9.4演示.mp49.5response对象response对象是服务器对客户端请求的响应,但在JSP中很少直接用它来响应客户端的请求。一般用out对象直接输出对客户的响应信息。由于out对象只能输出字符内容,当需要输出非字符内容(例如:动态生成图片,PDF文档)时,则必须使用response作为响应输出。此外,response对象还可以重定向请求,以及向客户端增加Cookie。9.5response对象下面是一个txt文档,可以采用excel打开该文档。test.txt文档内容如下:英语数学语文物理<BR>34795199<BR>40899299<BR>64993099<BR>…注意:在该输入该txt的过程中,为了能在execl中显示该文本,要把输入法切换到全角。9.5response对象当要向客户端输出非字符响应时,可以采用response对象,并设置contentType的MIME类型。常用的MIME类型如下:text/html:HTML超文本文件,后缀为”.html”text/plain:plain文本文件,后缀为”.txt”application/msword:word文档文件,后缀为”.doc”application/x-msexcel:excel表格文件,后缀为”.xls”image/jpeg:jpeg图像,后缀为”.jpeg”image/gif:gif图像,后缀为”.gif”9.5response对象response_content.jsp的代码如下:…
<%response.setContentType("application/x-msexcel;charset=gb2312");%><jsp:includepage="test.txt"></jsp:include>…9.5response对象response对象另外一个重要功能是页面重定向,sendRedirect方法用于实现该功能。在下面的例子中,登录页面login.jsp要求用户输入用户名和密码,如果用户名和密码分别是admin和123,就重定向到welcome.jsp页面,否则重定向到登录页面。DEMO隐式对象response9.5演示-1.mp49.5response对象Cookie通常用于网站记录客户的某些信息,比如客户的用户名及客户的喜好等。一旦用户下次登录,网站可以获取到客户的相关信息,根据这些客户信息,网站可以对客户提供更友好的服务。Session在关闭浏览器后就失效,但cookie会一直存放在客户端浏览器上,除非超出Cookie的生命期限。使用response对象的addCookie方法可以向客户端增加Cookie,但客户端浏览器必须支持Cookie。在增加Cookie之前,必须先创建Cookie对象,具体步骤如下:(1)创建Cookie实例(2)设置Cookie的有效期,单位为秒(3)向客户端写CookieDEMOJSPCookie9.5演示-2.mp49.6session对象session对象是一个常用的JSP隐式对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。为了对不同的客户加以区分,采用ID号对不同客户的session加以标识。9.6session对象session对象存在一定时间过期问题,所以存储在session中的属性名值对会在一定时间后失去,可以通过更改session有效时间来避免这种情况。同时编程时尽量避免将大量有效信息存储在session中,request是一个不错的替代对象。DEMOsession对象9.6演示.mp49.7application对象服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个app
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论