[Programación web] Experimento: aplicación de tecnología conversacional

1. Propósito del experimento

(1) Dominar las dos tecnologías de seguimiento de sesión de Cookie y sesión y su aplicación y diferencia.

(2) Dominar la aplicación y la diferencia entre Cookie y sesión.

2. Contenido experimental

(1) Diseñe una clase que utilice la tecnología de cookies para realizar la función de mostrar la hora de la última visita del usuario.

Los requisitos son los siguientes:

Cree una clase LastAccessServlet, haga que herede la clase HttpServlet y reescriba el método doGet() de esta clase.

En el método doGet(), use request.getCookies() para obtener la matriz de cookies formada por todas las cookies y recorrerla. Si el atributo lastAccess se encuentra en la información de la cookie durante el proceso transversal, se generará; de lo contrario, cree un objeto de cookie y establezca el valor en la hora actual y envíelo al cliente. El tiempo de supervivencia de la cookie es de 1 hora y todos los clientes de recursos que accedan a la aplicación actual devolverán la información de la cookie.

(2) Diseñe un programa que use la tecnología de sesión para realizar la función del carrito de compras.

3. Requisitos experimentales

(1) Objeto Cookie, dominar el uso del objeto Cookie

(2) Comprender qué es un objeto de sesión y dominar el uso del objeto de sesión

(3) Aprenda a usar el objeto Session para implementar el carrito de compras y las funciones de inicio de sesión del usuario

(4) Registre cuidadosamente el proceso de prueba y analice la causa del error

(5) Resumir los pasos de la operación

4. Pasos y resultados experimentales (incluido el código del programa y capturas de pantalla en ejecución)

(1) Diseñe una clase que utilice la tecnología de cookies para realizar la función de mostrar la hora de la última visita del usuario.

Los requisitos son los siguientes:

· Crea una clase LastAccessServlet, haz que herede la clase HttpServlet y reescribe el método doGet() de esta clase.

 · En el método doGet(), utilice request.getCookies() para obtener la matriz de cookies formada por todas las cookies y recorrerla.

Método y captura de pantalla del código:

paquete com.servlert;

importar javax.servlet.ServletException;
importar javax.servlet.http.Cookie;
importar javax.servlet.http.HttpServlet;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar java.io.IOException;

clase pública LastAccessServlet extiende HttpServlet {

     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         //编码req.setCharacterEncoding( "UTF-8" );         resp.setCharacterEncoding(
        
"UTF-8" );

        Cookie[] cookies=req.getCookies();
        for ( int i=0;i<cookies. length ;i++){
            System. out .println( "Cookie " +cookies[i]);
        }
    }

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

Capturas de pantalla del código y la salida de la consola:

 · Si el atributo lastAccess se encuentra en la información de la cookie durante el proceso transversal, se generará; de lo contrario, cree un objeto de cookie y establezca el valor en la hora actual y envíelo al cliente. El tiempo de supervivencia de la cookie es de 1 hora y todos los clientes de recursos que accedan a la aplicación actual devolverán la información de la cookie.

Código de implementación de clase:

paquete com.servlert;

importar javax.servlet.ServletException;
importar javax.servlet.http.Cookie;
importar javax.servlet.http.HttpServlet;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar java.io.IOException;
importar java.net.URLDecoder;
importar java.net.URLEncoder;
importar java.texto.SimpleDateFormat;
importar java.util.Date;

