第8讲JSP内置对象.ppt

上传人:本田雅阁 文档编号:2258057 上传时间:2019-03-12 格式:PPT 页数:56 大小:228.51KB
返回 下载 相关 举报
第8讲JSP内置对象.ppt_第1页
第1页 / 共56页
第8讲JSP内置对象.ppt_第2页
第2页 / 共56页
第8讲JSP内置对象.ppt_第3页
第3页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第8讲JSP内置对象.ppt》由会员分享,可在线阅读,更多相关《第8讲JSP内置对象.ppt(56页珍藏版)》请在三一文库上搜索。

1、上节回顾:JSP语法 JSP的标记,在JSP中变量和方法的声明、Java程序片、表达式和注释。 将HTML代码嵌入Java中就构成了servlet,而把Java 代码嵌入HTML中就构成了JSP。,客户与服务器间的交互管理在servlet中通过HttpServletRequest对象和HttpServletResponse对象来完成,JSP中则通过JSP的内置对象来完成。,第8讲 JSP的内置对象 request 对象 response 对象 out对象 session对象 application对象,1 request 对象 request(接受客户端输入的信息) 作用:主要用于接受客户端通

2、过http协议连接传输到服务器端的数据。 方法: getParameter(String name):获得客户端传送给服务器端的参数值,该参数由name指定 getQueryString():获得查询字符串,该串由客户端以GET方法向服务器端传送 setAttribute(String name,Java.lang.Object o):设定名字为name的request参数值,该值由Object类型的o指定 getAttribute(String name):返回name指定的属性值,若不存在指定的属性,就返回空值(null)。,getParameterValues(String name):

3、获得指定参数所有值 getparameterNames():获得客户端传送给服务器端的所有的参数名,结果集是一个Enumeration(枚举)类的实例 getattributeNames():返回request对象所有属性的名字,结果集是一个Enumeration(枚举)类的实例 getCookies():返回客户端的cookie对象,结果是一个cookie数组 getHeader(String name):获得http协议定义的传送文件头信息, 如:request.getHeader(“User-agent”)返回客户端浏览器的版本号、类型,getRequestURI():获得发出请求字符串

4、的客户端地址 getMethod():获得客户端向服务器端传送数据的方法有GET、POST、PUT等类型 getServletPath():获得客户端所请求的脚本文件的文件路径 getHeaderNames():返回所有request header的名字,结果集是一个Enumeration(枚举)类的实例 getHeaders(String name):返回指定名字的request header的所有值,结果集是一个Enumeration(枚举)类的实例,getServerName():获得服务器的名字 getServerPort():获得服务器的端口号 getRemoteAddr():获得客

5、户端的IP地址 getRemoteHost():获得客户端电脑的名字,若失败,则返回客户端电脑的IP地址 getProtocol():获取客户端向服务器端传送数据所依据的协议名称,如http/1.1 例获得客户端基本信息request_method.jsp, 填写姓名: ,例获取用户提交的请求信息form1.jsp, 获取文本框提供的信息: 获取按钮的名字: 客户端请求的方式: 客户端发送的姓名: ,响应程序request1.jsp,String textContent=request.getParameter(“girl“); if(textContent=null) textContent

6、=“; ,注意: 使用request对象获取信息时要避免使用了空对象。因为在客户请求页面时,客户可能还没有提交数据,对象还没有被创建,就使用了该对象,Java解释器就会提示出现了NullPointerException异常。 为避免出现这种问题,使用如下代码加以避免:,注意:中文显示问题 若是直接赋值的中文字符串,用就可正常显示。 request传过来的中文字符串可通过如下方法设置显示方式: String aa=str; byte aa=aa.getBytes(“ISO8859-1”); String bb=new String(aa); 或在使用request对象前插入语句: ,2 resp

7、onse对象 当客户访问一个服务器的页面时,会提交一个HTTP请求,服务器收到请求时,返回HTTP响应。 与request对象相对应的对象是response对象。用response对象对客户的请求作出动态响应,向客户端发送数据。比如,当一个客户请求访问一个JSP页面时,该页面用page指令设置页面的contentType属性的值是text/html,那么JSP引擎将按着这种属性值响应客户对页面的请求,将页面的静态部分返回给客户。如果想动态地改变contentType的属性值就需要用response对象改变页面的这个属性的值,作出动态的响应。,方法: addHeader(String name,

8、String value):添加HTTP文件头,该header将会传到客户端,若同名的header存在,原来的header会被覆盖。 containsHeader(String name):判断指定名字的HTTP文件头是否存在并返回布尔值。 sendError(int sc):向客户端发送错误信息,如:505:服务器内部错误;404:网页找不到错误。如:response.sendError( response.SC_NO_CONTENT); setHeader(String name,String value):设定指定名字的HTTP文件头的值,若该值存在,它将会被新值覆盖。,如1:让网页每隔

