接着上篇继续讲JSP的9大对象。
C、out对象
out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response和request对象中写入内容。最初的JspWriter类对象根据页面是否有缓存(缓存区使用来保存临时数据的)来进行不同的实例化操作。可以在page指令中使用buffered='false'属性来轻松关闭缓存。JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法。还有就是,JspWriter类会抛出IOExceptions异常,而PrintWriter不会。
下表列出了我们将会用来输出boolean,char,int,double,String,object等类型数据的重要方法:
方法
描述
out.print(dataType dt)
输出Type类型的值
out.println(dataType dt)
输出Type类型的值然后换行
out.flush()
刷新输出流
Out对象常用方法:
· void println()向客户端打印字符
· void clear()清除缓冲区的内容。如果在flush之后调用,会抛出异常
· void clearBuffer() 也是清除缓冲区内容,但在flush之后不会抛出异常
· void flush()将缓冲区内容输出到客户端
· int getBufferSize()返回缓冲区的大小(字节数),如不设缓冲区则为0
· int getRemaining()返回缓冲区还剩余多少可用
· boolean isAutoFlush()返回缓冲区满时,是否自动清空缓冲区
· void close()关闭输出流
代码如下:
<% String str=”sdjsds”; out.println(str); %>
D、session对象
每个用户的一次会话代表就是一个session。Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。如下图所示:
session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。session对象用来跟踪在各个客户端请求间的会话。注意session会话是保存在服务器的内存中。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种途径知道这是一个客户,这就需要session对象。
1、session对象常用的方法:
long getCreationTime();返回session的创建时间
public String getId();返回session创建时jsp引擎为它设的唯一ID号
public Object setAttribute(String name,Object value);使用指定名称将对象绑定到此会话
public Object getAttribute(String name);返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null
String[] getValueNames();返回一个包含此session中所有可用属性的数组
int getMaxInactiveInterval();返回两次请求间隔多长时间此session被取消(单位秒)
int setMaxInactiveInterval();设置两次请求的间隔时长
2、session对象的生命周期
session的生命周期是从用户开始访问到关闭所有关于session的浏览界面与服务器断开连接的这段时间。
session一般有时间限制(半个小时),长时间不操作可能会导致session失效。session失效后原session中保存的属性值会全部丢失。
setMaxInactiveInterval(int)可以设置session存活的最长时间,在时间过了之后,服务器会创建全新的一个session。前面的session对象将会消失。
a、Session的销毁有三种方式
1.调用了session.invalidate();
2.session过期
3.服务器重启
b、如何设值session的时间:
Tomcat服务器中session 超时时间为30分钟。我们设置设置超时时间的方式如下:
1.session.setMaxInactiveInterval(30*60); 单位是秒
2.在web.xml配置
<session-config>
<session-timeout>
30
</session-timeout>
</session-config> 单位是分钟
实例代码1:
session_page1.jsp
<%@ page import="java.text.*" %> <body> <h1>Session内置对象</h1> <% SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//定义日期格式对象 Date d=new Date(session.getCreationTime()); session.setAttribute("username", "admin"); session.setAttribute("password", "123456"); session.setAttribute("age", "23"); %> 创建session的时间:<%=sdf.format(d) %><br> session的用户ID:<%=session.getId() %><br> session的用户名:<%=session.getAttribute("username") %><br> <% //设置session的最长时间 session.setMaxInactiveInterval(10);//10秒钟 %> <a href="session_page2.jsp" target="_blank">跳转到session_page2.jsp</a> </body>
结果显示:(注意我们将session的存活时间设为了10秒)
此时在tomcat的manager管理中可以看到session ID:
10秒钟之后刷新Tomcat manager页面再来看看session ID:
说明session 已经被销毁了。
代码实例2:
<pre name="code" class="html"><body> <h1>Session内置对象</h1> <% //SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); // Date d=new Date(session.getCreationTime()); // session.setAttribute("username", "admin"); %> session的用户ID:<%=session.getId() %><br> session的用户名:<%=session.getAttribute("username") %><br> session的属性有:<% if(session.getValueNames()!=null){ String[] str=session.getValueNames(); for(String s:str){ out.print(s+" "); } } %> </body>
结果显示:
首先执行session_page1.jsp。
单击超链接
同一个会话不管有几个页面,session ID是不变的。10秒中之后session又被销毁了。我们打开Tomcat manager页面再来看看session ID。