教学材料《JSP设计与开发》-第4章 JSP内置对象_第1页
教学材料《JSP设计与开发》-第4章 JSP内置对象_第2页
教学材料《JSP设计与开发》-第4章 JSP内置对象_第3页
教学材料《JSP设计与开发》-第4章 JSP内置对象_第4页
教学材料《JSP设计与开发》-第4章 JSP内置对象_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第4章JSP内置对象学习要点内置对象概述out对象request对象response对象)session对象application对象cookie对象其他内置对象2

4.1内置对象概述

JSP根据ServletAPI而提供了某些隐含对象。可以使用标准的变量来访问这些对象,并且不用编写任何额外的代码,就可以在JSP中自动使用到它。在JSP页面中可以获得的主要的7个隐含对象变量为:out对象:功能是把信息回送到客户端的浏览器中。response对象:功能是处理服务器端对客户端的一些响应。request对象:功能是用来得到客户端的信息。application对象:用来保存网站的一些全局变量。session对象:用来保存单个用户访问时的一些信息。cookie对象:将服务器端的一些信息写到客户端的浏览器中。pageContext对象:提供了访问和放置页面中共享数据的方式。34.2out对象

——4.2.1out对象概述out对象是javax.servlet.jsp.JspWriter类的一个子类的对象,它的作用是把信息回送到客户端的浏览器中。在out对象中,最常用的方法就是print()和println()。在使用print()或println()方法时,由于客户端是浏览器,因此向客户端输出时,可以使用HTML中的一些标记,例如:“out.println(”<h1>Hello,JSP</h1>“);”。其他一些常用的方法是:out.write功能和out.print相同,newLine()的功能是输出一个换行符,out.flush()的功能是输出缓冲的内容。out.close()的功能是关闭输出流(out常用的方法详见表4-1)。out对象的生命周期是当前页面。因此对于每一个JSP页面,都有一个out对象。4方法说明Print(输出对象)显示Println(输出对象)显示并换行Newline()输出换行符Flush()输出缓冲区的内容Close()关闭流Clear()清除缓冲区isAutoFlush()返回缓冲区是否自动清除isBuffersize()返回缓冲区大小getRemaining()返回缓冲区未使用区域大小

表4-1JspWriter常用的方法54.2.2案例一:out对象应用示例

【案例功能】向客户端输出“Hello”【案例目标】掌握out对象的基本功能【案例要点】out对象几种输出方法比较【案例步骤】(1)编写out.jsp源代码文件。(2)启动Tomcat服务器后,运行结果如图4-1所示。64.3request对象

——4.3.1request对象概述request对象是javax.servlet.HttpServletRequest子类的对象,当客户端请求一个JSP页面时,JSP容器会将客户端的请求信息包装在这个request对象中。请求信息的内容包括请求的头信息(Header)、系统信息(比如:编码方式)、请求的方式(比如:GET或POST)、请求的参数名称和参数值等信息。通常我们用得最多的就是客户端请求的参数名称和参数值信息。得到某参数值的语法为:“request.getParameter(”param1“);也可以通过request对象的getParameterNames()方法得到客户端传递过来的所有参数名字,如:Enumerationparams=request.getParameterNames()。74.3.2案例二:request对象取表单数据(一)【案例功能】向客户端输出从表单中取出的数据【案例目标】掌握request对象取表单数据【案例要点】表单中数据的提交和JSP程序中的提取【案例步骤】(1)编写tijiao.html源代码文件。

