为了简化在JSP表达式和脚本程序中的Java代码,可以使用9个预定义的内部对象。这些对象由JSP服务器建立,JSP可以直接使用,不需要显式地声明。这9个对象分别为:request,reaponse,out,session,application,config,pageContext,xception和page。表5-4列出可用的内部对象集合。下面就介绍几个常用的对象。

   1.request
    request是与用户请求消息相关的"HttpServletRequest"类型的对象。该对象包含了所有关当前浏览器请求的信息,包括Cookies,HTML方法 ,表单等信息。通过request能访问到用户请求消息的参数,请求的方法(GET或POST)以及消息首部(Header)信息。这些与在Servlet中讨论的是一致的。
    在9个内部对象中,“request”是最常用的,其主要方法如下:
    (1)getCookies()
       返回客户端的Cookie对象,结果是一个Cookie数组。
   (2)getHeader(String name)
       获得HTTP协议定义的传送文件头信息,比如request.getHeader("User-Agent")将返回客户端所用浏览器的版本号、类型。
   (3)getAttbute(String name)
       返回name指定的属性值,如果不存在指定的属性,那么返回空值(null)。
   (4)getAttibuteNames()
       返回request对象所有属性的名字,结果集是一个Enumeration(类举)类的实例。
   (5)getHeaderNames()
       返回所有request header 的名字,结果集是一个Enumeration(类举)类的实例。
   (6)getHeaders(String name)
       返回指定名字的request header的所有值,结果集是一个Enumeration(类举)类的对象。
   (7)getMethod()
       获得客户端向服务器端传送数据的方法(GET、POST或其他方法)。
   (8)getParameter(String name)
       获得客户端传送给服务端的参数值,该参数由name指定。
   (9)getParameterNames()
       获得客户端传送给服务端的所有的参数名字,结果集是一个Enumeration(类举)类的对象。
   (10)getParameterValues(String name)
       获得指定参数所有值。
   (11)getQueryString()
       获得查询字符串,它由客户端的GET方法向服务端传送。
   (12)getRequestURI()
       获得发出请求消息的客户端地址。
   (13)getServletPath()
       获得客户端所请求的脚本文件的文件路径。
   (14)setAttibute(String name,Object object)
       设定名字为name的request参数的值,该值由name指定。
   (15)getServerName()
   (16)getServerPort()
   (17)getRemoteAddr()
   (18)getRemoteHost()
    以上(15~18)分别是获得服务器的名字、端口号、客户端的IP地址和计算机名字,其中getRemoteHost()