9、5秒刷新一次 the current dateis: 如2:利用response对象设定HTTP头 实例response_method.jsp,动态响应contentType属性 由于page指令只能为contentType指定一个值,来决定响应的MIME类型,如果想动态的改变这个属性的值来响应客户,就需要使用response对象的setContentType(String s)方法来改变contentType的属性值: response.setContentType(String s); 该方法动态设置响应的MIME类型,参数s可取:text/html、 application/x-msex

10、cel、application/msword等。,MIME(Multipurpose Internet Mail Extentions),表示多用途Internet邮件扩允协议 当服务器用setContentType方法动态改变了contentType的属性值,即响应的MIME类型,并将JSP页面的输出结果按着新的MIME类型返回给客户时,客户端要保证支持这种新的MIME类型。 客户如果想知道自己的浏览器能支持哪些MIME类型,可以点击资源管理器工具文件夹选项文件类型。常见MIME类型:, 我正在学习response对象的 setContentType方法 将当前页面保存为word文档吗? ,

11、JSP页面通过动态地改变contentType的属性值,浏览器提示用户用Ms-Word格式来显示当前页面。 运行,Response重定向 sendRedirect(URL):可以将用户重定向到一个不同的页面(URL)。 sendRedirect(URL)方法通过返回特定的状态代码而起作用,当它被调用时,返回一个状态代码,然后在响应中定位,给新页面一个新地址。 在某些情况下,当响应客户时,需要将客户重新引导至另一个页面。例如,如果客户输入的表单信息不完整,就会再被引导到该表单的输入页面。 可以使用response的sendRedirect(URL url)方法实现客户的重定向。 在下面的例子中,

12、客户在Example2.jsp页面填写表单提交给tree1.jsp页面,如果填写的表单不完整就会重新定向到Example2.jsp页面。,sendRedirect.jsp:, 填写姓名: ,tree1.jsp:,3 Out对象 out对象是一个输出流,用来向客户端输出数据。在前面的许多例子里曾多次使用out对象进行数据的输出。out对象可调用如下的方法用于各种数据的输出。 方法:out.print(数据) 或 out.println(数据) out.newLine():输出一个换行符号 out.flush():输出缓冲区的数据 out.close():关闭输出流 out.clearBuffer

13、():清除缓冲区里的数据,并把数据写到客户端,out.clear():清除缓冲区里的数据,但不把数据写到客户端 out.getBufferSize():获得缓冲区的大小,缓冲区的大小可用设置 out.getRemaining():获得缓冲区没有使用的空间的大小 out.isAutoFlush():返回布尔值,若auto flush则返回true,否则返回false。是否auto fush我们可用%page is AutoFlush=”true/false”%来设置 实例,下例使用out对象向客户输出包括表格等内容的信息。 例子 out.jsp, 这是标题1字体的大小“); out.printl

14、n(“这是标题2字体的大小“); out.print(“); out.println(a); out.println(b); out.println(c); % 以下是一个表格 “); out.println(“); out.println(“); out.println(“+“姓名“+“);,out.println(“+“性别“+“); out.println(“+“出生日期“+“); out.println(“+“); out.println(“+“刘甲一“+“); out.println(“+“男“+“); out.println(“+“1978年5月“+“); out.println(

15、“+“); out.println(“+“林 霞“+“); out.println(“+“女“+“); out.println(“+“1979年8月“+“); out.println(“+“这是表格“+“); out.println(“+“+“) ; % ,Cookies集合 浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。 因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待。为了弥补这个缺陷,Netscape开发出了cookie这个有效的工具来保存某个用户的识别信

16、息,因此人们昵称为“小甜饼”。 cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookie.txt本地文件保存从所有站点接收的Cookie信息;而IE浏览器把Cookie信息保存在类似于C:Documents and SettingsAdministratorCookies的目录下。 当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。,cookie的好处: 1、能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径。 2、能告诉在线广告商广告被点击的次数 ,从

17、而可以更精确的投放广告。 3、有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点。 4、能帮助站点统计用户个人资料以实现各种各样的个性化服务。 Cookie的缺陷: 多人共用一台电脑的问题 ;Cookie被删除时的问题。 Cookie的应用: 1、网站浏览人数管理。 2、按照用户的喜好定制网页外观。 3、在电子商务站点中实现诸如“购物篮”等功能。,创建Cookie JSP是调用Cookie相应的构造函数Cookie( name, value)用合适的名字和值来创建Cookie,然后 通过HttpServletResponse的addCookie方法加入到S