(2)编写tijiao.jsp源代码文件。(3)启动Tomcat服务器后,运行结果如图4-2和4-3所示。8【案例功能】向客户端输出从表单中取出的数据【案例目标】掌握request对象取表单数据【案例要点】表单中控件类型的多样性【案例步骤】(1)编写input.htm源代码文件。(2)编写handle.jsp源代码文件。(3)启动Tomcat服务器后,运行结果如图4-4和4-5所示。4.3.3案例三:request对象取表单数据(二)9一个HTTP请求中包含一个请求行、主机头和上载信息,上载表单中的信息是用getParameter方法来获取的,此外,request还提供了很多方法获取由HTTP请求传送来的客户端信息。常用的方法见表4-2。(详见教材)4.3.4request对象的常用方法104.3.5案例四:request对象的常用方法【案例功能】用request对象得到客户的信息【案例目标】掌握request对象的常用方法【案例要点】多种方法之间的区别和各自的应用【案例步骤】(1)编写method.jsp源代码文件(2)启动Tomcat服务器后,运行结果如图4-6所示。114.3.6汉字编码

当利用request.getParameter得到Form中元素的时候,默认的情况字符编码为ISO-8859-1,这种编码不能正确的显示汉字。目前有两种解决方法,一种是在执行操作之前,设置request的编码格式,语法是:“request.setCharacterEncoding("GBK")”;另一种方法是转换字符编码:<%Stringstr=request.getParameter("boy");byteb[]=str.getBytes("ISO-8859-1");str=newString(b);%>其中b是我们用到的一个中间数组,我们表单中元素名为boy,取得的字符串存放在str中,str能正确的显示汉字。124.4response对象

——4.4.1response对象概述response对象是一个javax.servlet.http.HttpServletResponse类的子类的对象,它的作用与request对象正好相反,它封装执行JSP程序产生的响应,并被发送到客户端,response对象可以使用由其父类ServletResponse所提供的方法,常用的方法见表4-3。(详见教材)134.4.2网页重定向sendRedirect方法可以将客户端浏览器重定向到新的Web页面,使用sendRedirect方法可以根据用户的不同情况而定位到不同的页面上去,重定向语句之后的代码将不再执行,例如,下面语句就是停止当前网页执行,转向执行程序文件example.jsp:response.sendRedirect(“example.jsp”);在前面介绍过<jsp:forword>也可以重定向到另一个页面,但两种操作有如下区别:14(1)当使用<jsp:forword>操作重定向到另一个页面,可以通过<jsp:param>传递参数到新的网页,新的网页使用request对象的getParameter()方法可以读取参数的值,而使用response的sendRedirect()方法不需要直接编码URL,就可以实现传递参数。例如下面语句在重定向时传递了一个名为p值为234的参数,同样使用request对象访问参数p。

Response.sendRedirect(“example.jsp?p=234”);(2)当使用<jsp:forword>操作,两个页面之间可以通过request对象分享数据,而response对象的sendRedirect()方法不支持这种数据共享。154.4.3案例五:网页重定向【案例功能】重定向操作,传递参数并输出相应的结果【案例目标】掌握response对象的sendRedirect()方法【案例要点】response的sendRedirect()方法和<jsp:forword>操作的区别【案例步骤】(1)编写sendRedirectFrom.jsp源代码文件。(2)编写sendRedirectTo.jsp源代码文件。(3)启动Tomcat服务器后,运行sendRedirectFrom.jsp结果如图4-7所示。16(4)选择默认选项,提交后运行结果如图4-8所示。(5)改变单选按钮选项,如图4-9所示(6)提交后运行结果如图4-10所示。174.4.4设置ContentType属性page指令只能静态地设置ContentType属性,用来决定相应的MIME值,使用response对象可以在程序中根据不同的需要动态地设置ContentType属性。客户端浏览器所支持的MIME类型可以在文件夹的文件类型中找到,常见的几种MIME类型如表4-4所示。(详见教材)184.4.5案例六:动态设置ContentType属性【案例功能】动态设置页面的显示形式【案例目标】掌握response对象的setContentType方法【案例要点】页面的各种ContentType属性【案例步骤】(1)编写setContentType.jsp源代码文件。(2)跟程序文件同一目录下,定义data.txt的内容如下:

