与Java类似,JSP也要使用内部对象。这些内部对象无须我们亲自创建,它们是JSP页面系统中已经默认设置的java对象,它们无须显式声明,在编写JSP代码时,可以直接在java程序片和表达式中使用。JSP提供了多种预先定义的内部对象,如request、 response 、pageContext 、 session、 application、out、config、exception等。JSP内部对象的方法实际上都源于Servlet API包中提供的各种类的成员方法。Servlet API包主要包括javax.servlet、 javax.servlet.http、 javax.servlet.jsp等。
内部对象的作用范围是指内部对象实例在多长时间和多大范围内可以被有效访问,即生存时间和范围。在JSP中有4种作用范围:
(1) application scope:指从服务器运行到服务器关闭的范围,如application对象。任何页面和对象都可以访问该对象。
(2) session scope:指客户端和服务器会话开始到结束之间的时间,如session对象,在同一个session实例中的页面或对象都可以访问该session 。
(3 ) request scope:指一个“请求”到“响应”完成之间的时间,如request,它允许在不同页面之间传递数据。
(4) page scope:是最小的作用范围,只在当前页面时间内有效。
5.1 request对象
HTTP通信协议是用户与服务器之间一种提交(请求)信息与响应信息(request/response)的通信协议。在JSP中,内置对象request封装了用户提交的信息,那么该对象调用相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。
用户通常使用HTML表单向服务器的某个JSP页面提交信息,表单的一般格式是:
JSP页面可以让request对象使用getParameter (String s)方法获取表单提交的信息。下面是一个获取用户提交信息的示例。
t1.jsp页面代码如下:
t2.jsp页面代码如下:
该对象的常用方法如下所示:
(1) String getParameter( String name) :返回name指定参数的参数值。
(2) String[ ] getParameterValues( String name):返回包含参数name的所有值的数组。
(3) void setAttribute ( String, Object):存储此请求中的属性。
(4) Object getAttribute ( String name):返回指定属性的属性值。
(5 ) String getContentType ( ):得到请求体的MIME类型。
(6) String getProtocol ( ):返回请求用的协议类型及版本号。
(7) String getServerName ( ):返回接受请求的服务器主机名。
(8) int getServerPort ( ):返回服务器接受此请求所用的端口号。
(9) String getCharacterEncoding( ):返回字符编码方式。
(10) void setCharacterEncoding ( ):设置请求的字符编码方式。
(11) int getContentLength ( ):返回请求体的长度(以字节数)。
(12) String getRemoteAddr( ):返回发送此请求的客户端IP地址。
(13 ) String getRealPath ( String path):返回一虚拟路径的真实路径。
(14) String request.getContextPath ( ):返回上下文路径。
我们需要特别注意,在处理中文数据时,一般使用以下两种方式避免request对象获取的信息出现乱码。
5.1.1 对信息重新编码
request将获取的信息重新编码,即用ISO-8859-1进行编码,并将编码存放到一个字节数组中,然后再将这个数组转化为字符串,如下所示:
5.1.2 request设置编码
request在获取信息之前使用setCharacterEncoding方法设置自己的编码为gb2412:
5.2 response对象
当用户访问一个服务器的页面时,会提交一个HTTP请求,服务器收到请求时,返回HTTP响应。响应和请求类似,也有某种结构,每个响应都由状态行开始,可以包含几个头及可能的信息体(网页的结果输出部分)。
与request对象相对应的对象是response对象。可以用response对象对用户的请求做出动态响应,向用户端发送数据。比如,当一个用户请求访问一个JSP页面时,该页面用page指令设置页面的contentType属性的值是text/html,那么JSP引擎将按着这种属性值响应用户对页面的请求,将页面的静态部分返回给用户,用户浏览器接收到该响应就会使用HTML解释器解释执行所收到的信息。下面是一个用户重定向的示例。
t1.jsp页面代码如下:
t2.jsp页面代码如下:
该对象的常用方法如下所示:
(1) void addCookie (Cookie cookie):添加指定的cookie到响应对象。
(2) void addDateHeader( String name, long date):添加指定的name和long类型值到标题头。(www.xing528.com)
(3 ) void addHeader( String name, String value):添加指定的name和String类型值到标题头。
(4) void addIntHeader( String name, int value):添加指定的name和int类型值到标题头。
(5) void setDateHeader( String name, long date):使用指定的name和long类型值设置标题头。
(6) void setHeader ( String name, String value):使用指定的name和String类型值设置标题头。
(7) void setIntHeader( String name, int value):使用指定的name和int类型值设置标题头。
(8) void sendError ( int sc ):向客户端发送定义的状态码。
(9) void sendError ( int sc, string msg):向客户端发送定义的状态码和错误信息。
(10) void setStatus ( int sc ):设置响应的状态码。
(11) String encodeURL( String url):重写指定的URL,包含session ID。
(12) String encodeRedirectURL( String url ):对使用send Redirect ( )方法的URL重写。
5.3 session对象
session对象封装了属于客户会话的所有信息。session对象也是一个JSP内置对象,在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
session对象的Id是指当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个字符类型的Id号,JSP引擎同时将这个Id号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。
当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端将该客户的session对象取消,服务器与该客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。同一个客户在同一个web服务目录中的session对象是相同的,在不同的web服务目录中的session对象是不同的。
Session对象的生命周期指从客户session对象创建到销毁的整个过程,它决定于三个因素:客户是否关闭浏览器,session对象是否调用invalidate ()方法,session对象是否到了最长“发呆状态”时间。三个因素中有一个发生,客户的session对象就会消失。
该对象的常用方法如下所示:
(1) String getld ( ):获取sessionid。
(2) void setMaxlnactivelnterval (int interval):设定session的非活动时间。
(3) int getMaxlnactivelnterval ( ):获取session的有效非活动时间(以秒为单位)。
(4) void invalidate ( ):设置session对象失效。
(5) void setAttribute ( String key, object value):以key/value的形式保存对象值。
(6) object getAttribute (String key):通过key获取对象值。
(7) void removeAttribute ( String key):从session中删除指定名称(key)所对应的对象。
5.4 application对象
application对象提供了对javax.servlet.ServletContext对象的访问,用于多个程序或者多个用户之间共享数据。
服务器启动后就产生了这个application对象。当客户在所访问网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
(1) getAttribute( String arg):获取application对象中含有关键字的对象。
(2) getAttributeNames ( ):获取application对象的所有参数名字。
(3) getMajorVersion ( ):获取服务器支持Servlet的主版本号。
(4) getMinorVersion ( ):获取服务器支持Servlet的从版本号。
(5) removeAttribute (java.lang.String name):根据名字删除application对象的参数。
(6) setAttribute ( String key, Object obj ):将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。
5.5 out对象
out是专门为向客户端输出而设计的,out变量是从PageContext对象初始化而获得的,out对象的作用域是page 。
(1) void println ( ):向客户端打印字符串。
(2) void flush( ):将缓冲区内容输出到客户端。
(3) void clear( ):清除缓冲区,在flush ()方法之后调用会抛出异常。
(4) void clearBuffer( ):清除缓冲区,在flush ()之后调用不会抛出异常。
(5) int getBufferSize ( ):返回缓冲区字节数大小。
(6) int getRemaining( ):返回缓冲区剩余可用字节数,如果不设缓冲区时则返回0。
(7) boolean isAutoFlush ( ):当缓冲区已满时,是自动清空还是抛出异常。
习题
1.简述内置对象request对象和response对象的作用。
2.简述session对象和application对象的区别。
3.编写jsp页面,显示日历,效果如图2-37所示。
图2-37
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。