18、et-Cookie应答头,创建cookie的语法格式: Cookie cookie_name =new Cookie(“Parameter”,“Value”); response.addCookie(cookie_name); 例如: Cookie newCookie =new Cookie(“username“,“lisi“); response.addCookie(newCookie); 注意:名字和值都不能包含空白字符以及下列字符: : ;? , “ / ( ) =,Cookie的写入与读取 在JSP中,程序是通过cookie.setXXX设置各种属性,用cookie.getXXX读出c

19、ookie的属性 例如 : cookie值的写入:在Cookie发送到客户端前,先要创建一个Cookie,然后用addCookie方法发送。 ,Cookie值的读取: 调用request.getCookies()从客户端读入Cookie。 你好,! /如果找到后,向他问好 ,当给不存在的Cookies集合设置时,就会在客户机创建,如果该Cookies己存在,则会被代替。由于Cookies是作为HTTP传输的头信息的一部分发给客户机的,所以向客户机发送Cookies的代码一般放在发送给浏览器的HTML文件的标记之前。 需要注意的是,只有在服务器未被下载任何数据给浏览器前,浏览器才能与Server

20、进行Cookies集合的数据交换,一旦浏览器开始接收Server所下载的数据,Cookies的数据交换则停止,为了避免错误,要在程序和前面加上response.Buffer=True。,设置Cookie的存在时间及删除Cookie 在JSP中,使用setMaxAge(int expiry)方法来设置Cookie的存在时间,参数expiry应是一个整数。正值表示cookie将在这么多秒以后失效。 注意这个值是cookie将要存在的最大时间,而不是cookie现在的存在时间。 负值表示当浏览器关闭时,Cookie将会被删除。零值则是要删除该Cookie。如: ,Cookie的存放位置 由于Cook

21、ie是我们浏览的网站传输到用户计算机硬盘中的文本文件或内存中的数据,因此它在硬盘中存放的位置与使用的操作系统和浏览器密切相关。在Windows NT/2000/XP的计算机中,Cookie文件的存放位置为C:Documents and Settings用户名Cookie。 Cookie的设置 在IE的“工具/Internet选项”的“常规”选项卡中,选择“设置/查看文件”,查看所有保存到你电脑里的Cookie。这些文件通常是以userdomain格式命名的,user是你的本地用户名,domain是所访问的网站的域名。 打开“工具/Internet选项”中的“隐私”选项卡(注意该设置只在IE6.

22、0中存在,其他版本IE可以单击“工具/Internet选项” “安全”标签中的“自定义级别”按钮,进行简单调整),可以调整Cookie的安全级别。,问题:服务器是如何控制用户访问的?,例:简单的小说阅读网站,4 Session对象 session即会话,用来记录客户从连接到服务器到离开服务器过程中的一切信息。 JSP引擎每次响应客户端请求时,首先检查客户端请求中是否包含sessionid: 如果不包含, JSP引擎产生一个session对象,调用相应的方法存储客户在访问期间提交的各种信息,如姓名、号码等。并为该session对象被分配一个Id号,将该Id号发送到客户端,存放在客户的Cookie

23、中。 如果已包含,则说明以前已经为此客户端创建过session,服务器就依照sessionid把该 session对象检索出来使用,直到该session对象失效。 当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。,方法: (1) session.setAttribute(String key ,Object obj) session对象类似于散列表,session对象可以调用该方法将参数Object指定的对象obj添加到session对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添加的对象被清除。 (2) sessio

24、n.getAttibue(String key) 获取session对象含有的关键字是key的对象。由于任何对象都可以添加到session对象中,因此用该方法取回对象时,应强制转化为原来的类型。 (3) session.removeAttribue(String key) 从当前session对象中删除关键字是key的对象。,(4)session.getId() 获取session对象的编号。 (5)session.getCreationTime() session的创建时间. (6)session. getLastAccessedTime() 客户端最近一次请求时间. (7)session.

25、 getMaxInactiveInterval() 两次请求间隔多长时间此SESSION被取消 (8)session. isNew() 是否是新创建的一个SESSION 实例,应用: 计数器,在第前面讲述中有一个计数器的例子,但那个例子并不能限制客户通过不断的刷新页面来增加计数器的计数,在下面的例子中,用session对象禁止客户通过刷新页面增加计数。当客户刷新页面时,我们可以使用session的public boolean isNew() 方法判断是否是一个新的客户,因为客户刷新页面不会改变服务器分配给该客户的session对象。,例子 jsq.jsp, 您是第个访问本站的人。,sessio

26、n对象与URL重写 session对象能和客户建立起一一对应关系依赖于客户的浏览器是否支持Cookie。如果客户端不支持Cookie,那么客户在不同网页之间的session对象可能是互不相同的,因为服务器无法将Id存放到客户端,就不能建立session对象和客户的一一对应关系。我们将浏览器的Cookie设置为禁止后(选择浏览器菜单工具Internet选项安全internet和本地intranet自定义级别cooker,将全部选项设置成禁止),运行上述例子会得到不同的结果。也就是说,“同一客户”对应了多个session对象,这样服务器就无法知道在这些页面上访问的实际上是同一个客户。,如果客户的浏