54566735 67901233 54937823 8737614819(3)启动Tomcat服务器后,运行setContentType.jsp结果如图4-11所示。204.5session对象很多商务网站必须能够在用户访问的过程中记住用户,为用户提供个性化服务,例如在商城购物,站点必须允许顾客同时购买多个商品,反复在不同的位置挑选后,再一次性付款,在顾客购物的过程中,网站需要记录顾客的个人信息和已选购的商品。这就需要会话级变量,记录用户在一段时间内的逻辑上相关联的不同请求。214.5.1会话和会话idHTTP协议是一个无状态协议,一个请求完成后,客户端与服务器端的连接是关闭的,所以一个请求与另一个请求之间是没有关联的。一个客户在访问一个服务器时,可能会在同一个应用程序的多个页面之间反复连接,或刷新同一个页面,服务器端不能自动判断这一个请求和另一个请求是不是属于同一个客户,所以在应用程序中需要创建会话(session)记录,记录一个客户的有关连接信息。从一个客户打开浏览器并连接到服务器开始,一直到这个客户关闭浏览器视为一个会话。JSP提供了内置对象session帮助服务器识别一个客户的连接。当一个客户通过浏览器与服务器建立连接发出第一次请求时,服务器会为这个客户分配一个session对象,并为这个session对象分配了一个String类型的id号,JSP引擎在响应客户请示的同时将这个id号发往客户端,并写入客户端的cookie中,这样服务器就可以通过不同的会话id识别一个客户,通过session对象创建会话级变量,就可以跨网页分享数据的目的。服务器为每一个客户线程分配不同的session对象,也就是说每一个客户拥有自己独立的session对象,当客户在一个服务器中的不同JSP页面之间反复连接,或者连接到其他服务器后,再返回到该服务器,这个服务器都不会重新分配session对象,直到一次会话结束,服务器分配给客户的session对象才会被注销,当然不同服务器分配的session对象是不同的。22【案例功能】显示客户端访问服务器时所拥有的会话id【案例目标】理解什么是一次会话【案例要点】掌握会话的含义【案例步骤】(1)编写sessionId.jsp源代码文件。(2)编写sessionId_1.jsp源代码文件。(3)编写sessionId_2.jsp源代码文件。4.5.2案例七:会话id23(4)启动Tomcat服务器后,运行结果如图4-12所示。244.5.3session对象的常用方法session对象是javax.servlet.http.HttpSession类的一个实例,HttpSession类中常用方法如表4-5所示。(详见教材)254.5.4会话的结束由于WWW联机的特性,所以很难确定使用者何时完成JSP的执行,且不再联机,如果不定时地清除旧会话,服务器的存储空间将被耗尽。一般在服务器默认设置了一个30分钟的会话超期时间,让客户停止活动后session对象自动失效。设置会话超时周期可以在程序中使用session对象的setMaxInactiveInterval()方法,也可以使用web.xml文件在tomcat上部署,可以在默认的web.xml文件中找到session的设置如下,使用<session-timeout>标签设置了30分钟的会话的超时周期。26<!--====================DefaultSessionConfiguration=================--><!--Youcansetthedefaultsessiontimeout(inminutes)forallnewly--><!--createdsessionsbymodifyingthevaluebelow.--><session-config><session-timeout>30</session-timeout></session-config>当然当会话不需要时,还可以使用session对象的invalidate()方法直接关闭一个会话。274.6application对象网络程序是个分布式程序,很多用户在不同的地方执行并操作同一个程序,这时程序要能够实时地反映各种改变。例如,在一个聊天室程序中,一个聊天室的在线用户名单、用户在聊天室的发言对于每一个用户都是相同的,而且能够实时更新,这些信息为所有网络用户所共享。又例如,在一些网站的首页都有一个计数器,记录访问过网站的人数,这个计数变量同样是为所有用户所共享的。284.6.1application对象简介不同于session对象,application对象是以服务器为主角,服务器的启动和关闭决定了application的生命周期。服务器启动一个服务,然后创建此服务下的Web应用程序,同时为此Web应用程序新建application对象,它将一直存在,直到服务器关闭,所以application对象开始于任一个JSP网页被开始执行时,终止于服务器的关闭。当一个用户在客户端访问JSP页面时,JSP引擎会为该用户启动一个线程,分配这个application对象,每一个应用程序的所有线程将共享这个application对象,也就是说,所有的用户将共享这个application对象。294.6.2application对象的常用方法application是javax.servlet.ServletContext类的一个实例,它可以使用类ServletContext中的方法,常用方法如表4-6所示(详见教材)setAttribute方法该方法是为应用程序级变量赋值,若在application对象中还不存在这个变量,会添加这个变量。例如为应用程序级变量maxnum赋值为25。application.setAttribute(“maxnum”,25);getAttribute方法该方法是获取application对象中某个应用程序级变量的值。该方法返回一个Object类型的数据,使用时要根据应用程序级变量的数据类型进行转换。例如,读取maxnum值的语句为:

