chap3JSP内置对象-student.ppt_第1页
chap3JSP内置对象-student.ppt_第2页
chap3JSP内置对象-student.ppt_第3页
chap3JSP内置对象-student.ppt_第4页
chap3JSP内置对象-student.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

第3章 JSP内置对象,1,3,request对象 response对象 session对象 application对象 out对象,内容提要,定义 内置对象是不需要声明就可以在JSP页面中的Java程序片或表达式中直接使用的对象。 目的:为了Web应用程序开发的方便 常见的内置对象 resquest、response、session、application、out。,内置对象概述,名称:request(请求对象) 类型 javax.servlet.http.HttpServletRequest request对象创建场合 在浏览器地址栏中输入URL并回车,发出请求 点击网页中的链接目标(超链接),发出请求 点击表单的“提交”按钮,发出请求,1. request对象,HTTP协议起作用 核心:请求和响应,1. request对象,HTTP请求的典型结构,request对象,请求行:方法 / 请求的URL HTTP的版本号,头域:可能包含多个头(请求信息的来源,与浏览器有关),信息体:表单的信息、URL参数信息等,示例:GET/hello.htm HTTP/1.1 Host: 表单信息,1. request对象,request对象的作用 封装了用户请求过程中的提交信息,调用该对象的相应方法就可以获取相应的信息 1)用户提交的信息(表单中填写的数据等) 2)客户端基本细节信息 协议名称、文件目录、提交信息的方式、IP地址、客户 机名称、端口号等等 3)服务器端的一些基本信息(服务器名称、端口号等),1. request对象,表单信息,提交按钮,单击时,request对象中已经封装了表单的相关信息,只要在服务器端取出来就可以进行处理了,应用1:获取客户提交信息 提交信息的方式:表单或者URL参数 常用方法 1)getParameter(String name) 返回String,适用于单值的HTML控件,如text文本框 2)getParameterValues(String name) 返回String,适用于多值的HTML控件,如checkbox复选框 案例:requestinput.jsp output.jsp,1. request对象,应用1:获取客户提交信息 常用方法 3)getParameterNames() 返回Enumeration类型的枚举对象,获取客户端提交的所有参数的名字 Enumeration的使用 类型:java.util.Enumeration 方法1:hasMoreElements() 测试此枚举是否包含更多的元素。 方法2:nextElement() 如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。,1. request对象,while(e.hasMoreElements() String paramName = (String)e.nextElement(); out.print(“ “ + paramName); ,1. request对象,Enumeration的使用 【回顾】 StringTokenizer类,hasMoreTokens(), nextToken(),String str = “Friday;Monday;Sunday“; StringTokenizer stk = new StringTokenizer(str, “;“); int i = 0; while (stk.hasMoreTokens() String word = stk.nextToken(); System.out.println(“第“ + i + “个单词为:“ + word); ,应用1:获取客户提交信息 注意1: 处理汉字信息,1. request对象,String name = request.getParameter(“name“); byte b = name.getBytes(“ISO-8859-1“); name = new String(b);,String name = request.getParameter(“name“); /编码转换,GBK也可以 name = new String(name.getBytes(“ISO-8859-1“),“GB2312“),写法1,写法2,应用1:获取客户提交信息 注意2: 类型转换异常(java.lang.NumberFormatException) 说明:表单中的textbox,什么都不写时,返回的是“ (注意不是null),此时进行类型转换,调用了Integer.parseInt(temp)方法,则会出现异常。 示例:案例input.jsp中的age选项如果什么都不写,output.jsp就会出现类型转换异常,1. request对象,1. request对象(扩展),应用1:获取客户提交信息 注意2: 类型转换异常(java.lang.NumberFormatException) 解决方案:根本方案是在进行类型转换的时候之前,保证得到的字符串就是 全部由数字组成的字符串 方案1:服务器端处理方案(不推荐) 1)捕获异常,在发生异常时为字符串赋值为一个数字串,如0 2)捕获异常,在发生异常时跳转回到表单页面,要求重新输入(页面跳转) 说明:在服务端处理是不明智的,需要浪费服务器资源处理客户端的问题, 同时导致用户不必要的等待。 方案2:客户端处理方案(推荐) 1)使用JavaScript代码在客户端判断用户的输入是否合法。 2)使用Dreamweaver等开发工具的javascript框架直接制作验证控件。(如spry框架),应用1:获取客户提交信息 注意2: 空对象异常引发编码转换异常java.lang.NullPointerException 说明:表单中的radio、checkbox在什么都不选时,利用request.getParameter()方法返回null.(这一点不同于表单中的textbox,什么都不写时,返回的则是“”);对null对象进行中文编码转换,则会出现异常 示例:案例input.jsp中的sex选项如果什么都不选,output.jsp就会出现编码转换异常,1. request对象,Tomcat的work目录下的转译成的java文件中的行数,出现异常的JSP文件的可能出错位置,C:Program Filesapache-tomcat-6.0.29work,应用2:获取服务端和客户端信息(了解),1. request对象,getRemoteAddr():获取客户的IP地址。 getRemoteHost():获取客户机的名称(如果获取不到,就获取IP地址) getServerName():获取服务器的名称。 getServerPort():获取服务器的端口号。,应用2:获取HTTP协议的头信息(了解),1. request对象,getProtocol():获取请求使用的通信协议,如http/1.1等。 getContentLength():获取HTTP请求的长度。 getMethod():获取表单提交信息的方式,如POST或GET。 getHeader(String s):获取请求中头的值。 getHeaderNames():获取头名字的一个枚举。 getHeaders(String s):获取头的全部值的一个枚举。,应用2:获取URL信息(理解),1. request对象,例如http:/localhost:8080/chater3/request/output.jsp 在output.jsp中的java程序片里 Request.getServletPath() 返回的是/request/output.jsp Request.getContextPath() 返回的是/chater3,getServletPath():获取请求的JSP页面所在的目录。 getContextPath(): 获取应用程序的目录信息,http:/localhost:8080/chater3/request/output.jsp,request.getScheme()+“:/“ +request.getServerName() +“:“+request.getServerPort() + Request.getContextPath() +Request.getServletPath(),获取协议-http 获取服务器名称localhost 获取服务器端口号8080 获取上下文路径(web项目名称)chater3 获取请求页面路径request/output.jsp,1. request对象 学生练习,在regist.jsp页面中编写一个注册表单,表单提交给handle.jsp页面处理,接收参数信息,并将信息进行相应的处理(判空、编码转换)后打印在jsp页面上。表单如图所示:,应用3: 页面跳转(3个以上页面之间的请求转发) 利用request对象的方法获取请求转发对象RequestDispatcher,实现页面的跳转 方法(实现跳转需要两个步骤): 1)步骤1:获取请求转发对象 RequestDispatcher rd = request.getRequestDispatcher(“目的页面url“); 2)步骤2:跳转到目的页面 rd.forward(request,response); 说明: 此跳转方法能将request对象转发至目的页面。整个过程相当于一次请求。因此地址栏中显示的是跳转之前的页面地址。,1. request对象,1. request对象,应用3: 页面跳转 请求转发的原理图:,浏览器地址栏显示:2.jsp,注意:使用RequestDispatcher进行页面的跳转相当于将提交给当前jsp页面(2.jsp)的请求转发给其他页面处理,因此对于当前页面的请求对象能够继续在跳转到的目的页面中使用。同时地址栏显示的是转发前的请求页面地址2.jsp,请求对象的生存期限:request对象的生存期限是一次“请求”,1. request对象,应用3: 页面跳转 示例:在input页面输入姓名和课程,在handle页面接收参数并判断,根据课程不同跳转到不同页面。, /requestDispatcher/handle.jsp“ method=“get“ 姓名: 课程:java .net ,Input.jsp,handle.jsp,应用4: 保存对象数据 利用request将“对象类型”的数据保存起来 常用方法 setAttribute(String key, Object object) 将对象object保存到key关键字对应的值中 getAttribute(String key) 返回Object类型,取出request中保存的key对应的对象 案例:requestrequest_Att.jsp request_Att2.jsp 说明:这种应用在后面的Servlet使用中用的很多,这里只是了解,1. request对象,1. request对象,应用4: 保存对象数据(示例),chap03/requestdispatcher/request_Arr.jsp chap03/requestdispatcher/ request_Att2.jsp,说明:通过request对象的setAttribute方法将“Object”类型的参数放置到request对象中,在跳转到其他页面后,再使用getAttribute方法将参数对象取出来,进行相应的处理。注意:因为是将对象放置在request对象中,因此必须在同一次请求当中才能这样获取参数,使用response.sendRedirect方法跳转的,仍然不能够取出对象的值。 ?思考:可以将对象通过URL参数拼接的方式传递过去么? 解决方案:使用生存期限更大的内置对象session传递参数。,不可以。因为URL参数拼接的方式不能够传递Object类型的参数。,名称:响应(应答)对象 类型 javax.servlet.http.HttpServletResponse 作用 服务端通过response对象对客户的请求做出响应,指定客户端的行为方式.,2. response对象,发出请求(request) http:/localhost:8080/test/index.jsp,作出响应(response),执行JSP页面,按照请求的内容作出相应的响应,得到结果输出部分,封装到response中,应用1:动态响应contentType属性(告知客户端对于服务端发送内容的显示方式) 方法:response.setContentType(String s) 该方法可以动态改变contentType的属性值,修改page指令的contentType,确定JSP页面响应的MIME类型和JSP页面字符的编码 案例:contentType.jsp,2. response对象,response.setContentType(“application/msword;charset=GB2312“);,应用1:动态响应contentType属性, 我正在学习response对象的setContentType方法 请选择打开方式 ,2. response对象,应用2:response重定向 定义:将用户从当前页面定向到另一个jsp页面 语法:response.sendRedirect(“目标jsp页面的URL“) 例:response.sendRedirect(“output.jsp“);,2. response对象,注意:重定向到另外一个页面相当于重新发起一次请求,因此对于当前页面的请求对象不能够继续在重定向的目的页面中使用。同时地址栏中将显示最后一次请求(重定向)的目的页面地址(3.jsp),浏览器地址栏显示:3.jsp,应用2:response重定向 页面参数传递 作用:如果需要将上一次请求对象中的参数传递到重定向页面时,可以在sendRedirect所跳转的页面的后面通过?和 案例:实验讲义实验四(2.response的综合实验),2. response对象,应用2 注意:重定向时,利用URL传递数据,需要手工构建URL,并注意汉字在URL中的编码问题,2. response对象,1.jsp利用URL向2.jsp传递中文 String name = URLEncoder.encode(“张三“); String course = new String(“Java“); response.sendRedirect(“2.jsp?n=“+name+“,2.jsp利用URL接收传递过来中文数据 String name = request.getParameter(“n“); byte b = name.getBytes(“ISO-8859-1“); name = new String(b); String course = request.getParameter(“c“);,页面跳转总结: 1) 请求转发,存储在request中的信息被保留并带至目标页面 转到新的页面后,地址栏中不会显示新页面的地址。 参数传递: 2)requestDispatcher对象实现跳转 RequestDispatcher rd = request.getRequestDispatcher(“目的页面url“); rd.forward(request,response); 请求转发,存储在request中的信息被保留并带至目标页面 转到新的页面后,地址栏中不会显示新页面的地址。 页面参数传递:setAttribute(String name, Object object) Object getAttribute(String name),2. response对象,注意:以上两种方法跳转前后属于同一次请求!,页面跳转总结: 3)response重定向 response.sendRedirect(xxx.jsp) 请求跳转,重新发起一次请求 使用sendRedirect方法会显示新页面的地址。 页面参数传递:通过? 和&拼接参数,2. response对象,response.sendRedirect(xxx.jsp?参数名1=参数值,参数传递拼接变量的例子: String name = request.getParameter(“name“); String password = request.getParameter(“password“); response.sendRedirect(“loginResult.jsp?name=“+name+“,例子:response.sendRedirect(“loginResult.jsp?name=zhangsan,学生练习 实验四:内置对象(一) request对象、response对象练习,2. response对象,3. session对象,引入例子1request对象的生存期限, /requestDispatcher/2.jsp“ method=“get“ 请选择性别:男 女 , /requestDispatcher/4.jsp“去女生页面4.jsp , /requestDispatcher/3.jsp“去男生页面3.jsp ,1.jsp,2.jsp,3.jsp,4.jsp,3. session对象,引入例子2商场购物,化妆品专柜(request1),麦当劳(request2),超市(request3),服装(request4),皮草(request5),影院(request6),商场,页面,web应用,Session 商场购物车,名称:会话对象 一次会话:浏览器访问某一应用开始至访问结束(浏览器关闭、session达到最长发呆时间、执行了session销毁方法),一次会话中可能有多次的请求和响应。 类型 javax.servlet.http.HttpSession 作用 http协议是无状态的协议,无法识别多个连接是否属于同一个客户 session用来分别保存每一个用户的信息,使用session,可以轻易的识别每一个用户,然后针对每个用户的要求,给予正确的响应 例: 简易购物车、 防止跳过登录页面、 计数器,3. session对象,应用1:会话ID(了解) Tomcat为什么可以识别每个用户(计算机) session对象被分配了一个String类型的ID,Tomcat服务器将ID发送到客户端,存放在客户的cookie中。 1)一次会话中(打开浏览器到关闭),同一用户在同一Web服务目录中的各个页面的session是相同的 2)多次会话中,同一用户的session不同。 3)同一用户在不同的Web服务目录中的session互不相同。 4)不同用户的session对象互不相同,具有不同的ID 案例:session1.jsp 2.jsp 3.jsp,3. session对象,3. session对象,应用1:会话ID(示例), 您正在访问的页面是:1.jsp 您的会话ID是: /session/2.jsp“ method=“get“ /session/3.jsp“跳转到3.jsp , 您正在访问的页面是:2.jsp 您的会话ID是: /session/1.jsp“跳转到1.jsp , 您正在访问的页面是:3.jsp 您的会话ID是: /session/1.jsp“跳转到1.jsp ,1.jsp,2.jsp,3.jsp,应用2:存储数据 public void setAttribute(String key, Object obj) 将参数Object指定的对象obj添加到session对象中,并为 添加的对象指定了一个索引关键字,如果添加的两个对象 的关键字相同,则先前添加的对象被清除。 public Object getAttibute(String key) 获取session对象含有的关键字是key的对象。由于任何对 象都可以添加到session对象中,因此用该方法取回对象 时,应强制转化为原来的类型。,3. session对象,3. session对象,应用2:存储数据(简易购物车实例), 请选择您要购买的书籍: /session/book1.jsp“ method=post name=form Java教程 数据库原理 操作系统 C语言教程 /session/count.jsp“查看购物车 ,book.jsp,book1.jsp, 这里是购物车结帐处 购物车中的商品:“); /session.removeAttribute(“book“);/此时将显示没有选择任何书籍 /session.invalidate();/此时会出现异常 String book = (String)session.getAttribute(“book“); if(book=null)out.println(“您还没有选择任何书籍!“); else for(int i=0; i 连接到book.jsp的页面,继续购买书籍: /session/book.jsp“欢迎去book.jsp! ,count.jsp,应用2:存储数据的相关操作(了解) 1)public void removeAttribute(String key) session对象调用该方法移掉关键字key对应的对象 2)public void invalidate() 该方法将已经保存的所有内容全部删除。 3)public Enumeration getAttributeNames() session对象调用该方法产生一个枚举对象,该枚举对象使用nextElemets()遍历session中的各个对象所对应的关键字 案例:sessionmain.jsp book.jsp count.jsp,3. session对象,应用3:session的生存期限(了解) 客户关闭浏览器 session对象调用invalidate()方法 session对象达到了设置的最长的“发呆“时间,Tomcat安装目录/conf/web.xml (默认30分钟) 30 ,3. session对象,session计数器(按照用户不同统计次数),3. session对象, 这是您第次访问该页面 ,3. session对象, 这是您第次访问该页面 ,application计数器(所有用户访问次数累加),session计数器和application计数器区别 1)使用session 同一用户在一次会话中,session相同,因此可以从session取值进行累加。 同一用户在不同的会话中,session不同,因此需要重新开始进行累加。 不同用户的session不同,因此也是重新开始进行累加。 2)使用application 同一用户在多次会话中或者不同用户之间都是共用同一个application,因此都可以在其基础上不断累加计数 练习:实验五 JSP内置对象(二),3. session对象,3. session对象,总结:request、response和session是JSP内置对象中重要的3个对象,这3个对象体现了服务器端与客户端(即浏览器)进行交互通信的控制,名称:应用对象 类型:javax.servlet.ServletContext 作用 application对象用于保存应用程序中的公有数据 每个Web服务目录下的application被访问该目录的所有用户共享,不同Web服务目录下的application对象不同。,4. application对象,application 和session的区别 session对象和用户会话相关,不同用户的session是不同的对象,而application对所有访问同一Web应用程序的用户都是相同的 服务器只要不关闭,application一直存在。但是对于session失效的情况包括关闭浏览器、调用invalidate、达到发呆时间,4. application对象,常用方法 public void setAttribute(String key, Object obj) public Object getAttibue(String key) public void removeAttribue(String key) public Enumeration getAttrib

温馨提示

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

评论

0/150

提交评论