27、览器不支持Cookie,我们可以通过URL重写来实现session对象的唯一性。所谓URL重写,就是当客户从一个页面重新连接到一个页面时,通过向这个新的URL添加参数,把session对象的Id传带过去,这样就可以保障客户在该网站各个页面中的session对象是完全相同的。可以使用response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写,比如,如果从tom.jsp页面连接到jerry页面,首先实现URL重写: 然后将连接目标写成 . 如果客户不支持Cookie,在下面的例子2中将例子中1中的session.jsp、tom.jsp和jerry.js

28、p实行URL重写。,String str=response.encodeRedirectURL(“jerry.jsp“);,session_encode.jsp:, session对象: 您的session对象的ID是: 您向URL:http:/localhost:8080/obj/session_encode1.jsp写入的信息是: “ method=post name=form ,session_encode1.jsp :, 我是session_encode1.jsp页面 您在session_encode1.jsp页面中的session对象的ID是: 您向URL:http:/localho

29、st:8080/obj/session_encode2.jsp写入的信息是: 点击超链接,连接到session_encode2.jsp的页面。 “ 欢迎到Jerry屋来! ,session_encode2.jsp :, 我是jerry页面 您的在session_encode2.jsp页面中的session对象的ID是: 您向URL:http:/localhost:8080/obj/session_encode.jsp写入的信息是: 点击超链接,连接到session的页面。 “ 欢迎到session屋来! ,基本的购物实例:使用session对象存储顾客的姓名和购买的商品。 gouwu.jsp,

30、 输入你的姓名连接到第一百货:first.jsp ,first.jsp:, 这里是第一百货 输入你想购买的商品连接到结帐:account.jsp ,account.jsp:, 这里是结帐处 的姓名是: 您选择购买的商品是: ,session对象创建购物车的完整代码 一、构建的商品类 Goods.java 写一个Goods类,并定义商品的各个属性,返回商品属性的方法,以及商品对象进行比较的方法 二、购物车 shopcar.jsp 首先建立Goods(商品)对象goods,并建立建立ArrayList对象ay,再通过ArrayList对象的方法add()将商品对象添加到ArrayList对象ay中

31、,由于ArrayList对象是具有添加和删除成员的方法,从而实现多个商品存储管理于ArrayList对象,最后将ArrayList对象ay存储于session对象当中,实现购物车功能。 三、删除商品 removeGoods.jsp 对购物车中的商品进行删除操作。,5 Application对象 Application对象和Session对象相比,含义更加广泛。在使用Session对象时,各个客户端共享一个Session对象,而使用Application对象时,在同一个服务器中的JSP文件共享一个Application对象。 作用:一旦创建,除非服务器关闭,否则将一直保持下去。 Applicat

32、ion对象主要方法为: application.getServerInfo() 返回JSP(servlet)引擎名及版本号。 application.getRealPath(“application.jsp”) 返回/application.jsp虚拟路径的真实路径。,application.getMajorVersion() 服务器支持的Servlet API的大版本号。 application.getMinorVersion() 服务器支持的Servlet API的小版本号。 application.getResource(“/obj“) 指定资源(文件及目录)的URL路径。 applic

33、ation.setAttribute(String name,Object object) 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个属性。 application.getAttribute(String name): 返回由name指定名字的Application对象属性的值,这是个Object对象,如果没有,就返回null。,application.getAttributeNames(): 返回所有Application对象的属性的名字,结果集是一个Enumeration(枚举)类的实例。 application.getInitParame

34、ter(String name): 返回由name指定的名字的application对象的某个属性的初始值,如果没有参数,就返回null。 application.removeAttribue(String key) 从当前application对象中删除关键字是key的对象。 实例 注:由于application对象为所有客户公用,任何客户对对象中存储数据的改变都会影响到其他客户,因此,在某些情况下,对该对象的操作需要实现同步处理。 有些服务器不直接支持使用application对象,必须先用ServletContext类声明,再使用getServletContext()方法对这个appli

35、cation对象进行初始化。,用application制作留言板 在下例中,客户通过submit.jsp向messagePane.jsp页面提交姓名、留言标题和留言内容,messagePane.jsp页面获取这些内容后,用同步方法将这些内容添加到一个向量中,然后将这个向量再添加到application对象中。当用户点击查看留言版时,showMessage.jsp负责显示所有客户的留言内容,即从application对象中取出向量,然后遍历向量中存储的信息。例子submit.jsp:,输入您的名字: 输入您的留言标题: 输入您的留言: ,messagePane.jsp:,“+messages; sendMessage(s); out.print(“您的信息已经提交!“); % 返回 ,showMessage.jsp:, “+str); % ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1