Integernum=(Integer)application.getAttribute(“maxnum”);30应用程序级变量只能是一个对象,而不能是基本数据类型变量如int、double。基本数据类型的变量要首先转换成对应的类,如int转换成Integer。如果对Java不熟悉,也可以先将数字转换成字符串,再保存到application对象,当从application对象中取得数据时,再转换成数值。下面的语句中,第一句表示将把num变量(类型为整型)转换为字符串,再保存进application对象;第二句表示把从application对象中取得数据再转换成整数。例如:

application.setAttribute(“num”,String.valueOf(num1));intnum2=Integer.parseInt(application.getAttribute(“num”.toString()));由于application对象是为所有用户所共享的,所以操作应用程序级变量时,要考虑同步处理。314.6.3案例八:网站计数器【案例功能】显示访问网站的人数【案例目标】如何制作网站计数器【案例要点】防止刷新的网站计数器【案例步骤】(1)编写CountV1.jsp源代码文件。(2)编写CountV2.jsp源代码文件。32(3)启动Tomcat服务器后,运行结果如图4-13所示。图4-13(a)同一用户刷新网页运行的情况,刷新8次,将会显示8个客户访问图4-13(b)同一用户刷新网页运行的情况,刷新多少次均显示1个客户访问334.7cookie对象

——4.7.1Cookie概述

Cookie是服务器发送给浏览器的体积很小的纯文本信息,用户以后访问同一个Web服务器时浏览器会把它们原样发送给服务器。通过让服务器读取它原先保存到客户端的信息,网站能够为浏览者提供一系列的方便,例如在线交易过程中标识用户身份、安全要求不高的场合避免用户重复输入名字和密码、门户网站的主页定制、有针对性地投放广告,等等。

Cookie的目的就是为用户带来方便,为网站带来增值。虽然有着许多误传,事实上Cookie并不会造成严重的安全威胁。Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统。另外,由于浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB,因此Cookie不会塞满你的硬盘,更不会被用作“拒绝服务”攻击手段。

344.7.2操作Cookie(1)创建Cookie调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。名字和值都不能包含空白字符以及下列字符:

[]()=,"/?@:;Cookiecookie=newCookie(CookieName,”Test_Content”);建立了一个Cookie对象,初始化有两个参数,第一个参数CookieName定义了Cookie的名字,后一个参数也是一个字符串,定义了Cookie的内容,也就是我们希望网页在用户的机器上标识的文件内容。例子如下:

<html><body><%StringCookieName=”Sender”;//声明一个变量Cookiecookie=newCookie(CookieName,“Test_Content”);//为这个变量创建一个Cookie对象Cookie.setMaxAge(10);//设置Cookie变量的有效时间Response.addCookie(cookie);//将Cookie变量加入到Cookie中%></body></html>35(2)读取Cookie值使用getCookies()方法在程序中读取Cookie值。该方法返回的是包括所有Cookie值的数组,因此还要通过循环语句取出每个Cookie的值。从Cookie中取得数据的步骤如下:①调用request对象的getCookies方法,取得保存在Cookie中的数据,返回值为一个Cookie变量的数组,语法如下:Cookie[]数组名=requ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论