1. 程式人生 > >javaweb之Session簡單例子(兩個頁面一個存資料,一個取資料)和session的一些基本內容

javaweb之Session簡單例子(兩個頁面一個存資料,一個取資料)和session的一些基本內容

package test.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//購買servlet
public class SessionDemo1 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		HttpSession session = request.getSession();
		String sessionId = session.getId();
		// 將回寫給瀏覽器的Cookie覆蓋,設定上有效期,那麼這個session也就有有效期了
		Cookie cookie = new Cookie("JSESSIONID", sessionId);
		cookie.setPath("/day07");
		// 設定有效期為30分鐘
		cookie.setMaxAge(60 * 30);
		response.addCookie(cookie);

		session.setAttribute("name", "洗衣機");

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
package test.session;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//結賬servelt
public class SessionDemo2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();

		HttpSession session = request.getSession();
		String product = (String) session.getAttribute("name");
		out.print("您購買的商品是:" + product);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
// 第一次執行getSession建立Session
// 關閉瀏覽器後sesson沒死,三十分鐘沒人用才死
// session也是伺服器中的web資源,session的配置要在web.xml中配置
/*
 * 配置session60分鐘沒人用摧毀 <session-config> <session-timeout>60</session-timeout>
 * </session-config>
 */
// 程式中摧毀session session.invalidate();
/*
 * request.getSession(false);不建立session,只獲取session,效能稍微高點,這個在購買的時候用,比如使用者購買用的request
 * .getSession();這個得到session
 * 但是到購物車檢視就不要重新建立session了,直接request.getSession(false);
 * ,如果用request.getSession();的話,使用者直接點購物車也會建立session
 */
// session是基於cookie的。伺服器為瀏覽器建立的session的id,會通過cookie回寫給瀏覽器,這個cookie是沒有設定有效期的,瀏覽器一關就失效了
// 設定session的有效期,就是設定回寫給瀏覽器的cookie的有效期。這個Cookie叫JSESSIONID
// 沒有設定有效期的時候開啟瀏覽器做一些session操作,然後重開一個瀏覽器 拿到的session是沒有原來的操作的
// 沒有設定有效期的session,也就是瀏覽器程序的session,在瀏覽器中新開選項卡和基於本瀏覽器開啟新的瀏覽器是一個視窗(根據不同瀏覽器而言是不同的IE7開啟兩個視窗session的id是不同的,IE8開啟兩個視窗session的id就相同)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  
  <body>
    <a href="/day07/servlet/SessionDemo1">購買</a>
    <a href="/day07/servlet/SessionDemo2">結賬</a>
  </body>
</html>