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>
實現效果圖: