En Javaee, el modelo Model1 se centra en la página JSSP. JSSP no solo debe procesar lógicamente la solicitud del navegador (usando Javabean) y también mostrar páginas relevantes al acceder a la base de datos.
En el modelo Model1, no hay servlet.
El diagrama de resultados del Modelo1 es el siguiente:
Modelo1 tiene una mala capacidad de mantenimiento y escalabilidad, que solo son adecuadas para pequeños proyectos.
Primero ejecuta los resultados
buenos.jsp
<%@page import = "entity.Items"%> <%@page import = "dao.itemsdao"%> <%@page lenguaje = "java" import = "java.util.*" PageEncoding = "Utf-8"%> <%String Path = request.getContextPath (); String basepath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerPort () + ruta + "/"; %> <! DocType html public "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = " http-equiv = "cache-confontrol" content = "no-cache"> <meta http-equiv = "expires" content = "0"> <meta http-equiv = "palabras clave" content = "keyword1, weyword 2, keyword3"> <meta http-oquiv = "descripción" Content = "esto es mi página" << type = "text/css" href = "styles.css"> -> <style type = "text/css"> div {float: left; margen: 10px; } div dd {margen: 0px; tamaño de fuente: 10pt; } div dd.dd_name {color: azul; } div dd.dd_city {color: #000; } </style> </head> <body> <center> <h1> Display del producto </h1> <hr> <table cellPadding = "0" cellpacing = "0"> <tr> <td> <% elementosDao Dao = new itemsDao (); ArrayList <emems> list = new ArrayList <ememsem> (); // Obtenga todos los productos de DAO y guárdelos en la lista de colección de la lista = dao.getAllItems (); if (list! = null && list.size ()> 0) {// bucle a través de la colección y visualización para (int i = 0; i <list.size (); i ++) {elementos elementos = list.get (i); %> <div> <dl> <dt> <a href = "detalls.jsp? id = <%= item.getid ()%>"> <img src = "Images/<%= item.getPicture ()%>"/> </a> </dt> <dd> <%= item.getName ()%> </dd> <dd> origen: <%= ítem.get () <%= item.getPrice ()%> </dd> </dl> </div> <%}}%> </td> </tr> </table> </table> </center> </body> </html> Imagen que representa el producto en el código
<span style = "White-Space: pre"> </span> <a href = "detalls.jsp? id = <%= item.getID ()%>"> <img src = "imágenes/<%= item.getPicture ()%>"/> </a>
Al hacer clic en la imagen del producto, pase la ID del producto actual a la página Detalles
Detalles.jsp Muestra productos detallados a través de la identificación del producto, y las cookies mantienen el historial de navegación.
<%@page import = "org.apache.taglibs.standard.tag.common.xml.forEachtag"%> <%@page import = "entity.items"%> <%@page import = "dao.itemsdao"%> <%@page idioma = "java" import = "java.util. request.getContextPath (); String basepath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerPort () + ruta + "/"; %> <! DocType html public "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = " http-equiv = "cache-confontrol" content = "no-cache"> <meta http-equiv = "expires" content = "0"> <meta http-equiv = "palabras clave" content = "keyword1, keyword 2, keyword3"> <meta http-oquiv = "descripción" Content = "esto es mi página"> <estilo de estilo = "text/css" {borde: 1; Antecedentes: #EAEAEE; } #HistoryView td {font-size: 10px; } </style> </head> <body> <center> <h1> Detalles del producto </h1> <hr> <table cellPadding = "0" cellpacing = "0"> <tr> <td> <center> <table> <% itemsdao dao = new itemsDao (); // Obtenga el objeto de producto correspondiente en DAO de acuerdo con la identificación del producto enviado desde el elemento de solicitud de ítem = dao.getitembyid (integer.parseInt (request .getParameter ("id"))); if (item! = null) {%> <tr> <td RowsPan = "5"> <img src = "Images/<%= item.getPicture ()%>"> </td> </tr> <tr> <tr> <td> <b> <%= item.getNeTNeM <%= item.getCity ()%> </td> </tr> <tr> <td id = "priceName"> precio: <%= item.getPrice ()%> ¥ </td> </tr> <tr> <tr> <td id = "priceName"> precio: <%= item.getPrice ()%> ¥ </td> </tr> <%} request.getcookies (); String HistoryStr = ""; para (cookie c: cookies) {if (c.getName (). Equals ("History")) {HistoryStr = C.GetValue (); }} Historystr + = item.getId () + ","; Cookie C = nueva cookie ("Historia", Historystr); // reiniciar las cookies respuesta.addcookie (c); %> </table> </center> </td> <td valign = "top" id = "HistoryView"> <center> <table> <tr> <td> <b> Los productos que ha navegado </b> </td> </tr> <% // atrae los últimos tres registros navegados de DAO basados en Cookies y ahorra a la colección de la lista <items> Historyems = HISTORIMS = dao.gethistoryView (Historystr); if (HistoryItems! = NULL && HistoryItems.Size ()> 0) {// Transfiere el conjunto para (items HistoryEm: HistoryItems) {%> <tr> <td> <a href = "detalls.jsp? id = <%= HistoryItem.getId ()%>"> <img src = "Images/<%= Historyem.getPicture ()%>" </tr> <tr> <td> <b> <%= HistoryEtem.getName ()%> </b> </td> </tr> <tr> <tr> <td> origen: <%= HistoryItem.getCity ()%> </td> </tr> <%}}%> </table> </tr> </tr> </bear> </center> </body </html. La capa DAO es responsable de la operación de consulta de productos en la base de datos
paquete Dao; import java.sql.connection; import java.sql.preparedStatement; import java.sql.resultset; import java.sql.sqlexception; import java.util.arrayList; import util.dbhelper; Entidad de importación.Items; // Clase de lógica de negocios de productos de clase pública Elementos {// Obtenga toda la información del producto Public ArrayList <emems> getAllItems () {// Product Collection ArrayList <emems> list = new ArrayList <emems> (); Conexión conn = nulo; Preparado PS = NULL; ResultSet rs = null; intente {conn = dbhelper.getConnection (); Cadena sql = "seleccionar * de elementos"; // instrucción sql ps = conn.prepareStatement (sql); rs = ps.ExecuteQuery (); // Agregue los resultados de la consulta a la colección a su vez mientras (rs.next ()) {elementos elementos = new items (); item.setId (rs.getInt ("id")); item.setName (rs.getString ("nombre")); item.setCity (rs.getString ("ciudad")); item.setPrice (rs.getDouble ("precio")); item.setPicture (rs.getString ("imagen")); item.setNumber (rs.getInt ("número")); list.add (elemento); }} Catch (SQLException e) {E.PrintStackTrace (); } Finalmente {// cerrar el recurso if (rs! = null) {try {rs.close (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }} if (ps! = null) {try {ps.close (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }}} Lista de retorno; } // Obtener información del producto basada en el número de producto Los elementos públicos getitembyid (int id) {elementos elementos = new items (); Conexión con = nulo; Preparado PS = NULL; ResultSet rs = null; Cadena sql = "Seleccionar * de elementos donde id =?"; intente {con = dbhelper.getConnection (); PS = Con.PrepareStatement (SQL); Ps.SetInt (1, id); rs = ps.ExecuteQuery (); // Si se encuentra la identificación, inicialice para el objeto item if (rs.next ()) {item.setId (rs.getInt ("id")); item.setName (rs.getString ("nombre")); item.setCity (rs.getString ("ciudad")); item.setPrice (rs.getDouble ("precio")); item.setPicture (rs.getString ("imagen")); item.setPicture (rs.getString ("imagen")); item.setNumber (rs.getInt ("número")); }} Catch (Sqlexception e) {// TODO Auto Generado Bloque E.PrintStackTrace (); } finalmente {// cierre recurso if (rs! = null) {try {rs.close (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }} if (ps! = null) {try {ps.close (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }}} elemento de retorno; } // Obtenga los últimos tres elementos navegados en función de las cookies pública ArrayList <emems> GethistoryView (String Cookie) {ArrayList <emems> list = new ArrayList <ememsem> (); IDS de cadena [] = Cookie.split (","); int cuenta = 3; // Los últimos tres registros navegados if (ids! = null && ids.length> 0) {for (int i = id.length - 1; i> = 0 && i> id.length - counts - 1; i--) {item item = getitembyid (integer.parseint (ids [i])); / * * Determine primero si el elemento actual existe en la colección. Si los recuentos+1 existe, léelo una vez más (garantizado para tener 3 objetos en la colección de listas) no agregue este elemento*/ if (list.contains (item)) {Counts ++; continuar; } list.add (elemento); }} lista de retorno; }} Elementos de la categoría de entidad
entidad de paquete; elementos de clase pública {private int id; nombre de cadena privada; Ciudad de cadena privada; precio doble privado; Número privado int; imagen de cadena privada; public int getId () {return id; } public void setid (int id) {this.id = id; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public String getCity () {return City; } public void setCity (String City) {this.city = City; } public Double GetPrice () {Return Price; } public void setPrice (doble precio) {this.price = precio; } public int getNumber () {número de retorno; } public void setNumber (int número) {this.number = number; } public String getPicture () {imagen de retorno; } public void setPicture (imagen de cadena) {this.picture = imagen; } @Override public int hashCode () {// TODO Método generado por auto retorno this.getID ()+this.getName (). Hashcode (); } @Override public boolean iguales (objeto obj) {if (this == obj) {return true; } else {if (obj instanciaf elementos) {elementos item = (elementos) obj; if (this.getID () == item.getId () && this.getName (). Equals (item.getName ())) {return true; }}} return false; }} Aquí reescribimos los métodos HASCODE e equivalimos a modificar el método de comparación (todos los elementos son un objeto nuevo. Incluso si el contenido de los dos productos es el mismo, no serán iguales. Por lo tanto, necesitamos modificar el método de comparación)
Porque para el historial de navegación, no podemos actualizar el historial de navegación de productos actual y todos los productos son los productos. Solo necesitamos asegurarnos de que solo haya un producto en el historial de navegación. Entonces, el método GethistoryView en la capa DAO tiene este código
<span style = "white-space: pre"> </span> if (list.contains (elemento)) {cuenta ++; continuar; } Luego está la clase de herramientas
El patrón Dbhelpher Singleton obtiene objeto de conexión
paquete utilizado; import java.sql.connection; import java.sql.drivermanager; import java.sql.sqlexception; clase pública dbhelper {private static final string controlador = "com.mysql.jdbc.driver"; String final estática privada url = "JDBC: mysql: // localhost: 3306/compras Private static final String username = "root"; Pastaz de cadena final estática privada = "123"; conexión estática privada con = nulo; // El código de bloque estático es responsable de cargar el controlador static {try {class.forname (controlador); } Catch (ClassNotFoundException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); }} Public Static Connection getConnection () {if (con == null) {try {con = drivermanager.getConnection (url, nombre de usuario, contraseña); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }} return Con; }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.