方法如果失败,将会返回客户端IP地址。
   (19)getProtocol()
        获得客户端向服务器传送数据所依据的协议名称,如HTTP/1.1。
  2.response
    这是与服务端针对用户请求的响应相关联的“HttpServletResponse”类型的对象,可以通过“response”变量设置HTTP的状态和向客户端发送数据,如Cookie,HTTP文件头信息等。下面列出该对象的方法:
   (1)addCookie (Cookie cookie)
       添加一个Cookie对象,用来保存客户端的用户信息用request的getCookie()方法可以获得这个Cookie。
   (2)addHeader(String name,String value)
       添加HTTP文件头,该Header将会传到客户端去,如果同名的header存在,那么原来的header会被覆盖。
   (3)containsHeader(String name)
       判定指定名字的HTTP消息首部是否存在并返回布尔值。
   (4)sendError(int sc)
       向客户端发送错误信息,例如505:服务器内部错误;404:网页找不到的错误。
       例如:Response.sendError(Response.SC_NO_CONTENT)
   (5)setHeader(String name.String value)
       设定指定名字的HTTP消息首部的值,如果该值存在,那么它会被新值覆盖。
  3.out
     out是"PrintWriter"类型的对象,这一对象在Servlet中被经常使用,例如:
       <% out.println ("Hello");%>
       <% String name = request.getParameter("name");
       out.println (name);%>
    "out"对象主要有以下方法:
         out.print(boolean),out.print(char),out.print(char[]),outprint(double),outprint(float),
         outprint(int),outprint(long),outprint(Object),outprint(String),outprint()         
    上述方法全部用于输出各种类型的数据。其中,outprint(parameter) 与outprint(parameter)的区别是print()方法在输出完毕后,并不结束该行,但是println()方法在输出完毕后,会结束当前行,下一个输出语句将在下一行开始输出。
    其它的重要方法有:
    (1)out.newLine():newLine()将输出一个换行符号。
    (2)out.flush ():输出缓冲区里的数据。
    (3)out.close():关闭输出流。
    (4)out.clearBuffer():清除缓冲区的数据,并且把数据写到客户端去。
    (5)out.clear():清除缓冲区里的数据,但不把数据写到客户端去。
    (6)out.getBufferSize():获得缓冲区的大小,缓冲区的大小可以用%@page buffer = "size"%设置。
    (7)out.getRemaining():获得缓冲区没有使用的空间的大小。
    (8)out.isAutoFlush():返回布尔值,如果Auto Flash 那么返回true,反之返回false。是否Auto Flash,可以用%@page is AutoFlash="true/false"%设置。
  4.session
    sessions是HttpSession对象,它用来为用户的每次会话保存信息。不同的用户所对应的session对象一般来说是不同的,当用户登录网站,系统为用户建立一个唯一标识的session保存该用户的个人信息,一旦该用户退出网站,那么该session对象将会被注销。
    session对象的主要方法如下所示:
    (1)getAttribute (String name)
        获得名为name的属性,如果该属性不存在,将会返回null。
    (2)getAttributeNames()
        返回session对象中存储的每一个属性对象,结果集是一个Enumeration类的实例。
    (3)getCreationTime()
        返回该session对象创建的时间,以毫秒计算,从2003年1月1日开始。
    (4)getId()
        每建立一个seesion对象,服务器都会给它一个标识,该标识不会重复,此方法就返回当前Session的标识。
    (5)getLastAccessedTime()
        返回当前session对象最后一次被访问的时间,获得自1970年1月1日至今的毫秒数。
    (6)getMaxInactiveInterval()
        获取session对象的生存时间。
    (7)removeAttribute (String name)
        删除指定的属性(包括属性名、属性值)。
    (8)setAttrubute (String name, java.lang.Object value)
        设定指定属性名的属性值,并且把它存储在session对象中。
   例5-15 JSP利用内置对象senssion访问session有关属性、方法。

    在例5-15程序中两次调用getMaxInactiveInerval方法,第一次显示session默认的最大持续时间,这个时间通常由服务器决定,但是可以修改它,所以程序首先显示服务器决定的session持续时间,然后把这个时间更改为10秒,并且再次显示session持续时间。
    第一次调用JSP程序的结果如图5-11所示,其Session的最大持续时间为1800秒即30分钟,然后被设置为10,但是只有再次刷新后,新的设置才会生效。
    session中的setAttribute()和getAttribute()可以用来在不同页面间交互信息。例5-15设置了一个UserName属性,首先读该属性的值(getAttribute()),第一次显示的属性值应该为null,然后再设置其值(setAttribute()),这个属性值在其他页面中可以访问。
    单击图5-11中按钮“保持会话”,它会启动JspSessionKeep.jsp程序,新的页面如图5-12所示。

    这时Session的持续时间修改为10秒,因此在10秒内刷新网页,仍然维持Session,即SessionID的值不变,并且SessionNew为false,但是10秒后刷新,ID值就改变了,并且SessionNew为true,这时Session持续时间又变成服务器指定的持续时间了,例如30分钟。
    例5-16-2 jspSessionKeep.jsp源程序如下:

    图5-12可以看到UserName的值在新的页中读和写。图中有两个按钮“终止当前会话”和“返回开始”。“返回开始”网页的内容就像第一次调用一样。
   “终止当前会话”按钮激发JspSessionInvalidate.jsp运行,刷新后的网页如图5-13所示。图中显示UserName的值变为null,并且每次刷新后,Session ID的值都会改变。