clase pública LastAccessServlet extiende HttpServlet {

     protected void doGet (HttpServletRequest req, HttpServletResponse resp)lanza ServletException, IOException {
         // Codificación req.setCharacterEncoding( "UTF-8" ); // Establezca el formato de codificación del contenido de salida del servidor en UTF-8 para evitar caracteres distorsionados resp.setContentType( "text/html;charset=utf -8" );        String lastAccessTime = null ; // Obtenga toda la información de las cookies , recorra Cookie[] cookies=req.getCookies(); for ( int i=0;i<cookies.length ; i++){ if ( "lastAccess " .equals (cookies[i].getName())) { // Si el nombre de la cookie es
        
        
        

        
        
        
            
                lastAccess, luego obtenga el valor de la cookie lastAccessTime = cookies[i].getValue(); System.out                 .println ( " lastAccess atributo: " +lastAccessTime); break ;            }        } // Calcular si hay una cookie llamada lastAccess if ( lastAccessTime == null ) {             resp.getWriter().print(Su primera visita a este sitio web! " );        } else {             resp.getWriter().print( " La última vez que visitó este sitio web es:  " + URLDecoder .
                

                


        
        



                    decode (lastAccessTime, "UTF-8" ));
        }
         // Crea una cookie y envía la hora actual como el valor de la cookie al cliente String currentTime = new SimpleDateFormat( "yyyy- MM-dd hh:mm:ss" )                . format ( new Date());        Cookie cookie = new Cookie( "lastAccess" ,                URLEncoder.encode(currentTime, "UTF-8" ));        cookie.setMaxAge(60*60); // Establecer la duración máxima de la cookie // Enviar
        





        cookie resp.addCookie(cookie);     } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         doGet(req,resp);     }}
        


    


Captura de pantalla del código:

 Ejecute la captura de pantalla:

 

 

(2) Diseñe un programa que use la tecnología de sesión para realizar la función del carrito de compras.

Ideas de diseño y pasos:

1. Cuando haga clic para agregar al carrito de compras, envíelo a un servlet . add2CartServlet
        necesita llevar el nombre del producto en el pasado. 2. La operación en add2CartServlet         obtiene el nombre del producto         y agrega el producto a la lista de compras. carrito La estructura del carrito de compras Map<String nombre, Integer cantidad de compra>             Coloque el carrito de compras en la sesión y         agregue el producto al carrito de compras Análisis:             obtenga el carrito de compras             para juzgar si el carrito de compras está vacío                 Si está vacío :                     Agregar por primera vez                     Cree un carrito de compras                     y coloque el producto actual en él. Cantidad: 1                     Pondrá el carrito de compras en la sesión                 si no está vacío: continúe evaluando si hay el producto en el carrito de compras                     En caso afirmativo:                         saque el conteo y agregue la cantidad + 1                         Vuelva a colocar el producto en el carrito de compras                     Si no:                         coloque el producto actual en Cantidad: 1
     



        














                    
        Información rápida: su xx se ha agregado al carrito de compras
    3. Cuando hace clic en la conexión del carrito de compras, cart.jsp
        obtiene el carrito de compras de la sesión
            para determinar si el carrito de compras está vacío
                Si está vacío: información rápida

                Si no está vacío: simplemente recorra el carrito de compras

Código de clase de implementación de servlet y captura de pantalla del código:

paquete com.servlert;

importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServlet;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar java.io.IOException;
importar java.io.PrintWriter;
importar java.util.HashMap;
importar java.util.Map;

/**
 *添加到购物车*/ public class Add2CartServlet extends HttpServlet { private static final long serialVersionUID =1L; vacío protegido
 

    

    doGet(Solicitud HttpServletRequest, respuesta HttpServletResponse) lanza ServletException, IOException {
        // Establecer codificación de respuesta.setContentType( "text/html; charset=utf-8" );         PrintWriter w =response.getWriter(); // Obtener el nombre del product String name=request.getParameter( "name" );         name = new String(name.getBytes( "iso8859-1" ), "utf-8" ); // Agregar el producto al carrito de compras // Obtener la compra carro de la sesión Map<String,Integer> map=(Map<String, Integer>) request.getSession().getAttribute( "cart" );
        


        
        



        

        
        

        Integer count= null ;

        // Juzgue si el carrito de compras está vacío if (map== null ) { // El primer inicio de sesión crea un carrito de compras map= new HashMap<>(); // Ponga el carrito de compras en la solicitud de sesión .getSession ().setAttribute( "carrito" , map);             count= 1 ;         } else { // El carrito de compras no está vacío Continúe evaluando si el carrito de compras tiene el producto count=map.get(name); if ( count== null ) { // No existe tal artículo en el carrito de compras count= 1 ;             } else { //
        
            
            

            
            


            
            

            
                
                

                购物车中有该商品
                count++;
            }

        }
        //将商品放入购物车
        map.put(name, count);

        //提示信息
        w.print("已将<b>"+name+"添加到购物车中<hr>");
        w.println("<a href='"+request.getContextPath()+"/product_list.jsp'>继续购物</a>    ");
        w.println("<a href='"+request.getContextPath()+"/cart.jsp'>查看购物车</a>    ");
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(solicitud, respuesta);
    }

}

 código de la página jsp y captura de pantalla del código:

