JSP学习笔记四之out和session对象

接着上篇继续讲JSP的9大对象。

C、out对象

out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在responserequest对象中写入内容。最初的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。


猜你喜欢

转载自blog.csdn.net/LULEI1217/article/details/50755540