




已阅读5页,还剩82页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章JSP语法进阶,4.1【案例7】文件包含,4.1.1JSP指令元素指令元素作用于JSP引擎所生成的Servlet结构,提供网页的全局信息。例如,可以通过指令元素设置JSP文件和最终输出的客户端文件字符集的类型、表明想要引入的包和类、错误处理、是否是session的一部分等。指令元素的一般形式如下:,其中,directive是指令名称,attr是指令的属性,属性可以有多个,value是属性的取值。指令元素可以不带属性,或只带部分属性,所以方括号中的属性部分是可选的。,JSP中的指令有page、include和taglib,其中page指令描述与页面相关的指示信息,include指令用于包含文件,taglib指令用于指示JSP页面所使用的标记库。标记库的具体用法属于JSP比较复杂的内容,本书中就不讨论了。,1page指令,page指令定义JSP文件中的全局属性,描述与页面相关的指示信息。在一个JSP页面中,page指令可以出现多次,但是除import外,每一种属性却只能出现一次,后面重复出现的属性设置将覆盖掉先前的设置。几乎在所有JSP页面顶部都会看到page指令,虽然这不是必须的。,page指令可以指定到何处去查找起支持作用的Java类或包。例如:page指令也可以在出现Java运行错误时,指示将用户导向何处。例如:,page指令的一般语法格式如下:,下面对page指令中可能包含的各个属性进行详细说明。(1)languagelanguage属性告诉服务器在文件中将采用哪种语言作为脚本语言,默认为Java。,(2)extendsextends属性定义了由JSP页面产生的servlet的父类。一般来说,这个属性不会用到,只有需要实现一些特殊功能时,使用它会比较方便。建议初学者先不去使用它。,(3)importimport属性的值是一系列用逗号分开的列表,指明想要引入的包和类。例如:可以在程序中引入多个需要的包和类,包和类之间用逗号分隔。例如:,也可以将需要引入的多个包和类写在多个page指令中。例如:这两行语句与上面的一行语句等价。当使用import引入了包和类后,就可以使用与这些包和类相关的方法和对象了。,注意java.lang.*、javax.servlet.*、javax.servlet.jsp.*和javax.servlet.http.*包已经作为缺省值被JSP引入,所以不需要在网页中再次引入。,(4)sessionsession属性表示当前页面是否加入会话期间的管理,其缺省值为true,表明内建对象session存在(如果没有session对象,则会新建一个),由session来管理会话。如果设session属性值为false,则内建对象session不存在,这样页面中任何使用到session的语句都会产生编译错误。,(5)bufferbuffer决定输出流(out对象)是否需要缓冲区,缺省值是8KB,也可以设置为none(没有缓冲区)或所指定大小的缓冲区,例如:上面的语句指定输出流缓冲区为12KB。buffer属性通常与autoFlush属性一起使用。,(6)autoFlushautoFlash属性用于指定是否自动刷新输出缓冲,如果设成true,则当输出缓冲区满的时候,自动刷新缓冲区而不是抛出一个异常,缺省值为true。注意同时设置autoFlush为false和buffer为none是不合法的,编译时将会出错。,(7)isThreadSafeisThreadSafe属性指示JSP引擎,网页在处理对象存取时是否要引入ThreadSafe(线程保护)机制,缺省值为true,此时,如果多个客户向JSP引擎发送请求,就可以同时被处理。这时JSP程序员要处理同步时的共享状态,以保证同步确实是安全的。如果isThreadSafe被设成false,则采用单线程模式控制客户端访问该页面。,(8)infoinfo属性用于设置页面的说明信息文字,可以通过页面的Servlet.getServletInfo()方法访问该信息。例如:,(9)ErrorPageErrorPage属性用于指示一个JSP文件的相对路径,以便在页面出错时,转到这个JSP文件来进行处理。与此相适应,需要将这个JSP文件的isErrorPage属性设为true。当ErrorPage属性被设置后,JSP网页中的异常仍然会产生,只不过此时捕捉到的异常将不由当前网页进行处理,而是由ErrorPage属性所指定的网页去进行处理。,(10)isErrorPageisErrorPage属性指示一个页面是否为错误处理页面。设置为true时,在这个JSP页面中的内建对象exception将被定义,其值将被设定为呼叫此页面的JSP页面的错误对象,以处理该页面所产生的错误。isErrorPage属性缺省值为false,此时将不能使用内建对象exception来处理异常,否则将产生编译错误。,(11)ContentTypeContentType属性用于设置JSP文件和最终文件的MIME类型和字符集的类型。这一项必须在文件的顶部、任何一个其他字符在文件中出现之前。可用的MIME类型有text/plain、text/html、text/html和image/gif、image/jpeg等。ContentType属性缺省值为“text/html;charset=ISO8859_1”。,例如:上面语句设置MIME类型为text/html,网页所用字符集为简体中文(国标码gb2312)。在JSP中,客户端和服务器端的中文显示需要使用字符集gb2312,而HTTP传输编码用ISO8859_1字符集。,最后需要指出的是,page指令作用于整个JSP页面,包括静态的包含文件在内。但page指令不能作用于动态的包含文件,比如所包含的文件。无论把page指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及养成好的编程习惯,最好还是把它放在JSP文件的顶部。,2include指令,include指令的作用是包含另一个文件,其语法相当简单,使用格式如下:在这个指令中应该使用JSP的相对路径。被include指令所包含的文件必须符合JSP语法,可以是静态的HTML文件、脚本元素、指令元素和动作元素。在将网页编译为Servlet时,JSP引擎将对所包含的文件进行语法分析。,如果包含的是JSP文件,那么就会执行这个被包含的JSP文件中的代码。如果只是用include指令来包含一个静态文件,那么这个包含的文件所执行的结果将会插入到JSP文件中include指令所在的位置。一旦执行完了包含文件,那么主JSP文件的过程将会恢复,继续执行下一行。,被包含的文件可以是HTML文件、JSP文件、文本文件,或者只是一段Java代码,但是需要注意在这个包含文件中不能使用、或标记,因为这将会影响在原JSP文件中同样的标记,有时会导致错误。,include指令包含的文件的路径名一般来说是指相对路径,不需要什么端口、协议和域名。如果这个路径以“/”开头,那么这个路径主要是参照相对于包含这个JSP文件的Web应用程序的根目录,如果路径是以文件名或目录名开头,那么这个路径就是正在使用的JSP文件的当前路径。,4.2【案例8】个人信息调查表,4.2.1JSP的内置对象简介JSP有九种内置对象:request、response、out、pageContext、session、application、config、page和exception。下面对它们进行简单介绍。,(1)requestrequest包含了来自浏览器请求的相关信息,并且提供了获取Cookie、header和请求相关的参数值等数据的有效方法。request对象封装了用户提交的信息,通过调用该对象相应的方法可以获取用户提交的信息。,(2)responseresponse主要将JSP处理后的结果传回到客户端(如Cookie、header信息等),它提供了将数据送回浏览器的方法。(3)outout对象用于向浏览器回送输出结果。,(4)pageContextpageContext对象存储当前JSP页面相关信息,如属性、内建对象等。(5)sessionsession对象用于存储每一个用户的状态信息,以便跟踪用户的会话状态,直到客户端与服务器断开连接为止,可用来识别每个用户。,(6)applicationapplicaton负责提供应用程序在服务器中运行的全局信息,当应用程序在服务器中启动时该对象就一直存在,直到服务器关闭为止,所有客户共享这个内置的application对象。applicaton可用来在所有用户间共享信息,并可以在Web应用程序运行期间持久地保持数据。,(7)configconfig对象用于配置处理JSP程序的Servlet实例的初始化参数,它只有在JSP页面范围内是合法的。,(8)pagepage表示从JSP页面产生的一个Servlet实例,实质上page对象代表JSP对象本身,或者说代表编译后的Servlet对象。,(9)exceptionexception是存储异常的对象,只有在JSP页面的page指令中指定isErrorPage属性为true后,才可以在页面中使用exception对象。初步了解了JSP内置对象的用途后,下面将对常用的内置对象进行详细学习。,4.2.2request对象与信息的传递,1理解用户请求信息2获取路径和协议信息(1)StringgetProtocol()(2)StringgetScheme()(3)StringgetPathInfo(),(4)StringgetContextPath()(5)StringgetRequestURI()(6)StringgetServletPath()(7)StringgetRealPath(Stringpath),3获取主机和端口信息,(1)StringgetServerName()(2)intgetServerPort()(3)StringgetLocalName()(4)StringgetLocalAddr(),(5)intgetLocalPort()(6)StringgetRemoteAddr()(7)StringgetRemoteHost()(8)intgetRemotePort(),4获取查询字符串信息,(1)获取查询字符串(2)获取查询字符串中的变量值getParameter()getParameterValues()getParameterNames(),5其他常用方法,(1)StringgetCharacterEncoding()(2)voidsetCharacterEncoding(Stringname)(3)CookiegetCookies()(4)StringgetRequestedSessionId(),(5)HttpSessiongetSession()(6)booleanisRequestedSessionIdFromCookie()(7)booleanisRequestedSessionIdFromURL()(8)booleanisRequestedSessionIdValid(),4.2.3表单及其在信息传递中的应用,1input标记标记是最常用的表单标记,常用来输入信息或提交信息。input标记的通用语法格式如下:,其中,type属性允许指定输入类型,可以是所列几种输入类型中的一种:text(文本框)、password(密码框)、checkbox(复选框)、radio(单选按钮)、image(图像域)、reset(重置按钮)和submit(提交按钮),name属性为表单元素的名称,value属性为表单元素的初始值。,对标记的各种输入类型进行举例说明。(1)文本框(2)密码框(3)提交按钮与重置按钮(4)单选按钮与复选框,2textarea标记,标记声明一个用户可以输入多行文本的区域,它的值(value)就是用户的输入。标记的语法如下:text其中,cols为文本域宽度(字符数),rows为文本域的高度(行数),和之间的是文本域的内容。,3select标记,标记声明一个可选项的列表,用户可以选择一个或者多个选项,标记的值(value)就是所选择的选项,下面是select标记的语法:option.option,其中,标记表示选项列表,name属性是名称,size属性是列表区域高度(即可显示的选项数),multiple是可选属性,如果有该属性则表示可选择多项。,4.3【案例9】网页的重定向,4.3.1response对象1response对象的常用方法(1)voidsendRedirect(Stringlocationg)(2)voidsetBufferSize(intsize)(3)voidsetCharacterEncoding(Stringcharset),(4)voidsetContentType(Stringtype)(5)voidsetDateHeader(Stringname,longvalue)(6)voidsetHeader(Stringname,Stringvalue)(7)voidsetIntHeader(Stringname,intvalue),(8)voidaddCookie(CookieCookie)(9)StringencodeRedirectURL(Stringurl)(10)StringencodeURL(Stringurl)(11)voidsendError(intxc,Stringmsg),(12)StringgetCharacterEncoding()(13)voidreset()(14)StringgetContentType()(15)voidsetContentLength(intlength)(16)booleanisCommitted(),2response对象的应用,(1)网页的存储(2)页面定时刷新,4.3.2out对象,out对象源于javax.servlet.jsp.jspWriter,它表示一个输出流,可用来向客户端输出数据。out对象的方法主要是控制缓冲区数据输出的操作,如前面多次使用过的out.print()和out.println()。out对象的常用方法如下。,(1)voidclear()清除输出缓冲区的内容,但是不输出到客户端。(2)voidclearBuffer()清除输出缓冲区的内容,并输出到客户端。,(3)voidclose()关闭输出流,清除所有内容。在调用close()方法后,out对象输出的流就不会发送到客户端。,(4)voidflush()输出缓冲区里面的数据,然后清空缓冲区。与clearBuffer()不同的是,flush()方法将在屏幕上输出数据后再清空缓冲区。,(5)intgetBufferSize()获取以KB为单位的目前缓冲区的大小。(6)intgetRemaining()获取以KB为单位的缓冲区中空闲空间的大小。,(7)voidnewLine()输出一个换行符。(8)voidprint(data)将指定类型的数据输出到HTTP流中,不换行。print方法可用于多种类型的数据,包括:boolean、char、char、double、float、int、long、Object、String等。,(9)voidprintln(data)与print相似,println也用于将指定类型的数据输出到HTTP流中,与print不同的是它将在结尾多输出一个换行符。(10)booleanisAutoFlush()确定是否自动刷新缓冲区,结果取决于page指令的AutoFlush属性。下面是有关out对象的一个简单示例。,4.4【案例10】简单访问计数器,4.4.1session对象1session对象的基本概念HTTP协议是无状态的,即信息无法通过HTTP协议本身进行传递。为了跟踪用户的操作状态,JSP使用session对象来实现这一功能。,用户登陆网站时,系统将为其生成一个独一无二的session对象,用以记录该用户的个人信息,一旦用户退出网站,那么所对应的session对象将被注销。session对象可以绑定若干个用户信息或者JSP对象,不同session对象的同名变量是不会相互干扰的。,session对象在服务器上设置了一个30分钟的过期时间,当客户停止活动后自动失效。session中保存和检索的信息不能是基本数据类型如int,double等,必须是java相应的对象,如Integer,Double等。,session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,用以进行会话期的管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,称为一个“会话”。,当客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,因此服务器应当通过某种办法知道这是同一个客户,这就需要session对象。,当客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的id号,JSP引擎将这个id号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。,当客户再访问连接该服务器的其他页面时,不会再分配给客户新的session对象。客户关闭浏览器后,服务器端该客户的session对象被取消,和客户的会话对应关系消失。客户重新打开浏览器再次连接到该服务器时,服务器就会为该客户重新创建一个新的session对象。,session对象源于javax.servlet.http.HttpSession,它是一个建立在Cookie机制上的友好的界面,session的信息保存在服务器端,session的id保存在客户机的Cookie中。事实上,在许多服务器上,如果浏览器支持的话它们就使用Cookie,session自动为每个流程提供方便的存储信息的方法。,2session对象的常用方法,session对象表示目前用户的会话状态,用来识别每个用户,与之相关的常用方法如下。(1)ObjectgetAttribute(Stringname)获取与指定名字相关联的session属性值。,(2)EnumerationgetAttributeNames()取得session内所有属性的集合。(3)longgetCreationTime()获取session的创建时间,最小单位为千分之一秒。,(4)StringgetId()获取session标识。此方法返回惟一的标识,这些标识为每个session而产生。当只有一个单一的值与一个session联合时,或当日志信息与先前的sessions有关时,它被当做键名用。,(5)longgetLastAccessedTime()获取与当前session相关的客户端最后一次访问的时间,由1970-01-01算起,单位为毫秒。(6)intgetMaxInactiveInterval(intinterval)获取总时间,以秒为单位,表示session的有效时间。1为永不过期。,(7)ServletContextgetServletContext()获取一个该JSP页面对应的ServletContext对象实例。(8)voidinvalidate()销毁session对象。,(9)booleanisNew()判断一个session是否由服务器产生,但是客户端并没有使用。(10)voidsetAttribute(Stringname,Stringvalue)设置指定名称的session属性值,会替换掉任何以前同一用户的同名值。,(11)voidsetMaxInactiveInterval(intinterval)设置session的有效期。(12)voidremoveAttribute(Stringname)移除指定名称的session属性。,4.4.2application对象,1application对象及其方法下面列出了application对象常用的方法。(1)ObjectgetAttribute(Stringname)获取由name指定的application属性。,(2)EnumerationgetAttributes()获取所有的application属性。(3)voidremoveAttribute(Stringname)移除指定名称的application属性。,(4)voidsetAttribute(Stringname,Objectvalue)设置指定的application属性的值,属性值必须是对象而不能是简单数据类型(如int)。(5)ServletContextgetContext(Stringuripath)获取当前应用的Ser
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年社会工作者《社会工作法规与政策(中级)》题库(附答案)
- 2025年大学工会学专业题库- 工会组织在企业发展战略中的参与
- 2025年小学英语毕业考试模拟卷:英语跨文化交际跨文化适应能力测试题
- 2025年大学工会学专业题库-工会组织与劳工权益保护
- 2025年电力安全常识试题及答案
- 2025年大学科学教育专业题库- 科学素质教育对学生发展的影响
- 2025年大学科学教育专业题库- 科学教育的创新思维力培养
- 2025年大学警卫学专业题库-校园安全危机处置紧急演练
- 2025年大学劳动教育专业题库- 劳动教育专业与劳动法规政策的研究
- 2025年大学国内安全保卫专业题库- 安全保卫专业实践技能培养项目策划
- 灭火器维修与报废规程
- 脑干神经解剖定位
- 土木工程生产实习日记50篇
- GB/T 5993-2003电子设备用固定电容器第4部分:分规范固体和非固体电解质铝电容器
- FZ/T 52059-2021抗菌粘胶短纤维
- 医学课件-护理评估课件
- 幼儿园大班安全教育:《暴力玩具不能玩》 课件
- 26个英文字母大小写描红
- 养老院预算及成本管理制度
- 研学旅行基地评估认定评分表
- DL∕T 1867-2018 电力需求响应信息交换规范
评论
0/150
提交评论