Product_list.jsp código de página y captura de pantalla:

<%@ page contentType =" text/html;charset=UTF-8 " language =" java " %>
< html >
  < head >
    < title > index页面</ title >
  </ head >
  < body >
  < div style = " margen : 20 px 0 10 px 0 ;; alineación de texto : centro ; " >
    < a href="Add2CartServlet?name= ropa " >
      < estilo de entrada =" fondo : url ( '/1669465431435.webp' ) desplazamiento sin repetición 0-600 px rgba (0,0,0,0); alto :36 px ; ancho :127 px ; " value = " agregar al carrito de compras " type = "button" ></ a >Producto favorito
    </ div >

  </ div >
  </ cuerpo >
</ html >

 Captura de pantalla y código de la página Cart.jsp:

<%@ page import =" java.util.Map " %> <%--
  Creado por IntelliJ IDEA.
  Usuario: 86184
  Fecha: 26/11/2022
  Hora: 20:10
  Para cambiar esta plantilla, use Archivo | Configuración | Plantillas de archivos.
--%>
<%@ page contentType =" text/html;charset=UTF-8 " language =" java " %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http ://www.w3.org/TR/html4/loose.


    ="Content-Type" content ="text/html; charset=UTF-8" >
    < título >Insertar título aquí</ título >
</ cabeza >
< cuerpo >
< borde de la tabla   ="1" alinear ="centro" ancho ="20%" >< tr >< td >商品名称</ td >< td >商品数量</ td ></ tr > <% <ai=47>// obtener carrito de compras
    
        
        
    
    
        
        imprimir (nombre);                 salida.imprimir( "</td>" );
        
        
            
            

            
            





                salida.print( "<td>" );
                out.print(mapa.get(nombre));
                salida.imprimir( "</td>" );
                salida.imprimir( "</tr>" );

            }
        }

    %>
</ tabla >

< hora >
< centro >
    < a href ="product_list.jsp" >继续购物</ a >

</ centro >

 Diagrama de efecto de carrera:

Captura de pantalla de la página de lista:

 Después de hacer clic en el carrito de compras:

 Después de hacer clic para continuar con la compra:

 Después de hacer clic para ver el carrito:

 5. Reflexión experimental

(1) Haga clic en "Agregar al carrito de compras" para ingresar a la página agregada con éxito, se produce una excepción de puntero nulo, no se obtiene información del producto, request.getParameter ( "nombre" ) está vacío y finalmente se encuentra que el nombre en el la página es inconsistente con el nombre en getParameter .

(2) No hay información cuando se muestra la lista del carrito de compras y se descubre que la información del producto no se ha incluido en el Mapa.

(3) Al acceder a todos los recursos en la aplicación actual, el cliente devuelve información de cookies, y el tiempo de salida y otra información no se ven en la página.Después de la investigación, se descubre que hay un problema con el paquete importado por out, y también hay un problema con la ubicación devuelta.

(4) Al comparar si hay un atributo lastAccess en la cookie, durante el proceso de comparación, descubrí que el valor que obtuve era un valor nulo. Verifiqué el punto de interrupción línea por línea y descubrí que había un problema con el posición de la definición de valor, y se definió como una variable local.colocado en el método de bucle.

Supongo que te gusta

Origin blog.csdn.net/lf21qp/article/details/131370728
Recomendado
Clasificación