java web編程學習5

上次學習了cookie,此次固然就學習session了。session和cookie很相像,都是爲了解決類似的問題存在的。不一樣在於,session存在於服務端,而cookie存在於客戶端。html

上個最簡單的demojava

package demo;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/session.do")
public class SessionServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		out.print("hello,session");
		HttpSession session = req.getSession();
		String name = (String) session.getAttribute("name");
		if(name == null) {
			out.print("<br/> no session data now");
			session.setAttribute("name", "tmac");
		}
		else {
			out.println("<br /> hello, " +name);
			session.invalidate();
		}
	}
}

這個demo實現的是當session中存在name的值,則顯示並銷燬,不存在則建立,因此瀏覽器顯示的就是兩種效果:web

image

image

咱們能夠用request的getSession方法獲得session,getSession重載了兩種方法,getSession()返回一個session,若是不存在則建立一個再返回。而getSession(boolean b)提供了一個選項,若是b==false,不存在session的話返回null。瀏覽器

session提供了getAttribute和setAttribute方法,咱們能夠獲取和存放須要的值。getAttribute返回的是object,這就意味着咱們不止能夠存放String的值。tomcat

session的invalidate方法能夠將session失效。setMaxInactiveInterval方法能夠設置session 的時間,若是在這段時間內瀏覽器都沒有發送請求的話,session就會自動失效。服務器

這裏就有一個問題,發送請求的瀏覽器有不少,服務器是如何分辨不一樣的瀏覽器來獲取特定的session呢?在tomcat中,使用session機制的時候,會在客戶端設置一個cookie:JSESSIONID,每次發送請求的時候將這個cookie一塊兒放入請求行中,這樣tomcat就經過這個id找到對應的session(session提供了getId()方法),這樣不一樣的瀏覽器就能獲取不一樣的session了。這樣的話也有個問題,cookie默認是在關閉瀏覽器則失效,那麼也就說關閉瀏覽器的話session一樣也失效,在開啓瀏覽器發送請求一樣會生成一個新的session。固然servlet也提供了設置的接口,咱們能夠本身設置cookie的存活時間。能夠再web.xml中進行設置session-config,也能夠實現servletcontextlistener。這個之後再進行學習。cookie

相關文章
相關標籤/搜索