JSP数据交互:内置对象session和include指令

什么是会话?

session一词的原义是指有始有终的一系列动作,在实际应用中通常翻译成会话。

会话机制是一种服务器端的机制,当用户向服务器发出第一次请求时,服务器会为该用户创建唯一的会话,会话将一直延续到用户访问结束。

session对象

作为JSP提供的内置对象之一,session对象允许用户访问会话的相关信息,以及绑定数据到会话(在服务器端使用类似于哈希表的结构来保存信息)。绑定到会话的数据可以在多次请求之间持续有效。

session对象的常用方法

JSP数据交互:内置对象session和include指令

会话的失效

会话也是有时效的,使会话失效的方式有两种。一种是会话超时,另一种是手动调用方法设置失效。

会话超时是指,两次请求的时间隔超过了服务器允许的最大时间间隔。会话的超时间隔可以通过三种方法设置。
(1)通过session对象的setMaxInactiveInterval()方法设置,代码段如下。
<%
session.setAttribute("login","admin");
//参数600的单位是秒,表示在10分钟后session对象失效
session.  setMaxInactiveInterval(600);
response. sendRedirect("admin. jsp");
%>
(2)在项目的web.xml中设置代码段如下。
<session-config>
<session- timeout> 10</session-timeout>
</session-config>
单位是分钟。设置为0或负数,表示永不超时。
(3)在应用服务器中设置,在Tomcat目录/cont/web xml中找到Ssession-config>元素,其中<session- timeout>元素中的30就是默认的时间,单位是分钟,可以修改其值。
手动调用方法设置失效是通过调用session对象的invalidatel )方法实现的,主要应用于用户注销的场合。但如果只想清空会话中绑定的某个数据对象。则可以调用session.removeAttribute(String key)方法,将指定的对象从会话中清除,而会话仍然有效。
include指令
JSP提供了文件引用指令include。可以将一些共性的内容写入一个单独的文件中,然后通过include指令引用,从而降低代码的冗余,并且修改也更加方便。
示例:
index.jsp部分代码:
<form action="indexJsp.jsp" method="post">
                     用户名:<input type="text" name="name">
                         密码:<input type="password" name="pwd"> 
     <input type="submit" value="确定">

     </form>

User封装类代码:

package cn.bdqn.lq;
import java.io.Serializable;


public class User implements Serializable{
private int uid;
private String uname;
private String upwd;

public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
}

indexJsp.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page  import="cn.bdqn.lq.User"%>
 <%
  request.setCharacterEncoding("UTF-8");
    String name= request.getParameter("name");
    String pwd = request.getParameter("pwd");
    if("lucky".equals(name)&&"123456".equals(pwd)){
        User user =new User();
        user.setUname(name);
        user.setUpwd(pwd);
        //把对象存到session里面
        session.setAttribute("user", user);        
    }       
    if(session.getAttribute("user")!=null){
       //正常进入    
       request.getRequestDispatcher("NewJsp.jsp").forward(request, response);   //转发
    }else{
       //拼接
       response.sendRedirect("index.jsp");//重定向 
    }

 %>

NewJsp.jsp代码:

<%@page import="cn.bdqn.lq.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ include file="newsJsp.jsp" %>
<%
if(session.getAttribute("user")==null){
response.sendRedirect("index.jsp");
}else{
    User user=(User)session.getAttribute("user");
    out.print(user.getUname()+user.getUpwd());
   }

 %>

newsJsp.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <body>
    <h4>玲珑骰子安红豆,入骨相思知不知!</h4>
  </body>
</html>

实现效果图:

JSP数据交互:内置对象session和include指令

JSP数据交互:内置对象session和include指令