在JBuilder中运行整个工程<点击“在JBuilder中运行整个工程”,在出现的“文件下载”对话框中选择“打开(O)”按钮>

    例5-17 JspSessionInvalidate.jsp对应的JSP程序如下:

    例5-18 session对象应用。
    用三个页面模拟一个多页面的Web应用。第一个页面(Jsp1.jsp)仅包含一个要求输入用户名字的HTML表单,代码如下:
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <head><title>session应用1</title>
    </head>
    <form method = post action = "show.jsp">
    请输入您的姓名:
    <input type = text name = "yourname">
    <input type = submit value = "确定">
    <input type = reset value = "重试">
    </form>
    </body>
    </html>

   运行结果如图5-14所示,例如在文字框内输入“yin”,单击“确定”。

    例5-19 接例5-18第二个页面是一个JSP页面(show.jsp)。它通过request对象提取Jsp1.jsp表单中的yourname值,将它存储为name变量,然后将这个name值保存到session对象中。session对象是一个名字/值的集合,在这里,名字/值对中的名字为“username”,值即为name变量的值。由于session对象在会话期间是一直有效的,因此这里保存的变量对后继的页面也有效。show.jsp的另外一个任务是询问第二个问题,下面是它的代码。

    图5-15所示,这时看到了“您的姓名是:”已经显示在页面,同时又提出第二个问题“您的问题是什么”,这里填入“什么是对象?”,单击“确定”按钮出现图5-16。

    例5-20 接例5-19,第三个页面JSP页面(last.jsp),主要作用是显示问答结果。它从session对象读出username的值并显示它,以此证明虽然该值在第一个页面输入,但通过session对象得以保留。Last.jsp的另外一个任务是读出在第二个页面中的用户输入的“您的问题是什么?”,并显示它。

    运行结果是如图5-16所示,这时在页面上看到了“yin”,问题是“什么是对象?”和答案。

在JBuilder中运行整个工程<点击“在JBuilder中运行整个工程”,在出现的“文件下载”对话框中选择“打开(O)”按钮>

   5.application
    application对象一旦创建,application对象一直保持,除非服务器关闭。有些服务器还支持global.jsp文件,在global.jsp文件中完成application、session对象的构造和撤销工作。当服务器启动或者JSP程序创建了application,sesson对象的时候,服务器会自动执行该文件,并完成 application、session对象的初始化工作;在服务器关闭或者程序中删除了application、session对象的时候,服务器又会执行global.jsp文件,并完成 application、session对象的注销工作。 application对象的这些特性为多个Web Application中的多个用户之间共享信息提供了方便。
    application对象与sesison对象不同。application 对象用于在多个用户之间共享信息,每个用户的application对象都是相同的,每个用户都具有application对象的一个拷贝,但是,不同的用户所对应的Session对象一般来说是不同的。
    下面列出了application对象的方法()。
    (1)getAttribute (String name)
       返回由name 指定名字的Application对象属性的值,这是个Object对象。
    (2)getAttributeNames()
       返回所有Application对象属性的名字,结果集是一个Enumeration(枚举)类的实例。
    (3)getInitParameter(String name)
       返回Application某个属性的初始值,这个属性由name指定。
    (4)getServerInfo()
    (5)getAttibute (String name,Object object)
       getServletContext().setAttrubute("item",itemObject)
   例5-21 使用application对象共享属性(getAttribute),显示服务器版本。

   该例运行结果如图5-17所示。

在JBuilder中运行整个工程<点击“在JBuilder中运行整个工程”,在出现的“文件下载”对话框中选择“打开(O)”按钮>

   6.exception
     exception是Exception的对象,处理JSP文件在执行时所有发生的错误和异常。它提供了三个方法。只有异常发生(isErrorPage=true)的情况下才可以使用exception对象的。
     (1)getMessage()
         返回错误信息。
     (2)printStackTrace()
         以标准错误的形式输出错误和错误的堆栈。
     (3)toString()
         以字符串的形式返回一个对异常的描述。
    exception对象可以配合page指令一起使用,通过指定某一个页面为错误处理页面,把所有的错误都集中那个页面进行处理,可以使得整个系统的健壮性得到加强,也使得程序的流程更加简单明晰。

posted on 2007-05-25 16:59  一般一般  阅读(1223)  评论(0编辑  收藏  举报