Latest web development tutorials

Servlet sessione di monitoraggio

HTTP è un protocollo "senza stato", il che significa che ogni volta che il client recupera le pagine, il client apre una connessione separata al server Web, il server non registra automaticamente prima che le richieste dei client sono riservati.

Ma ci sono ancora tre modi per mantenere la conversazione sessione tra il client Web e il server Web:

biscotti

Un server Web può essere assegnato un ID di sessione univoco come la sessione per ogni cookie client Web, le richieste successive per il cliente possono essere utilizzati per identificare il cookie ricevuto.

Questo non può essere un metodo efficace, perché molti browser non supportano biscotto, quindi si consiglia di non utilizzare questo modo per mantenere la sessione sessione.

campi del modulo nascosti

Un server Web può inviare un nascosti i campi del modulo HTML, così come un unico ID sessione sessione, come segue:

<Input type = "hidden" name = valore "sessionid" = "12345">

Questa voce significa che quando il modulo viene inviato, il nome e il valore specificato verranno inclusi automaticamente nei dati GET o POST. Ogni volta quando il browser Web invia di nuovo la richiesta, il valore session_id può essere utilizzato per mantenere diversa tracciamento del browser Web.

Questo può essere un modo efficace per mantenere il monitoraggio sessione sessione, ma fare clic sul collegamento ipertestuale convenzionale (<A HREF...>) non porta ad un invio di un modulo, in modo che i campi del modulo nascosti non supportano regolare monitoraggio sessione sessione.

URL Rewriting

È possibile aggiungere alcuni dati in più su ogni fine dell'URL per identificare la sessione sessione identificativo sessione sessione ed i dati memorizzati su di sessione sessione associata server di volontà.

Ad esempio, http: //w3cschool.cc/file.htm; sessionid = 12345, identificativo sessione sessione è fissata come sessionid = 12345, un identificatore è possibile accedere al server Web per identificare il client.

riscrittura degli URL è un modo migliore per mantenere la sessione sessione, può funzionare molto bene quando il browser non supporta biscotto, ma il suo svantaggio viene generata dinamicamente per ogni URL per assegnare un ID di sessione per la pagina di sessione, anche se è molto semplice pagine HTML statiche saranno, troppo.

oggetti HttpSession

In aggiunta a quanto sopra tre modi, Servlet fornisce anche l'interfaccia HttpSession, che fornisce all'utente di identificare e memorizzare le informazioni sull'utente quando una richiesta più di una pagina croce o visitare maniera.

servlet container per utilizzare questa interfaccia per creare una conversazione sessione tra un client HTTP e server HTTP. Sessione dura un determinato periodo di tempo, tra più richieste di pagine o connessioni.

Si arriva ad ottenere HttpSession oggetto chiamando il HttpServletRequest Metodo pubblicogetSession (), come segue:

HttpSession session = request.getSession ();

È necessario prima di inviare qualsiasi contenuto documento al client chiamarequest.getSession ().Ecco una sintesi di vari metodi importanti oggetti HttpSession sono disponibili:

序号方法 & 描述
1public Object getAttribute(String name)
该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。
2public Enumeration getAttributeNames()
该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。
3public long getCreationTime()
该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
4public String getId()
该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。
5public long getLastAccessedTime()
该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
6public int getMaxInactiveInterval()
该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。
7public void invalidate()
该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
8public boolean isNew()
如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。
9public void removeAttribute(String name)
该方法将从该 session 会话移除指定名称的对象。
10public void setAttribute(String name, Object value)
该方法使用指定的名称绑定一个对象到该 session 会话。
11public void setMaxInactiveInterval(int interval)
该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。

Esempi sessione di monitoraggio

Questo esempio mostra come utilizzare l'oggetto HttpSession per ottenere sessione sessione ora di creazione e ora di accesso. Se non c'è sessione sessione, creeremo una nuova sessione da richieste di sessione.

package com.w3big.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

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;

/**
 * Servlet implementation class SessionTrack
 */
@WebServlet("/SessionTrack")
public class SessionTrack extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// 如果不存在 session 会话,则创建一个 session 对象
		HttpSession session = request.getSession(true);
		// 获取 session 创建时间
		Date createTime = new Date(session.getCreationTime());
		// 获取该网页的最后一次访问时间
		Date lastAccessTime = new Date(session.getLastAccessedTime());
		 
	    //设置日期输出的格式  
	    SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
	
		String title = "Servlet Session 实例 - 本教程";
		Integer visitCount = new Integer(0);
		String visitCountKey = new String("visitCount");
		String userIDKey = new String("userID");
		String userID = new String("w3big");
	
		// 检查网页上是否有新的访问者
		if (session.isNew()){
			title = "Servlet Session 实例 - 本教程";
		 	session.setAttribute(userIDKey, userID);
		} else {
		 	visitCount = (Integer)session.getAttribute(visitCountKey);
		 	visitCount = visitCount + 1;
		 	userID = (String)session.getAttribute(userIDKey);
		}
		session.setAttribute(visitCountKey,  visitCount);
	
		// 设置响应内容类型
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
	
		String docType = "<!DOCTYPE html>\n";
		out.println(docType +
		        "<html>\n" +
		        "<head><title>" + title + "</title></head>\n" +
		        "<body bgcolor=\"#f0f0f0\">\n" +
		        "<h1 align=\"center\">" + title + "</h1>\n" +
		         "<h2 align=\"center\">Session 信息</h2>\n" +
		        "<table border=\"1\" align=\"center\">\n" +
		        "<tr bgcolor=\"#949494\">\n" +
		        "  <th>Session 信息</th><th>值</th></tr>\n" +
		        "<tr>\n" +
		        "  <td>id</td>\n" +
		        "  <td>" + session.getId() + "</td></tr>\n" +
		        "<tr>\n" +
		        "  <td>创建时间</td>\n" +
		        "  <td>" +  df.format(createTime) + 
		        "  </td></tr>\n" +
		        "<tr>\n" +
		        "  <td>最后访问时间</td>\n" +
		        "  <td>" + df.format(lastAccessTime) + 
		        "  </td></tr>\n" +
		        "<tr>\n" +
		        "  <td>用户 ID</td>\n" +
		        "  <td>" + userID + 
		        "  </td></tr>\n" +
		        "<tr>\n" +
		        "  <td>访问统计:</td>\n" +
		        "  <td>" + visitCount + "</td></tr>\n" +
		        "</table>\n" +
		        "</body></html>"); 
	}
}

Compilare il precedenteServlet SessionTrack, e creare la voce appropriata nel file web.xml.

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet> 
    <!-- 类名 -->  
    <servlet-name>SessionTrack</servlet-name>
    <!-- 所在的包 -->
    <servlet-class>com.w3big.test.SessionTrack</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SessionTrack</servlet-name>
    <!-- 访问的网址 -->
    <url-pattern>/TomcatTest/SessionTrack</url-pattern>
  </servlet-mapping>
</web-app>

Nella barra degli indirizzi del browser, digitarehttp: // localhost: 8080 / TomcatTest/ SessionTrack, la prima volta che esegue lo spettacolo i seguenti risultati:

Provare a eseguire nuovamente lo stesso Servlet, mostrerà i seguenti risultati:


Eliminare Sessione dati di sessione

Una volta terminata una sessione di dati utente della sessione, sono disponibili le seguenti opzioni:

  • Rimuovere un attributo specifico: è possibile chiamare il metodoremoveAttribute public void (String nome)per rimuovere un valore specifico associato con una chiave.
  • Eliminare l'intera sessione sessione: è possibile chiamare il metodoinvalidate public void ()per eliminare l'intera sessione sessione.
  • Sessione set sessione di scadenza: È possibile chiamare il metodopublic void setMaxInactiveInterval (intervallo di int)per impostare un timeout di sessione sessione separata.
  • Gli utenti Esci: Se siutilizza un server servlet 2.4 supportato, è possibile chiamare illogoutper disconnettersi client Web server, e tutti gli utenti appartenenti a tutte le sessione sessione come non valido.
  • Configurazione web.xml: Se si utilizza Tomcat, oltre ai metodi di cui sopra, è possibile configurare il timeout sessione sessione nel file web.xml, come segue:
  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

Esempi di tempo sopra-out è a pochi minuti, Tomcat sarà ignorare l'impostazione predefinita di timeout di 30 minuti.

getMaxInactiveInterval in una Servlet di metodo () restituisce la sessione sessione timeout, in secondi. Quindi, se timeout di sessione configurato nel tempo della sessione web.xml di 15 minuti, quindi getMaxInactiveInterval () restituirà 900.