Servlet (4)

1. ¿Por qué necesita el seguimiento de sesiones?
Inserte la descripción de la imagen aquí

Usa la solicitud http enviada por el navegador. La solicitud http usa el protocolo http y el protocolo http es un protocolo sin estado. No registrará activamente quién es el usuario que usa el protocolo http. Una vez que la solicitud se envía correctamente, el servidor make Después de la respuesta, el vínculo entre el navegador y el servidor desaparecerá en este momento, y el servidor no sabrá de dónde viene la solicitud y quién la envió. Entonces, en este momento necesitamos registrar / guardar el estado de la solicitud / enlace. El proceso de realizar este registro / guardar solicitud / estado de enlace se llama seguimiento de sesión.
2. ¿Qué es el seguimiento de sesiones?
El proceso por el cual el administrador del servidor realiza el registro / guardado del estado de la solicitud / enlace se denomina seguimiento de sesión.
3. ¿Cuáles son las cuatro tecnologías de seguimiento de sesiones y sus respectivas ventajas y desventajas?
1. Reescritura de URL: reescriba la información de identificación de la sesión del usuario en la dirección URL para identificar diferentes usuarios en el lado del servidor.
https://blog.csdn.net/qq_33098039/article/details/78184535?sessionid=123456 La
reescritura de URL aún puede funcionar cuando el cliente deshabilita las cookies o no admite cookies .
2. Ocultar el campo del formulario: agregue la información de ID de la sesión del usuario al elemento del formulario HTML **** y envíelo al servidor. Este elemento del formulario no se muestra en el lado del cliente y no se puede ver al navegar. incluido en el código fuente.
3. Cookie: Una cookie es una pequeña información enviada por el servidor Web al cliente, cuando el cliente lo solicita, la información puede ser leída y enviada al servidor para la identificación del usuario. El servidor se crea y guarda en el lado del navegador, no puede cruzar nombres de dominio y está limitado en tamaño y cantidad.El cliente puede guardar este objeto Cookie de dos formas: una es guardarlo en la memoria del cliente, llamada cookie temporal, que desaparecerá una vez que se cierre el navegador. Otra forma es guardarlo en el disco del cliente, llamado cookie permanente. En el futuro, mientras el cliente visite el sitio web, la cookie se enviará nuevamente al servidor, siempre que la cookie esté dentro del período de validez. De esta forma se realiza el seguimiento de los clientes . Las cookies se pueden prohibir .
4. Sesión: Cada usuario tiene una sesión diferente, que no se puede compartir entre usuarios, es exclusiva de cada usuario, la información se puede almacenar en la sesión. Guárdelo en el lado del servidor. Necesita resolver el problema de compartir entre varios servidores. Si el contenido de la sesión es demasiado complejo, puede provocar un desbordamiento de la memoria cuando una gran cantidad de clientes acceden al servidor. Por lo tanto, la información de la sesión debe ser lo más concisa posible.
La sesión se basa en la cookie. Si la cookie está desactivada, la sesión también será inválida.
Cuando el usuario envía una solicitud http al servidor por primera vez, el servidor creará un objeto de sesión, generará un ID de sesión para identificar el objeto de sesión y luego colocará el ID de sesión en la cookie y lo enviará al cliente. La próxima vez la solicitud http se envía al servidor, la solicitud Http se enviará al servidor junto con el ID de sesión obtenido por primera vez, y los diferentes usuarios se identificarán en el lado del servidor.

Inserte la descripción de la imagen aquí

El proceso de seguimiento de sesión anterior es similar al proceso de almacenar artículos en las taquillas en la entrada del supermercado cuando vamos al supermercado.
4. ¿Cuál es la diferencia entre Sesión y Cookie?
Inserte la descripción de la imagen aquí

5. Métodos comunes
de la interfaz HttpSession HttpSession en Servlet
1. Obtenga el objeto de la interfaz HttpSession a través del método getSession () del
objeto HttpServletRequest 2. Métodos comunes del objeto de la interfaz HttpSession
Inserte la descripción de la imagen aquí

Por ejemplo: la operación de inicio de sesión usa el objeto HttpSession

package com.wangxing.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 创建登陆页面的Servet
 * @author Administrator
 *
 */
