1. 程式人生 > >JSP資料互動:內建物件session和include指令

JSP資料互動:內建物件session和include指令

什麼是會話?

session一詞的原義是指有始有終的一系列動作,在實際應用中通常翻譯成會話。

會話機制是一種伺服器端的機制,當用戶向伺服器發出第一次請求時,伺服器會為該使用者建立唯一的會話,會話將一直延續到使用者訪問結束。

session物件

作為JSP提供的內建物件之一,session物件允許使用者訪問會話的相關資訊,以及繫結資料到會話(在伺服器端使用類似於雜湊表的結構來儲存資訊)。繫結到會話的資料可以在多次請求之間持續有效。

session物件的常用方法


會話的失效

會話也是有時效的,使會話失效的方式有兩種。一種是會話超時,另一種是手動呼叫方法設定失效。

會話超時是指,兩次請求的時間隔超過了伺服器允許的最大時間間隔。會話的超時間隔可以通過三種方法設定。
(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>

實現效果圖: