第 4 章 配合 例子源代码一起使用 Power point 制作:耿祥义 张跃平 普通高等教育 “ 十一五 ” 国家级规划教材 JSP 内置对象
J s P 主要内容 request对象 response对象 session对象 out对象 application对象 难点 使用Tag文件处理数据 理解session对象 使用session对象存储数据 关键实践 使用request对象 使用response对象 使用session对象 第 4 章导读
J s P 第 4 章 JSP 内置对象 有些成员变量不用声明就可以在 JSP 页面的脚本( Java 程序片和 Java 表达式) 中使用,这就是所谓的内置对象。 内置对象有: resquest 、 response 、 session 、 out 、 application 。
J s P §4.1 request 对象 在 JSP 中,内置对象 request 封装了用户请求页面时所提交 的信息,该对象调用相应的方法可以获取封装的信息. 即 request 对象可以获取用户提交的信息 。 用户在请求 JSP 页面时,通常会使用 HTML 表单提交信息, 表单的一般格式是: 提交手段 例如用户提交信息表单: tom.jsp 页面可以使用内置 request 对象获得用户提交的信息 request.getParameter("boy");
J s P 获取用户提交的信息 request 对象获取用户提交信息的最常用的方法是 getParameter(String s). 例 4-1, 4-2 P62
J s P 处理汉字信息 当用 request 对象获取用户提交的汉字字符时, 会出 现乱码问题, 所以对含有汉字字符的信息必须进行特 殊的处理。首先, 将获取的字符串用 ISO 进行 编码,并将编码存放到一个字节数组中,然后再将 这个数组转化为字符串对象即可. 如下所示: String str=request.getParameter("girl"); byte b[]=str.getBytes("ISO "); str=new String(b); 例 4-3 P64
J s P 常用方法举例 可以用内置对象 request 对象来获取请求所提交的各类信息, request 对象的常用方法如下: getProtocol() :获取请求使用的通信协议,如 http/1.1 等。 getServletPath() :获取请求的 JSP 页面所在的目录。 getContentLength() :获取 HTTP 请求的长度。 getMethod() :获取表单提交信息的方式,如 POST 或 GET 。 getHeader(String s) :获取请求中头的值。 getHeaderNames() :获取头名字的一个枚举。 getHeaders(String s) :获取头的全部值的一个枚举。 getRemoteAddr() :获取客户的 IP 地址。 getRemoteHost() :获取客户机的名称 ( 如果获取不到,就获取 IP 地址 ). getServerName() :获取服务器的名称。 getServerPort() :获取服务器的端口号。 getParameterNames() : 获取表单提交的信息体部分中 name 参数值的一个枚 举. 例 4-4 P66
J s P 使用 Tag 文件处理有关数据 JSP 页面使用 request 对象获取用户提交的数据, 然后使用 Tag 标记调用 Tag 文件,并将必要的数据 传递给 Tag 文件。 Tag 文件负责处理数据,根据需 要将处理结果显示给用户或返回给调用它的 JSP 页面。 例 4-5 P68 example4_5.jsp 用户提交三边 get.jsp 调用 tag 并传递三边 Computer.tag 计算面积并返回结果
J s P 处理 HTML 标记 JSP 页面可以含有 HTML 标记,当用户通过浏览 器请求一个 JSP 页面时, Tomcat 服务器将该 JSP 页面中的 HTML 标记直接发送到用户的浏览器,由 用户的浏览器负责执行这些 HTML 标记。而 JSP 页 面中的变量声明、程序片以及表达式由 Tomcat 服 务器处理后,再将有关的结果用文本方式发送到 用户端的浏览器。 HTML 是 Hypertext Marked Language 的缩写, 即超文本标记语言。
J s P 处理 HTML 标记 _ 标 记 标记被习惯地称作表单,用户经常需要使用表单提交数据。 表单的一般格式是: 数据提交手段部分 其中 … 是表单标记,其中的 method 属性取值 get 或 post 。 提交手段包括:通过文本框、列表、文本区等,例如:
J s P 处理 HTML 标记 _ 标记 表单标记 将 标记作为子标记来指定表单中数据的输入方 式以及表单的提交键。 标记中的 type 属性可以指定输入方式的 GUI 对象, name 属性用来指定这个 GUI 对象的名称。 标记的基本 格式: 服务器通过属性 name 指定的名字来获取 “ 输入对象的 GUI 类型 ” 中提交的 数据。 “ 输入对象的 GUI 类型 ” 可以是: text (文本框)、 checkbox (检查 框)、 submit (提交键)等。 文本框 text: 单选框 radio: 复选框 checkbox : 口令框 password: 隐藏 hidden: 提交键 submit: 重置键: reset: 例 4-6 P72
J s P 处理 HTML 标记 _ 、 格式 下拉式列表和滚动列表通过 和 标记来定义。基本格式 为: … ( 1 )下拉列表 你选了小猫 你选了小狗 … ( 2 )滚动列表 : 在 Select 中指定 size 属性的值就变成滚动列表, size 的值是滚动列表的可见 行的个数。 计算 1 到 n 的连续和 计算 1 到 n 的平方和 … 例 4-7 P74
J s P 处理 HTML 标记 _ 格式 标记在表单中指定一个能输入多行文本的文本区 域。 基本格式为:
J s P 处理 HTML 标记 _ 表格 表格由 、 标记定义。 一般格式 : 单元格中的数据 … 单元格中的数据 … 其中 … 定义表格的一个行, 或 标记定义这一行中的 表格单元,二者的区别是: 定义的单元加重显示, 称做普通单 元,不加重显示。一行中的加重单元和普通单元可以交替出现,也可以 全是加重单元或普通单元。 中增加选项 border 可指明该表格是否带有边框。 例 4-8 P76
J s P 处理 HTML 标记 _ 与 标记 使用 或 标记都可以显示一副图象,标记的基 本格式为: 描述文字 如果图像文件和当前页面在同一 Web 服务目录中, “ 图像的 文件的 URL” 就是该图像文件的名字;如果图像文件在当前 Web 服务目录一个子目录中,比如 picture 子目录中,那么 “ 图 像文件的 URL” 就是 “picture/ 图像文件的名字 ”. 标记中可以使用 width 和 height 属性指定被显示的图像的宽 为和高,如果省略 width 和 height 属性,标记将按图像的原始 宽度和高度来显示图像。
J s P 处理 HTML 标记 _ 标记 使用 标记可以播放音乐和视频, 当浏览器执行该标记 时, 会把浏览器所在机器上的默认播放器嵌入到浏览器中,以 便播放音乐或视频文件。 标记的基本格式为: 描述文字 如果音乐或视频文件和当前页面在同一 Web 服务目录中, 标记中 src 属性的值就是该文件的名字;如果视频文件在当前 Web 服务目录一个子 目录中,比如 avi 子目录中,那么 标记中 src 属性的值就是 “avi/ 视 频文件的名字 ” 。 标记中经常使用的属性及取值如下: autostart 属性的值用来指定音乐或视频文件传送完毕后是否立刻播放, autostart 取值 “true” 或 “false” ,该属性的默认值是 false 。 loop 属性的取值为正整数, 该属性的值用来指定音乐或视频文件重复播放 的次数。 例 4-9 P77
J s P §4.2 response 对象 可以用 response 对象对用户的请求做出动态响应, 向用户端发送数据。
J s P 动态响应 contentType 属性 由于 page 指令只能为 contentType 属性指定一个值来决定响 应的 MIME 类型。 如果想动态地改变这个属性的值来响应用户, 就需要使用 response 对象 的 setContentType(String s) 方法 来改变 contentType 的 属性 值。 public void setContentType(String s); 方法动态设置响应的 MIME 类型,参数 s 可取 : text/html 、 text/plain 、 image/gif 、 image/x-xbitmap 、 image/jpeg 、 image/pjpeg 、 application/x-shockwave-flash 、 application/vnd.ms-powerpoint 、 application/vnd.ms-excel 、 application/msword 。 例 4-10, 4-11 P78
J s P response 的 HTTP 文件头 response 对象可以使用方法: addHeader(String head,String value); 或使用方法: setHeader(String head,String value); 动态添加新的响应头和头的值,并将这些头发送给用户的浏 览器。如果添加的头已经存在,则先前的头被覆盖。 例 4-12 P80
J s P response 重定向 在某些情况下, JSP 引擎在响应用户时,可能需要将用户 重新引导至另一个页面。 例如,如果用户输入的表单信息不完整,就会再次被引导 到该表单的输入页面。 使用 response 对象的 sendRedirect(URL url) 方法 实现用户的重定 向。 例 4-13 P81
J s P response 的状态行 当 JSP 引擎对用户请求进行响应时,它发送的首行称做状态 行。 状态行包括 3 位数字的状态代码和对状态代码的描述(称做 原因短语)。 参考表 4-1 状态代码表 例 4-14 P82
J s P §4.3 session 对象 HTTP 协议是一种无状态协议。一个用户向服务 器发出请求( request ),然后服务器返回响应 ( response ),连接就被关闭了,在服务器端不保 留连接的有关信息,因此当下一次连接时,服务器 已没有以前的连接信息了,无法判断这一次连接和 以前的连接是否属于同一用户。 内置 session( 会话 ) 对象记录有关连接的信 息. 由 Tomcat 服务器负责创建 。
J s P session 对象的 ID session 对象被分配了一个 String 类型的 ID , Tomcat 服务器将 ID 发送到客户端,存放在客户的 Cookie 中。 同一用户在同一 Web 服务目录中的各个页面的 session 是相同的. 不同用户的 session 对象互不相同,具有不同的 ID. 例 4-15 P86
J s P session 对象与 URL 重写 如果用户端不支持 Cookie ,那么用户在不同网页之间的 session 对象可能是互不相同的,因为如果服务器无法将 Id 存放到用户端,就不能建立 session 对象和用户的一一对应 关系。 可以通过 URL 重写来实现 session 对象的惟一性。所谓 URL 重写,就是当用户从一个页面重新链接到另一个页面时, 通过向这个新的 URL 添加参数,把 session 对象的 Id 传带过 去,这样就可以保障用户在该网站各个页面中的 session 对 象是完全相同的。可以使用 response 对象调用 encodeURL() 或 encodeRedirectURL() 方法实现 URL 重写. 例 4-16 P87
J s P session 对象存储数据 session 对象使用下列方法处理数据: (1 ) public void setAttribute(String key, Object obj) session 对象可以调用该方法将参数 Object 指定的对象 obj 添加到 session 对象 中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相 同,则先前添加的对象被清除。 ( 2 ) public Object getAttibute(String key) 获取 session 对象含有的关键字是 key 的对象。由于任何对象都可以添加到 session 对象中,因此用该方法取回对象时,应强制转化为原来的类型。 ( 3 ) public Enumeration getAttributeNames() session 对象调用该方法产生一个枚举对象,该枚举对象使用 nextElemets() 遍 历 session 中的各个对象所对应的关键字。 ( 4 ) public long getCreationTime() session 对象调用该方法可以获取该对象创建的时间,单位是毫秒。 ( 5 ) public void removeAttribute(String name) session 对象调用该方法移掉关键字 key 对应的对象. 例 4-17 P89
J s P 在 Tag 文件中使用 session 对象 JSP 页面通过调用 Tag 文件可以实现代码的复用, 那么在反复调用 Tag 文件时, Tag 文件就可以对 session 对象中存储的数据进行处理,并将必要的 结果返回给 JSP 页面。 例 4-18 P90
J s P session 对象的生存期限 session 对象的生存期限依赖: 1. 客户是否关闭浏览器。 2. session 对象是否调用 invalidate() 方法使 session 无效。 3. session 对象是否达到设置的最长 “ 发呆 ” 时间 例 4-19 P92
J s P 使用 session 设置时间间隔 为了限制用户在很短的时间间隔内不断地使用 某页面所提供的某种功能,而影响其他用户使用该 页面所提供的功能,因此我们可以利用用户的 session 来设置用户使用当前页面所提供功能的间 隔时间,从而限制该用户等待若干 “ 时间 ” 后,再次 使用该页面所提供的功能。 例 4-20 P93
J s P 计数器 使用 session 实现计数器的步骤是:当一个用户 请求 Web 服务目录下的任何一个 JSP 页面时,首先 检查该用户的 session 对象中是否已经有计数,如 果没有计数,立刻将当前的计数增 1 ,并将计数存 到用户的 session 中,否则不改变当前的计数。 例 4-21 P95
J s P §4.4 out 对象 out 对象是一个输出流, 用来向用户端输出数据。 out 对象可调用如下的方法用于各种数据的输出, out.print(Boolean) , out.println(Boolean) 用于输出一个布尔值 。 out.print(char) , out.println(char) 输出一个字符。 out.print(double) , out.println(double) 输出一个双精度的浮点数。 out.print(float) , out.println(float) 用于输出一个单精度的浮点数。 out.print(long) , out.println(long) 输出一个长整型数据。 out.print(String) , out.println(String) 输出一个字符串对象的内容。 out.newLine() 输出一个换行符。 out.flush() 输出缓冲区里的内容。 out.close() 关闭流。 例 4-22 P97
J s P §4.5 application 对象 任何客户在所访问的服务目录的各个页面浏览时, application 对象 都是同一个. application 对象的常用方法 ( 1 ) public void setAttribute(String key, Object obj) application 对象可以调用该方法将参数 Object 指定的对象 obj 添加到 application 对象中, 并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添 加对象被清除。 ( 2 ) public Object getAttibue(String key) 获取 application 对象含有的关键字是 key 的对象。由于任何对象都可以添加到 application 对象中,因此用该方法取回对象时,应强制转化为原来的类型。 ( 3 ) public Enumeration getAttributeNames() application 对象调用该方法产生一个枚举对象,该枚举对象使用 nextElemets() 遍历 application 中的各个对象所对应的关键字。 ( 4 ) public void removeAttribue(String key) 从当前 application 对象中删除关键字是 key 的对象。 ( 5 ) public String getServletInfo() application 对象可以调用该方法获取 Servlet 编译器的当前版本的信息。 例 4-23 P99