public class LoginServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置请求的字符编码
		req.setCharacterEncoding("utf-8");
		//设置响应的字符编码
		resp.setCharacterEncoding("utf-8");
		//得到输出流对象
		PrintWriter out=resp.getWriter();
		//输出一个登陆页面
		//out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset=\"utf-8\">");
		out.println("<title>登陆</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<center>");
		//得到session对象
		//1.通过HttpServletRequest对象的getSession()方法得到HttpSession接口对象
		HttpSession session=req.getSession();
		//输入session的基本信息
		showSessionInfo(out,session);
		//得到错误提示信息
		Object obj=session.getAttribute("errortip");
		if(obj!=null){
			String errortip=(String)obj;
			out.println("<font color=\"red\">"+errortip+"</font>");
		}
		out.println("<form action=\"cheack\" method=\"post\">");
		out.println("用户名:<input name=\"username\" type=\"text\"><br>");
		out.println("密码:<input name=\"password\" type=\"password\"><br>");
		out.println("<input type=\"submit\"  value=\"登陆\"/>");
		out.println("</form>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
     /**
      * 输入session的基本信息
      * @param out
      * @param session
      */
	private void showSessionInfo(PrintWriter out, HttpSession session) {
		//得到session的基本信息
		//得到sessionID
		String sessionid=session.getId();
		//创建时间日期格式化对象
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
		//得到session对象的创建时间[毫秒]
		String createtime=sdf.format(new Date(session.getCreationTime()));
		//得到session的最后访问时间[毫秒]
		String lastAccesse=sdf.format(new Date(session.getLastAccessedTime()));
		//得到session的最大不活动时间[秒]
		int maxtime=session.getMaxInactiveInterval();
		//session对象是否是一个新的session对象
		boolean sessionnew=session.isNew();
		out.println("<table border=\"1px\">");
		out.println("<tr>");
		out.println("<td>sessionID</td>");
		out.println("<td>"+sessionid+"</td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>session对象的创建时间</td>");
		out.println("<td>"+createtime+"</td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>session的最后访问时间[毫秒]</td>");
		out.println("<td>"+lastAccesse+"</td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>session的最大不活动时间[秒]</td>");
		out.println("<td>"+maxtime+"</td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>是否是一个新的session对象</td>");
		out.println("<td>"+sessionnew+"</td>");
		out.println("</tr>");
		out.println("</table>");
	}
}
package com.wangxing.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 创建验证用户名和密码的Servlet
 * @author Administrator
 *
 */
public class CheackServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置请求的字符编码
		req.setCharacterEncoding("utf-8");
		//设置响应的字符编码
		resp.setCharacterEncoding("utf-8");
		//得到用户名和密码
		String username=req.getParameter("username");
		String password=req.getParameter("password");
		//判断用户名和密码
		if(username.equals("zhangsan") && password.equals("123456")){
			//跳转到成功页面
			//封装用户名
			req.setAttribute("username", username);
			//请求转发
			req.getRequestDispatcher("/success").forward(req, resp);
		}else{
			//封装错误提示信息跳转到登陆页面
			//通过HttpSession对象封装数据
			//setAttribute用于向创建的session对象中保存数据
			req.getSession().setAttribute("errortip", "用户名密码不匹配");
			resp.sendRedirect("login");
		}
	}
}
package com.wangxing.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 创建登陆成功页面的Servet
 * @author Administrator
 *
 */
public class SuccessServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//从request中的得到username
		Object  obj=req.getAttribute("username");
		String username="";
		if(obj==null){
			resp.sendRedirect("login");
		}else{
			username=(String)obj;
		}
		//设置请求的字符编码
		req.setCharacterEncoding("utf-8");
		//设置响应的字符编码
		resp.setCharacterEncoding("utf-8");
		//得到输出流对象
		PrintWriter out=resp.getWriter();
		//输出一个登陆页面
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset=\"utf-8\">");
		out.println("<title>登陆</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<h1>"+username+",登陆成功!!!</h1>");
		out.println("<a href=\"logout\">安全退出</a>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}
package com.wangxing.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 退出的Servlet
 * @author Administrator
 *
 */
public class LogOutServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置请求的字符编码
		req.setCharacterEncoding("utf-8");
		//设置响应的字符编码
		resp.setCharacterEncoding("utf-8");
		//销毁session对象
		req.getSession().invalidate();
		resp.sendRedirect("login");
	}
}

4. ¿Cuál es la diferencia entre Obtener y Publicar?
Inserte la descripción de la imagen aquí

5.
Página web de procesamiento confuso en chino ----
Eclipse — ventana—> preferencias—> General ----> espacio de trabajo ----> Codificación de archivos de texto
Tomcat: codificación de caracteres predeterminada "iso8859-1"
servidor / directorio conf / servidor archivo .xml

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"  URIEncoding="UTF-8"/>

1. La página china enviada al controlador de servlet está distorsionada.
Método de envío posterior request.setCharacterEncoding ("utf-8");
método GET String name = new String (name.getBytes ("iso8859-1"), "utf-8 ");
2. La salida en chino del controlador de servlet a la página es confusa
response.setCharacterEncoding (" utf-8 "); response.setHeader (" Content-Type "," text / html; charset = utf-8 ") ;

Supongo que te gusta

Origin blog.csdn.net/guoguo0717/article/details/109124528
Recomendado
Clasificación