Em Javaee, o modelo Model1 está centrado na página JSSP. O JSSP deve não apenas processar logicamente a solicitação do navegador (usando o Javabean), mas também exibir páginas relevantes ao acessar o banco de dados.
No modelo Model1, não há servlet.
O diagrama de resultados do Model1 é o seguinte:
O Modelo1 possui baixa manutenção e escalabilidade, que são adequadas apenas para pequenos projetos.
Primeiro execute os resultados
goods.jsp
<%@página import = "entity.items"%> <%@página import = "dao.itemsdao"%> <%@página idioma = "java" import = "java.util.*" pageEncoding = "utf-8"%> <%string path = request.getCextPath (); String basalepath = request.getScheme () + ": //" + request.getServername () + ":" + request.getServerport () + path + "/"; %> <! Doctype html public "-// w3c // dtd html 4.01 transitória // pt"> <html> <head> <base href = "<%= Basepath%>"> <title> meu jsp 'index.jsp' página </title> <meta-http-mequiv "> http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "expire" content = "0"> <meta http-equiv = "palavras-chave" content = "keyword1, keyword2, palavra-chave"> <magle http-equiv = "descrição" "content1, keyword2, palavra-chave"> <magle http-ouquiv = "descrição" " type = "text/css" href = "styles.css"> -> <style type = "text/css"> div {float: esquerda; margem: 10px; } div dd {margem: 0px; tamanho de fonte: 10pt; } div dd.dd_name {color: azul; } div dd.dd_city {color: #000; } </style> </head> <body> <stent> <h1> Exibição do produto </h1> <hr> <tabela CellPadding = "0" CellPacing = "0"> <tr> <td> <% itensdao dao = new Itemsdao (); ArrayList <Itens> List = new ArrayList <Itens> (); // Obtenha todos os produtos do DAO e salve -os na lista de coleta da lista = dao.getAllitems (); if (list! = null && list.size ()> 0) {// Fazia através da coleção e exibir para (int i = 0; i <list.size (); i ++) {itens item = list.get (i); %> <div> <dl> <dt> <a href = "detalheS.jsp? id = <%= item.getId ()%>"> <img src = "imagens/<%= item.getPicture ()%>"/> </a> </dt> <dd> <%.get.getName ()%> <%= item.getPrice ()%> </dd> </dl> </div> <%}}%> </td> </tr> </table> </ table> </central> </body> </html> Imagem representando o produto no código
<span style = "white-space: pré"> </span> <a href = "detalheS.jsp? id = <%= item.getId ()%>"> <img src = "imagens/<%= item.getPicture ()%>"/> </a>
Ao clicar na imagem do produto, passe o ID do produto atual para a página de detalhes
detalhe.jsp exibe produtos detalhados através do ID do produto, e o histórico de navegação é mantido por cookies
<%@página import = "org.apache.taglibs.standard.tag.common.xml.foreachtag"%> <%@página import = "entity.items"%> <%@página import = "dao.itemsdao"%> <%@página) request.getContextPath (); String basalepath = request.getScheme () + ": //" + request.getServername () + ":" + request.getServerport () + path + "/"; %> <! Doctype html public "-// w3c // dtd html 4.01 transitória // pt"> <html> <head> <base href = "<%= Basepath%>"> <title> meu jsp 'index.jsp' página </title> <meta-http-mequiv "> http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "expire" content = "0"> <meta http-equiv = "palavras-chave" content = "keyword1, palavra-chave 2, palavra-chave"> <magle http-ouquiv = "descrição" conteúdo1, "palavra-chave2," my meta http-equiv = "descrição" content1, "palavra-chave 2, #meta" <magen)/"chanchent) {borda: 1; Antecedentes: #eaeee; } #historyView td {font-size: 10px; } </style> </ad Head> <body> <Center> <h1> Detalhes do produto </h1> <hr> <tabela CellPadding = "0" CellPacing = "0"> <tr> <td> <Center> <table> <% itensdaoo dao = new Itsdao (); // Obtenha o objeto de produto correspondente em DAO de acordo com o ID do produto enviado do item de solicitação Item = dao.getItembyId (Integer.parseint (request .getParameter ("id"))); if (item! = null) {%> <tr> <td rowspan = "5"> <img src = "imagens/<%= item.getPicture ()%>"> </td> </tr> <tr> <td> <%= item.getCity ()%> </td> </tr> <tr> <td id = "PriceName"> preço: <%= item.getPrice ()%> ¥ </td> </tr> <tr> <td id = "priqueneame"> preço: <%= item.getPrice ()%> request.getCookies (); String historystr = ""; for (cookie c: cookies) {if (c.getName (). Equals ("History")) {historystr = c.getValue (); }} historystr + = item.getId () + ","; Cookie C = novo cookie ("History", Historystr); // Redefinir os cookies Response.addcookie (c); %> </tabela> </fenter> </td> <td valign = "top" id = "historyView"> <Center> <table> <tr> <td> <b> Os produtos que você navegou </b> </td> </tr> <% // Fetch os últimos três registros navegados de Dao baseados em cookies e salvá -los para a lista dos itens <% // Dao.gethistoryView (HistoryStr); if (historyitems! </tr> <tr> <td> <b> <%= historyItem.getName ()%> </b> </td> </tr> <tr> <td> origem: <%= historyItem.getCity ()%</t> </td> </tr> </%}%> A camada DAO é responsável pela operação de consulta de produtos no banco de dados
pacote Dao; importar java.sql.connection; importar java.SQL.PreparedStatement; importar java.sql.resultset; importar java.sql.sqLexception; importar java.util.arraylist; importar util.dbhelper; Import entity.Items; // Classe de lógica de negócios de produto Classe public itensDao {// Obtenha todas as informações do produto public ArrayList <Itens> getAllItems () {// Coleta de produtos ArrayList <ments> List = new ArrayList <Itens> (); Conexão conn = null; Preparado estatement ps = null; ResultSet rs = null; tente {conn = dbhelper.getConnection (); String sql = "Selecione * de itens"; // instrução sql ps = conn.preparestatement (sql); rs = ps.executeQuery (); // Adicione os resultados da consulta à coleção por sua vez (rs.Next ()) {itens item = novo itens (); item.setId (rs.getInt ("id")); item.setName (rs.getString ("nome")); item.setCity (Rs.getString ("City")); item.setPrice (Rs.getDouble ("Price")); item.setPicture (rs.getString ("imagem")); item.setNumber (rs.getInt ("número")); list.add (item); }} catch (sqLexception e) {e.printStackTrace (); } finalmente {// feche o recurso se (rs! = null) {tente {rs.close (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }} if (ps! = null) {tente {ps.close (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }}} Lista de retorno; } // Obtenha informações do produto com base no número do produto itens públicos getItembyId (int id) {itens item = novo itens (); Conexão con = null; Preparado estatement ps = null; ResultSet rs = null; String sql = "selecione * de itens onde id =?"; tente {con = dbhelper.getConnection (); PS = Con.Preparestatement (SQL); ps.setInt (1, id); rs = ps.executeQuery (); // Se o ID for encontrado, inicialize -o para o objeto do item if (rs.Next ()) {item.SetId (rs.getInt ("id")); item.setName (rs.getString ("nome")); item.setCity (Rs.getString ("City")); item.setPrice (Rs.getDouble ("Price")); item.setPicture (rs.getString ("imagem")); item.setPicture (rs.getString ("imagem")); item.setNumber (rs.getInt ("número")); }} Catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOGERATION E.PRINTSTACKTRACE (); } finalmente {// feche o recurso se (rs! = null) {tente {rs.close (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }} if (ps! = null) {tente {ps.close (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }}} retornar item; } // Obtenha os três últimos itens navegados com base nos cookies public ArrayList <ments> GethistoryView (string cookie) {ArrayList <Itens> list = new ArrayList <ments> (); String ids [] = cookie.split (","); int contams = 3; // os três últimos registros navegados if (ids! = null && ids.length> 0) {for (int i = ids.length - 1; i> = 0 && i> ids.length - contagens - 1; i-) {itens item = getItemByid (integger.parseInt (ids [i]); / * * Primeiro determine se o item atual existe na coleção. Se houver contagens+1, leia -o mais uma vez (garantido para ter 3 objetos na coleção de listas) não adicione este item*/ if (list.contains (item)) {counts ++; continuar; } list.add (item); }} Lista de retorno; }} Itens da categoria de entidade
entidade do pacote; Itens da classe pública {private int id; nome de string privado; Private String City; preço duplo privado; número int privado; imagem de string privada; public int getId () {return id; } public void setId (int id) {this.id = id; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public string getCity () {return City; } public void setCity (string city) {this.city = city; } public Double getPrice () {Return Price; } public void setPrice (preço duplo) {this.price = price; } public int getNumber () {retornar número; } public void setNumber (int número) {this.number = número; } public string getPicture () {return picture; } public void setPicture (string picture) {this.picture = picture; } @Override public int hashCode () {// TODO Method Auto-Generated Stub Return this.getId ()+this.getName (). HashCode (); } @Override public boolean é igual (objeto obj) {if (this == obj) {return true; } else {if (obj instanceof itens) {itens item = (itens) obj; if (this.getId () == item.getId () && this.getName (). Equals (item.getName ())) {return true; }}} retorna false; }} Aqui, reescrevemos os métodos Hascode e é igual a modificar o método de comparação (todos os itens são um novo objeto. Mesmo que o conteúdo dos dois produtos seja o mesmo, eles não serão iguais. Portanto, precisamos modificar o método de comparação)
Porque, para a história da navegação, não podemos atualizar o histórico atual de navegação do produto e todos os produtos são os produtos. Só precisamos garantir que exista apenas um produto no histórico de navegação. Portanto, o método GethistoryView na camada DAO tem este código
<span style = "white-space: pré"> </span> if (list.contains (item)) {contagens ++; continuar; } Depois, há a classe de ferramentas
Dbhelpher Singleton Pattern obtém objeto de conexão
pacote utiliza; importar java.sql.connection; importar java.SQL.DriverManager; importar java.sql.sqLexception; classe pública dbhelper {private static final string driver = "com.mysql.jdbc.driver"; String final estática privada url = "jdbc: mysql: // localhost: 3306/shopping? useunicode = true & charcterencoding = utf-8"; String final estática privada nome de usuário = "root"; String final estática privada senha = "123"; conexão estática privada con = nulo; // O código de bloco estático é responsável por carregar o driver estático {try {class.ForName (driver); } catch (classNotFoundException e) {// TODO BLOCO DE CATAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }} conexão estática pública getConnection () {if (con == null) {try {con = driverManager.getConnection (url, nome de usuário, senha); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }} retornar con; }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.