Cet article présente la technologie de programmation JSP pour implémenter un programme de panier d'achat simple, comme suit :
1 Description du problème
Utilisation de la technologie de programmation JSP pour implémenter un programme d'achat simple cart Procédures de voiture, les exigences spécifiques sont les suivantes.
(1) Utilisez JSP pour écrire une page de connexion. Les informations de connexion incluent le nom d'utilisateur et le mot de passe, respectivement.
(2) Écrivez un programme JSP pour obtenir les informations de connexion soumises par l'utilisateur et interrogez la base de données. Si le nom d'utilisateur est le nom d'un membre de ce groupe et le mot de passe est le numéro d'étudiant correspondant, utilisez. la méthode objet intégrée JSP pour accéder à la page de commande (affichant les informations du catalogue telles que le type et le prix unitaire des produits dans le magasin), sinon, utilisez l'action JSP pour inviter l'utilisateur à se reconnecter (remarque : ceci) ; la page doit inclure l'interface de connexion précédente).
(3) Lorsque le client remplit la quantité des marchandises requises et clique sur le bouton Soumettre, les marchandises précédemment commandées sont placées dans le panier et les informations pertinentes dans le panier sont affichées, y compris le nom et la quantité des marchandises et le prix total de tous les articles.
(4) Écrivez les informations sur le produit dans la base de données et calculez le prix en recherchant dans la base de données.
Sélectionnez les fonctions suivantes :
(5) Implémentez une fonction d'inscription simple afin que les nouveaux utilisateurs puissent écrire leurs informations (nom et numéro d'étudiant) dans la base de données pour une connexion ultérieure. Utiliser
(6) réécrire les opérations pertinentes de la base de données dans un JavaBean
2 Solution
2.1 Implémenter la fonction
( 1) Utilisateur se connecter. (Authentification de connexion complète en interrogeant la base de données MongoDB)
(2) Enregistrement de l'utilisateur. (L'enregistrement de l'utilisateur se fait en écrivant dans la base de données MongoDB)
(3) N'oubliez pas le mot de passe. (En utilisant des cookies, la fonction de mémorisation du nom d'utilisateur et du mot de passe de la page d'accueil est réalisée)
(4) Voir les produits. (En interrogeant la base de données MongoDB, des informations spécifiques sur le produit sont renvoyées et affichées sur l'interface client)
(5) Achetez le produit.
(6) Panier. (Afficher les informations spécifiques des produits achetés par l'utilisateur, supprimer les produits achetés ou ajouter la quantité de produits achetés, et calculer le prix total des produits actuellement achetés par l'utilisateur)
2.2 Rendu de l'opération finale
2.3 Diagramme schématique du cadre fonctionnel du système
Figure 1 : Exemple de diagramme du cadre fonctionnel du système
Explication détaillée :
(1) Parcourir Ouvrez la page de connexion de l'utilisateur login.jsp dans le navigateur
(2) Cliquez sur le bouton Créer un nouvel utilisateur pour accéder à l'enregistrement de l'utilisateur register.jsp ; page ;
(3) Si l'enregistrement échoue, il restera sur la page d'origine de register. si l'enregistrement est réussi, il passera à la page d'invite de réussite de l'enregistrement register_success.jsp. Cliquez sur le bouton de retour pour revenir. à la page login.jsp sur la page d'accueil ;
(4) Entrez le nom d'utilisateur et le mot de passe sur la page login.jsp de la page d'accueil, la demande est envoyée à la page de script de traitement de connexion login_action.jsp et les données la correspondance réussie passe à la page d'accueil de bienvenue.jsp shopping, sinon elle passe à la page login_Fail.jsp de la vidéo de connexion
(5) Entrez bienvenue.jsp shopping Après la page d'accueil, cliquez sur la page suivante et la page précédente ; boutons pour afficher les informations actuelles sur le produit ; cliquez une fois sur le bouton d'achat pour le même produit pour acheter un produit, et cliquez plusieurs fois pour acheter plusieurs produits, cliquez sur le bouton Afficher le panier pour accéder à la page du panier Cart.jsp ; où vous pouvez afficher le numéro de produit actuellement acheté, le nom, le prix, la quantité achetée et les informations sur le prix total de tous les produits, et fournir des fonctions de suppression des produits achetés et d'ajout du nombre de produits achetés
(6) Les achats ; La page d'accueil welcom.jsp se compose de trois pages : header.jsp, main_shop.jsp et bottom.jsp, comme le montre la figure 2 ci-dessous :
Figure 2 : page d'accueil Shopping Page bienvenue.jsp
2.4 À propos de l'introduction de MongoDB et de la configuration de l'environnement système
MongoDB est membre de la famille NoSQL et est une base de données relationnelle couramment utilisée (par exemple, mysql, SQLserver , etc.), les relations et associations complexes entre entités sont abandonnées. En d’autres termes, MongoDB est une base de données de documents, tout comme nous écrivons des documents quotidiennement. Nous n’avons pas à nous soucier du contenu spécifique des différents documents ni à les classer soigneusement. Ils peuvent tous être stockés sur le disque dur de notre ordinateur. Veuillez voir ci-dessous un tableau comparatif des concepts de noms entre MongoDB et les bases de données relationnelles :
Comme le montre le tableau ci-dessus, dans la base de données relationnelle que nous connaissons, la table d'entité spécifique correspond à la collection dans MongoDB, les lignes du tableau correspondent aux documents de la collection MongoDB et les colonnes dans le tableau correspond aux champs du document MongoDB. La clé primaire est générée automatiquement par le système dans MongoDB. La clé primaire générée automatiquement par MongoDB est générée selon une méthode spécifique. Plus précisément, elle comporte 12 octets. généré comme suit :
0 |1|2|3 | 4|5|6 | 7|8 | 9|10|11
Horodatage | PID | Counter
Ce qui précède est mon apprentissage préliminaire S'il y a des erreurs dans l'introduction de MongoDB, n'hésitez pas à me corriger.
Après avoir parlé du concept, nous devons passer à l'application spécifique. Le format de données stocké et lu dans MongoDB est le format BSON, c'est une sorte de données similaire au format JSON. suit :
/* 7 createdAt:2016/11/22 下午3:52:51*/ { "_id" : ObjectId("5833f953e9d60125601a8c8b"), "sid" : "7", "sname" : "红米Note4", "sprice" : "899" }, /* 8 createdAt:2016/11/22 下午3:53:19*/ { "_id" : ObjectId("5833f96fe9d60125601a8c8c"), "sid" : "8", "sname" : "平凡的世界", "sprice" : "99" }, /* 9 createdAt:2016/11/22 下午3:53:43*/ { "_id" : ObjectId("5833f987e9d60125601a8c8d"), "sid" : "9", "sname" : "斗罗大陆", "sprice" : "199" },
Lorsque nous interrogeons et obtenons des données de la base de données MongoDB, son format est le format BSON et ne peut pas être directement mis en correspondance avec les données obtenues par le client. Ici, après avoir obtenu les données au format BSON dans la base de données, j'appelle la méthode BSON.toMap() dans le package de pilotes MongoDB pour convertir le format BSON en une chaîne au format de paire clé-valeur Map, puis j'appelle Map.get(" name" dans Map ) pour obtenir la valeur de la paire clé-valeur spécifique, faisant ainsi correspondre les données de la page client.
Enfin, le point le plus critique est d'importer le package de pilotes MongoDB dans le nouveau projet pour faciliter l'exploitation de la base de données par la couche client et métier. Ici, j'utilise le package mongo-java-driver-3.3.0.jar et le lien de téléchargement pour chaque version du package de pilotes : http://central.maven.org/maven2/org/mongodb/mongo-java- driver/
2.5 Explication du code de la fonction principale
(1) La fonction de connexion utilisateur
réalise la connexion de l'utilisateur, qui est principalement implémentée par le code dans login_action.jsp script, qui a été donné dans le code Les commentaires spécifiques sont donnés comme suit :
<%@ page language="java" import="java.util.*,com.mongodb.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login_action.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% response.setContentType("text/html;charset=utf-8"); //确保显示的汉字信息以正确编码方式显示 request.setCharacterEncoding("utf-8"); //确保获取的汉字信息以正确编码方法获取 String userName=(String)request.getParameter("username"); //获取登录页面用户名 String passWord=(String)request.getParameter("password");//获取登陆页面密码 String checkBox = request.getParameter("save_password");//获取登陆页面记住密码选择框属性值 boolean login_test = false; //设定登陆布尔值,若用户名和密码成功匹配,则为true try{ // 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); //此处采用无用户名和密码验证方式登陆 @SuppressWarnings("deprecation") DB db = mongoClient.getDB( "library" ); //连接到数据库library DBCollection coll = db.getCollection("userInfo"); //获取library数据库中集合userInfo System.out.println("Collection userInfo selected successfully"); DBCursor cursor = coll.find(); //查询集合userInfo中文档信息 int i=1; while (cursor.hasNext()) { //检索集合userInfo中所有文档信息 System.out.println("userInfo Document: "+i); DBObject show = cursor.next(); System.out.println(show); @SuppressWarnings("rawtypes") Map show1 = show.toMap(); //将检索结果show(Bson类型)转换为Map类型 String toname = (String)show1.get("username"); //提取Map中字段名为username的属性值 String topassword = (String)show1.get("password"); //提取Map中字段名为password的属性值 if(toname.equals(userName) && topassword.equals(passWord)){ //将从数据库中获取的用户名和密码与表单中获取的数据进行验证,匹配成功则使login_test值为true System.out.println("登陆成功!!!!!"+"username:"+toname+" password:"+topassword); //request.getRequestDispatcher("welcome.jsp").forward(request, response); login_test = true; } System.out.println(show1.get("username")); i++; } }catch(Exception e){ System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } if(login_test) { if ("save".equals(checkBox)) { //Cookie存取时用URLEncoder.encode进行编码(PS:读取时URLDecoder.decode进行解码) String name1 = java.net.URLEncoder.encode(userName,"UTF-8"); //创建两个Cookie对象 Cookie nameCookie = new Cookie("username", name1); //设置Cookie的有效期为3天 nameCookie.setMaxAge(60 * 60 * 24 * 3); String pwd = java.net.URLEncoder.encode(passWord,"UTF-8"); Cookie pwdCookie = new Cookie("password", pwd); pwdCookie.setMaxAge(60 * 60 * 24 * 3); response.addCookie(nameCookie); response.addCookie(pwdCookie); } // request.getRequestDispatcher("welcome.jsp").forward(request, response); response.sendRedirect("welcome.jsp"); } else{ response.sendRedirect("login_Fail.jsp"); // request.getRequestDispatcher("loginFail.jsp").forward(request, response); } %> </body> </html>
(2) Fonction d'enregistrement des utilisateurs
Le principe de mise en œuvre de la fonction d'enregistrement des utilisateurs est fondamentalement le même que celui de la connexion de l'utilisateur. La seule différence est que la connexion de l'utilisateur consiste à interroger la base de données et que l'enregistrement de l'utilisateur est écrit dans la base de données. Le code spécifique ne sera pas affiché ici.
(3) La fonction de mémorisation du mot de passe
implémente la mémorisation du mot de passe. Lorsque l'utilisateur se connecte correctement, Cookie_one obtient le nom d'utilisateur et l'ajoute au cookie du navigateur actuel. Cookie_two obtient le mot de passe et l'ajoute également au cookie actuel du navigateur. Dans les zones de saisie du nom d'utilisateur et du mot de passe sur la page d'accueil de connexion, remplissez le nom d'utilisateur et le mot de passe obtenus par le système à partir du cookie, réalisant ainsi la fonction de mémorisation du mot de passe. Les détails sont les suivants :
if(login_test) { if ("save".equals(checkBox)) { //Cookie存取时用URLEncoder.encode进行编码(PS:读取时URLDecoder.decode进行解码) String name1 = java.net.URLEncoder.encode(userName,"UTF-8"); //创建两个Cookie对象 Cookie nameCookie = new Cookie("username", name1); //设置Cookie的有效期为3天 nameCookie.setMaxAge(60 * 60 * 24 * 3); String pwd = java.net.URLEncoder.encode(passWord,"UTF-8"); Cookie pwdCookie = new Cookie("password", pwd); pwdCookie.setMaxAge(60 * 60 * 24 * 3); response.addCookie(nameCookie); response.addCookie(pwdCookie); } // request.getRequestDispatcher("welcome.jsp").forward(request, response); response.sendRedirect("welcome.jsp"); } else{ response.sendRedirect("login_Fail.jsp"); // request.getRequestDispatcher("loginFail.jsp").forward(request, response); }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String username = ""; String password = ""; //获取当前站点的所有Cookie Cookie[] cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { //对cookies中的数据进行遍历,找到用户名、密码的数据 if ("username".equals(cookies[i].getName())) { //读取时URLDecoder.decode进行解码(PS:Cookie存取时用URLEncoder.encode进行编码) username = java.net.URLDecoder.decode(cookies[i].getValue(),"UTF-8"); } else if ("password".equals(cookies[i].getName())) { password = java.net.URLDecoder.decode(cookies[i].getValue(),"UTF-8"); } } %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>登陆页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="css/login.css"> </head> <body> <div class="content"> <div class="head"> <h1>简单购物车</h1> </div> <!-- 登录面板 --> <div class="panel"> <form action="login_action.jsp" method="post"> <!-- 账号和密码组 --> <div class="group"> <label>账号</label> <input type="text" placeholder="请输入账号" name="username" value="<%=username%>"> </div> <div class="group"> <label>密码</label> <input type="password" placeholder="请输入密码" name="password" value="<%=password%>"> </div> <div> <input type="checkbox" value="save" name="save_password"> <label>记住密码</label> </div> <div class="group"> <label></label> </div> <!-- 登录按钮 --> <div class="login"> <button type="submit" name="login">登陆</button> <button type="reset" name="reset">重置</button> </div> </form> </div> <!-- 注册按钮 --> <div class="register"> <button onclick="window.location.href='register.jsp'">创建新账号</button> </div> </div> </body> </html>
(4) Rechercher des produits et acheter des produits
La fonction ici est principalement d'exploiter la base de données MongoDB et de renvoyer les informations spécifiques du produit . Tant que vous comprenez la fonction de connexion utilisateur. Après cela, le code de fonction ici sera rapidement compris et le code spécifique sera affiché plus tard.
(5) Panier
La fonction ici est également principalement d'exploiter les données MongoDB et de mettre en œuvre des fonctions liées au panier via l'interaction de l'utilisateur avec le client. Le code spécifique est affiché plus tard.
2.6 Codage spécifique
L'explication du codage spécifique sera introduite dans l'ordre approximatif de mise en œuvre des fonctions, comme suit :
2.6.1 Connexion et mémorisation de l'utilisateur mot de passe
La première chose que vous regardez est la page login.jsp sur la page d'accueil Afin de l'afficher magnifiquement, cette chose utilise un fichier login.css (les pages suivantes utilisent toutes login. fichiers CSS). Le code spécifique de login.css est le suivant :
@CHARSET "UTF-8"; /*按照样图要求,添加一个浅灰色背景*/ body{ background-color: #F2F2F2; } /*设置内容模块距离顶部一个有一段距离100px*/ .content { margin-top: 80px; } /*登录和注册按钮的整体样式*/ .content button { height: 30px;/*登录和注册按钮的高度*/ color: white;/*登录和注册按钮字体颜色为白色*/ font-size: 18px;/*登录和注册按钮的字体大小*/ border: 0px;/*无边框*/ padding: 0px;/*无内边距*/ cursor: pointer;/*登录和注册按钮的选择时为手形状*/ } /*头部名称*/ .content .head { text-align: center;/*子内容居中*/ } /*登录面板*/ .content .panel { background-color: white;/*登录面板背景颜色为白色*/ width: 302px;/*宽度为302px*/ text-align: center;/*子内容居中*/ margin: 0px auto;/*自身居中*/ padding-top: 10px;/*顶部的内边距为20px*/ padding-bottom: 10px;/*底部的内边距为20px*/ border: 1px solid #ddd;/*边框颜色为灰色*/ border-radius: 5px;/*边框边角有5px的弧度*/ } /*购物主页购物面板*/ .content .panel1 { background-color: white;/*购物主页面板背景颜色为白色*/ width: 1000px;/*宽度为600px*/ text-align: center;/*子内容居中*/ margin: 0px auto;/*自身居中*/ border: 1px solid #ddd;/*边框颜色为灰色*/ border-radius: 5px;/*边框边角有5px的弧度*/ } /*登录和密码组*/ .content .panel .group { text-align: left;/*子内容居中*/ width: 262px;/*宽度为262px*/ margin: 0px auto 20px;/*自身居中,并距离底部有20px的间距*/ } .content .panel .group label { line-height: 30px;/*高度为30px*/ font-size: 18px;/*字体大小为18px*/ } .content .panel .group input { display: block;/*设置为块,是为了让输入框独占一行*/ width: 250px;/*宽度为250px*/ height: 30px;/*高度为30px*/ border: 1px solid #ddd;/*输入框的边框*/ padding: 0px 0px 0px 10px;/*左边内边距为10px,显得美观*/ font-size: 16px;/*字体大小*/ } .content .panel .group input:focus{ border-left: 1px solid #CC865E;/*当输入框成为焦点时,左边框颜色编程褐色*/ } .content .panel .login button { background-color: #CC865E;/*按钮的背景颜色*/ width: 130px;/*按钮的宽度*/ } .content .panel .login button:hover { background-color: white;/*按钮选中后背景颜色为白色*/ color: #CC865E;/*按钮选中后字体颜色为褐色*/ border: 1px solid #CC865E;/*按钮选中后边框颜色为褐色*/ } /*注册按钮*/ .content .register { text-align: center;/*子内容居中*/ margin-top: 20px;/*顶部的内边距为20px*/ } .content .register button { background-color: #466BAF;/*按钮的背景颜色为蓝色*/ width: 180px;/*按钮的宽度*/ } .content .register button:hover { background-color: white;/*按钮选中后背景颜色为白色*/ color: #466BAF;/*按钮选中后字体颜色为蓝色*/ border: 1px solid #466BAF;/*按钮选中后边框颜色为蓝色*/ }
Le code spécifique de Login.jsp est le suivant :
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String username = ""; String password = ""; //获取当前站点的所有Cookie Cookie[] cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { //对cookies中的数据进行遍历,找到用户名、密码的数据 if ("username".equals(cookies[i].getName())) { //读取时URLDecoder.decode进行解码(PS:Cookie存取时用URLEncoder.encode进行编码) username = java.net.URLDecoder.decode(cookies[i].getValue(),"UTF-8"); } else if ("password".equals(cookies[i].getName())) { password = java.net.URLDecoder.decode(cookies[i].getValue(),"UTF-8"); } } %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>登陆页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="css/login.css"> </head> <body> <div class="content"> <div class="head"> <h1>简单购物车</h1> </div> <!-- 登录面板 --> <div class="panel"> <form action="login_action.jsp" method="post"> <!-- 账号和密码组 --> <div class="group"> <label>账号</label> <input type="text" placeholder="请输入账号" name="username" value="<%=username%>"> </div> <div class="group"> <label>密码</label> <input type="password" placeholder="请输入密码" name="password" value="<%=password%>"> </div> <div> <input type="checkbox" value="save" name="save_password"> <label>记住密码</label> </div> <div class="group"> <label></label> </div> <!-- 登录按钮 --> <div class="login"> <button type="submit" name="login">登陆</button> <button type="reset" name="reset">重置</button> </div> </form> </div> <!-- 注册按钮 --> <div class="register"> <button onclick="window.location.href='register.jsp'">创建新账号</button> </div> </div> </body> </html>
Le code du script de traitement de connexion login_action.jsp est comme suit :
<%@ page language="java" import="java.util.*,com.mongodb.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login_action.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% response.setContentType("text/html;charset=utf-8"); //确保显示的汉字信息以正确编码方式显示 request.setCharacterEncoding("utf-8"); //确保获取的汉字信息以正确编码方法获取 String userName=(String)request.getParameter("username"); //获取登录页面用户名 String passWord=(String)request.getParameter("password");//获取登陆页面密码 String checkBox = request.getParameter("save_password");//获取登陆页面记住密码选择框属性值 boolean login_test = false; //设定登陆布尔值,若用户名和密码成功匹配,则为true try{ // 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); //此处采用无用户名和密码验证方式登陆 @SuppressWarnings("deprecation") DB db = mongoClient.getDB( "library" ); //连接到数据库library DBCollection coll = db.getCollection("userInfo"); //获取library数据库中集合userInfo System.out.println("Collection userInfo selected successfully"); DBCursor cursor = coll.find(); //查询集合userInfo中文档信息 int i=1; while (cursor.hasNext()) { //检索集合userInfo中所有文档信息 System.out.println("userInfo Document: "+i); DBObject show = cursor.next(); System.out.println(show); @SuppressWarnings("rawtypes") Map show1 = show.toMap(); //将检索结果show(Bson类型)转换为Map类型 String toname = (String)show1.get("username"); //提取Map中字段名为username的属性值 String topassword = (String)show1.get("password"); //提取Map中字段名为password的属性值 if(toname.equals(userName) && topassword.equals(passWord)){ //将从数据库中获取的用户名和密码与表单中获取的数据进行验证,匹配成功则使login_test值为true System.out.println("登陆成功!!!!!"+"username:"+toname+" password:"+topassword); //request.getRequestDispatcher("welcome.jsp").forward(request, response); login_test = true; } System.out.println(show1.get("username")); i++; } }catch(Exception e){ System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } if(login_test) { if ("save".equals(checkBox)) { //Cookie存取时用URLEncoder.encode进行编码(PS:读取时URLDecoder.decode进行解码) String name1 = java.net.URLEncoder.encode(userName,"UTF-8"); //创建两个Cookie对象 Cookie nameCookie = new Cookie("username", name1); //设置Cookie的有效期为3天 nameCookie.setMaxAge(60 * 60 * 24 * 3); String pwd = java.net.URLEncoder.encode(passWord,"UTF-8"); Cookie pwdCookie = new Cookie("password", pwd); pwdCookie.setMaxAge(60 * 60 * 24 * 3); response.addCookie(nameCookie); response.addCookie(pwdCookie); } // request.getRequestDispatcher("welcome.jsp").forward(request, response); response.sendRedirect("welcome.jsp"); } else{ response.sendRedirect("login_Fail.jsp"); // request.getRequestDispatcher("loginFail.jsp").forward(request, response); } %> </body> </html>
Le code de la page login_Fail.jsp pour l'échec de la connexion est le suivant :
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>登陆失败</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="css/login.css"> </head> <body> <div class="content"> <div class="panel1"> <h1>输入用户名和密码不正确,请重新登陆!!!</h1> </div> <div class="register"> <button onclick="window.location.href='login.jsp'">返回</button> </div> </div> </body> </html>
2.6.2 Enregistrement de l'utilisateur
Le registre Le code de la page .jsp pour la page d'accueil d'inscription est le suivant :
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>注册页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="css/login.css"> <Script Language="JavaScript"> function check() { var tmp,str; str=document.myform.password1.value; tmp=document.myform.password2.value; if(str != tmp) alert("两次密码输入不一致,请重新确认密码!!!"); } </Script> </head> <body> <div class="content"> <div class="head"> <h1>欢迎来到简单购物车系统注册页面</h1> </div> <!-- 注册面板 --> <div class="panel"> <form name="myform" action="register_action.jsp" method="post"> <!-- 账号和密码组 --> <div class="group"> <label></label> <input type="text" placeholder="请输入注册账号" name="username1"> </div> <div class="group"> <label></label> <input type="password" placeholder="请输入注册密码" name="password1"> </div> <div class="group"> <label></label> <input type="password" placeholder="请确认注册密码" name="password2"> </div> <!-- 注册按钮 --> <div class="login"> <button type="submit" name="register" onclick="check()">注册</button> <button type="reset" name="reset1">重置</button> </div> </form> <div class="register"> <button onclick="window.location.href='login.jsp'">返回</button> </div> </div> </div> </body> </html>
Le code du script de traitement de l'inscription register_action.jsp est le suivant
<%@ page language="java" import="java.util.*,com.mongodb.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String text_change = "等待注册"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'register_action.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta http-equiv="description" content="This is my page"> </head> <body> <% response.setContentType("text/html;charset=utf-8"); //确保显示的汉字信息以正确编码方式显示 request.setCharacterEncoding("utf-8"); //确保获取的汉字信息以正确编码方法获取 String userName1=(String)request.getParameter("username1"); //获取页面用户名 String passWord1=(String)request.getParameter("password1");//获取注册页面密码1 String passWord2=(String)request.getParameter("password2");//获取注册页面密码2 if(!passWord1.equals(passWord2)){ //如果用户两次输入密码不一致,则跳转到注册原页面register.jsp,即实现未跳转效果 response.sendRedirect("register.jsp"); } try{ // 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); //此处采用无用户名和密码验证方式登陆 @SuppressWarnings("deprecation") DB db = mongoClient.getDB( "library" ); //连接到数据库library DBCollection coll = db.getCollection("userInfo"); //获取library数据库中集合userInfo System.out.println("Collection userInfo selected successfully"); DBObject user = new BasicDBObject();//定义一个Bson变量,用于存储注册的用户名和密码 user.put("username", userName1); user.put("password", passWord1); coll.insert(user); //向集合userInfo中插入注册用户信息 response.sendRedirect("register_success.jsp"); //注册成功后,自动跳转到注册成功提示页面 }catch(Exception e){ System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } %> </body> </html>
La page d'invite d'inscription réussie register_success.jsp ; le code de la page est le suivant :
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>注册成功</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="css/login.css"> </head> <body> <div class="content"> <div class="panel1"> <h1>恭喜您,您已经成功注册简单购物车系统</h1> </div> <div class="register"> <button onclick="window.location.href='login.jsp'">返回</button> </div> </div> </body> </html>
2.6.3 Afficher les produits
Tout d'abord, jetez un œil au code de la page Welcome.jsp sur la page d'accueil des achats :
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>购物页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <frameset rows="30%,60%,10%" cols="*" frameborder="no" border="0" framespacing="0"> <frame src="header.jsp"> <frame src="main_shop.jsp"> <frame src="bottom.jsp"> </frameset> <body> </body> </html>
Le code de la page header.jsp sur la page d'accueil :
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312" pageEncoding="gb2312"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title></title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <meta http-equiv="Content-Type" content="text/html;charset=gb2312"> </head> <body topmargin="0" leftmargin="0" rightmargin="0" style="background-color: #F2F2F2;overflow-x:hidden;overflow-y:hidden"> <form action=""> <table width="100%" height="79" border="0" cellpadding="0" cellspacing="0" align=center> <tr> <td bgcolor="F9A859" valign="top"> <table width="100%" height="100" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#466BAF"> <tr> <td align="center" style="font-size:60px;color: white;"> 简单购物车系统 </td> </tr> </table> </td> </tr> <tr> <td bgcolor="F9A859" valign="top"> <table width="100%" height="50" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#CC865E"> <tr> <td align="center" style="font-size:20px;color: white;"> 欢迎你访问!</td> </tr> </table> </td> </tr> </table> </form> </body> </html>
Le code de la page bottom.jsp sur la queue :
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'bottom.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body style="background-color: #F2F2F2;overflow-x:hidden;overflow-y:hidden"> <hr> <h4 style="width:100%;text-align:center">Copyright @2016 舞动的心</h4> </body> </html>
Corps intermédiaire de la page d'accueil main_shop.jsp code de la page ;
<%@ page contentType="text/html;charset=GBK" import="java.util.*,com.liuzhen.shop.MongodbBean" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String cp=request.getParameter("cp");//cp为分页数 //int page_number = DBBean.getTotalPage(); //int currpage = page_number; int currpage=(cp==null||cp=="")?1:Integer.parseInt(cp); String[][] ss = MongodbBean.getGoodList(currpage); int n = MongodbBean.getlength(ss); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>购物页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="css/login.css"> </head> <body style="overflow-x:hidden;overflow-y:hidden"> <div class="content"> <div class="panel1"> <table border="1" align="center"> <tr> <th width="30%" align="center">物品编号</th> <th width="30%" align="center">物品名</th> <th width="30%" align="center">定价</th> <th width="50%" align="center">求购</th> </tr> <% for(int i=0;i<n;i++) { %> <tr> <td height="30%" align="center"><%= ss[i][0] %></td> <td height="30%" align="center"><%= ss[i][1] %></td> <td height="30%" align="center"><%= ss[i][2] %></td> <td height="30%" align="center"><a href="Buy.jsp?sid=<%= ss[i][0] %>&action=buy">购买</a></td> </tr> <% } %> </table> <% int tp=MongodbBean.getTotalPage(); if(currpage!=1) { %> <a href="main_shop.jsp?cp=<%=currpage-1%>">上一页</a> <% } if(currpage!=tp) { %> <a href="main_shop.jsp?cp=<%=currpage+1%>">下一页</a> <% } %> <form action="main_shop.jsp" name="myform"> <select name="cp" onchange="document.myform.submit()"> <% for(int i=1;i<=tp;i++) { %> <option value="<%=i%>" <%= (i==currpage)?"selected":"" %>>第<%=i%>页</option> <% } %> </select> </form> </div> <div class="register"> <button onclick="window.location.href='Cart.jsp'">查看购物车</button> </div> </div> </body> </html>
La fonction de visualisation des produits est principalement implémentée en appelant la classe MongodbBean.java. Le code spécifique est le suivant :
package com.liuzhen.shop; import java.util.Map; import java.util.Vector; import com.mongodb.*; public class MongodbBean { static int span=5; //设定JSP页面表单单页显示物品信息行数为5行 //返回数据库中全部货物编号sid public static String[] getGood_sid(){ String[] good_sid_temporary = new String[100]; //定义一个长度为100的暂时存放货物编号的一维数组 // 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); //此处采用无用户名和密码验证方式登陆 @SuppressWarnings("deprecation") DB db = mongoClient.getDB( "library" ); //连接到数据库library DBCollection coll = db.getCollection("good"); //获取library数据库中集合good System.out.println("Collection userInfo selected successfully"); DBCursor cursor = coll.find(); //查询集合good中文档信息 int i=0; while (cursor.hasNext()) { //检索集合good中所有文档信息 DBObject show = cursor.next(); @SuppressWarnings("rawtypes") Map show1 = show.toMap(); //将检索结果show(Bson类型)转换为Map类型 String tosid = (String)show1.get("sid"); //提取Map中字段名为sid的属性值 good_sid_temporary[i] = tosid; //将数据库中查询的货物编号存储入数组good_sid i++; } String[] good_sid = new String[i]; //根据查询数据遍历集合中文档信息i值来确定最终返回数组长度 for(int j=0;j<i;j++){ good_sid[j] = good_sid_temporary[j]; } return good_sid; } //返回数据库中全部货物名称sname public static String[] getGood_sname(){ String[] good_sname_temporary = new String[100]; //定义一个长度为100的暂时存放货物名称的一维数组 // 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); //此处采用无用户名和密码验证方式登陆 @SuppressWarnings("deprecation") DB db = mongoClient.getDB( "library" ); //连接到数据库library DBCollection coll = db.getCollection("good"); //获取library数据库中集合good System.out.println("Collection userInfo selected successfully"); DBCursor cursor = coll.find(); //查询集合good中文档信息 int i=0; while (cursor.hasNext()) { //检索集合good中所有文档信息 DBObject show = cursor.next(); @SuppressWarnings("rawtypes") Map show1 = show.toMap(); //将检索结果show(Bson类型)转换为Map类型 String tosname = (String)show1.get("sname"); //提取Map中字段名为sname的属性值 good_sname_temporary[i] = tosname; //将数据库中查询的货物名称存储入数组good_sname i++; } String[] good_sname = new String[i]; //根据查询数据遍历集合中文档信息i值来确定最终返回数组长度 for(int j=0;j<i;j++){ good_sname[j] = good_sname_temporary[j]; } return good_sname; } //返回数据库中全部货物价格sprice public static String[] getGood_sprice(){ String[] good_sprice_temporary = new String[100]; //定义一个长度为100的暂时存放货物价格的一维数组 // 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); //此处采用无用户名和密码验证方式登陆 @SuppressWarnings("deprecation") DB db = mongoClient.getDB( "library" ); //连接到数据库library DBCollection coll = db.getCollection("good"); //获取library数据库中集合good System.out.println("Collection userInfo selected successfully"); DBCursor cursor = coll.find(); //查询集合good中文档信息 int i=0; while (cursor.hasNext()) { //检索集合good中所有文档信息 DBObject show = cursor.next(); @SuppressWarnings("rawtypes") Map show1 = show.toMap(); //将检索结果show(Bson类型)转换为Map类型 String tosprice = (String)show1.get("sprice"); //提取Map中字段名为sname的属性值 good_sprice_temporary[i] = tosprice; //将数组库中查询的货物价格存储入数组good_sprice i++; } String[] good_sprice = new String[i]; //根据查询数据遍历集合中文档信息i值来确定最终返回数组长度 for(int j=0;j<i;j++){ good_sprice[j] = good_sprice_temporary[j]; } return good_sprice; } //根据分页当前page数,从数据库中获取当前单个页面货物种类的具体信息,并以二维数据返回具体信息 public static String[][] getGoodList(int page) { String[][] result=null; Vector<String[]> v=new Vector<String[]>(); //定义一个Vector集合,一个记录存放一个货物的具体信息 String[] good_sid = getGood_sid(); //获取货物编号 String[] good_sname = getGood_sname(); //获取货物名称 String[] good_sprice = getGood_sprice(); //获取货物价格 int len = good_sid.length; for(int i=0;i<span;i++){ int t = (page-1)*span+i; //获取货物编号 if(t >= len){ //如果当前货物编号大于数据库中已有编号,则跳出循环 break; } String[] good_temp=new String[3]; //定义一个长度为3的数组,用于存放一个物品的编号、名称、价格信息 good_temp[0]=good_sid[t]; good_temp[1]=good_sname[t]; good_temp[2]=good_sprice[t]; v.add(good_temp); //将1个物品的信息存入Vector集合中 } int size = v.size(); result=new String[size][]; //根据Vercotr大小,给result指定行数大小 for(int j=0;j<size;j++) { //返回Vector中一个值(其中即表示一个物品的sid,名称和价格),并赋值给result[j],即result二维数组一行表示一个物品具体信息 result[j]=(String[])v.elementAt(j); } return result; } //根据货物sid,返回其价格信息 public static double getPrice(String sid) { double price = 0; //定义返回物品的价格 String[] good_sprice = getGood_sprice(); //获取全部物品的价格 int i = Integer.parseInt(sid); //将String类型的物品编号sid转换为int型 String sprice = good_sprice[i]; //根据sid获取物品的价格 price = Double.parseDouble(sprice); //将String类型的价格信息转换为double型,并赋值给price return price; } //根据货物sid,返回货物的名称和价格,一一个长度为2的数组返回 public static String[] getDetail(String sid) { String[] good_detail=null; good_detail = new String[2]; String[] good_sname = getGood_sname(); //获取全部物品名称 String[] good_sprice = getGood_sprice(); //获取全部物品价格 int i = Integer.parseInt(sid); //将String类型的物品编号sid转换为int型 good_detail[0] = good_sname[i]; //根据物品编号sid,得到名称存入数组good_detail中 good_detail[1] = good_sprice[i]; //根据物品编号sid,得到物品价格存入数组good_detail中 return good_detail; } //通过查询数据库中货物种类数目,以5行为一页,返回现有货物页数 public static int getTotalPage() { int page = 0; String[] good_sid = getGood_sid(); int len = good_sid.length; page = len/span+((len%span==0)?0:1); //以span(span值为5)行为一页,计算货物具有的页数page return page; } //返回一个二维数组的行数大小 public static int getlength(String[][] a){ return a.length; } public static void main(String args[]){ // String[] good_sid = getGood_sid(); //定义一个存放货物编号的一维数组 // String[] good_sname = getGood_sname(); //定义一个存放货物名称的一维数组 // String[] good_sprice = getGood_sprice(); //定义一个存放货物价格的一维数组 // // for(int j=0;j<10;j++){ // System.out.println("货物sid:"+good_sid[j]); // System.out.println("货物sname:"+good_sname[j]); // System.out.println("货物是price:"+good_sprice[j]); // System.out.println("**************************"); // System.out.println(); // } System.out.println("分页数目(测试):"+MongodbBean.getTotalPage()); String[][] ss=MongodbBean.getGoodList(MongodbBean.getTotalPage()); for(int i=0;i<ss.length;i++) { System.out.println(ss[i][0]); System.out.println(ss[i][1]); System.out.println(ss[i][2]); System.out.println("***********"); } int n = ss.length; System.out.println("数组长度为:"+n); } }
2.6.4 Acheter des marchandises<. 🎜>
package com.liuzhen.shop; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class ShopCartBean { //ShopCartBean类构造函数 public ShopCartBean(){ } //定义一个存储整形数值的键值对hashMap HashMap<String, Integer> hm=new HashMap<String, Integer>(); //定义购物车总物品总价格,初始值为0 double total=0; //添加购买的物品,存入哈希表hm中,并计算购买成功后的总价格 public void add(String sid) { if(hm.containsKey(sid)) { //如果hm中包含键值对sid,则获取该键值对中的值,并加1 int xc=((Integer)hm.get(sid)).intValue()+1; //把上面获取的xc值存入hm中 hm.put(sid,new Integer(xc));; } else { //如果hm中不包含键值对sid,则将该键值对存入hm中,并该键值对值为1 hm.put(sid,new Integer(1)); } total=total+MongodbBean.getPrice(sid); //购买物品后,计算物品总价格 } //获取购物车当前物品总价格 public double getTotal() { return total; } //根据物品编号sid,设定购买物品数目,并将购买数目存入哈希表hm中,并更新当前购物车物品总价格 public void setCount(int c,String sid) { int yc=((Integer)hm.get(sid)).intValue(); total=total+(c-yc)*MongodbBean.getPrice(sid); hm.put(sid,new Integer(c)); } //根据物品编号sid,从购物车中删除物品,并删除存入哈希表hm中物品的数目,以及当前购物车物品总价格 public void deleteFromCart(String sid) { int yc=((Integer)hm.get(sid)).intValue(); total=total-yc*MongodbBean.getPrice(sid); hm.remove(sid); } //判断当前哈希表hm是否为空 public boolean isEmpty() { return hm.isEmpty(); } //返回用户购买物品的详细信息(物品编号、物品名称、物品价格、物品购买数量) public String[][] getCart() { //定义一个set集合,存放哈希表hm中键值对的键名称 Set<String> ks=hm.keySet(); //定义一个迭代器,用于遍历set集合 Iterator<String> ii=ks.iterator(); //获取哈希表hm中键值对的个数 int size=hm.size(); //定义二维数组,存放购买物品的信息 String rs[][]=new String[size][]; for(int i=0;i<size;i++) { String sid=(String)ii.next(); //存放键值对的键名,即货物的编号sid String[] sa=new String[4]; sa[0]=sid; //获取购买货物sid String[] sat=MongodbBean.getDetail(sid); //根据货物sid,获取购买货物的名称和价格 sa[1]=sat[0]; //获取购买货物名称 sa[2]=sat[1]; //获取购买货物价格 sa[3]=((Integer)hm.get(sid)).toString(); //获取购买货物数量 rs[i]=sa; //将上述单个物品详细存入二维数组rs中 } return rs; } }
<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8" pageEncoding="gb2312"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <jsp:useBean id="cart" scope="session" class="com.liuzhen.shop.ShopCartBean"/> <% String action=request.getParameter("action"); if(action==null) { %> <jsp:forward page="main_shop.jsp"/> <% } else if(action.trim().equals("buy")) { String sid=request.getParameter("sid"); cart.add(sid.trim()); %> <jsp:forward page="main_shop.jsp"/> <% } else if(action.trim().equals("gc")) { String sid=request.getParameter("sid"); String count=request.getParameter("count"); cart.setCount(Integer.parseInt(count),sid); %> <jsp:forward page="Cart.jsp"/> <% } else if(action.trim().equals("del")) { String sid=request.getParameter("sid"); cart.deleteFromCart(sid); %> <jsp:forward page="Cart.jsp"/> <% } %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title></title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> </body> </html>
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312" import="com.liuzhen.shop.MongodbBean" pageEncoding="gb2312"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <jsp:useBean id="cart" scope="session" class="com.liuzhen.shop.ShopCartBean"/> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>购物车</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <meta http-equiv="Content-Type" content="text/html;charset=gb2312"> <link rel="stylesheet" type="text/css" href="css/login.css"> </head> <body> <div class="content"> <div class="panel1"> <% if(cart.isEmpty()) { %> <font color="red" size="20">购物车中没有任何商品!!!</Font> <% } else { %> <h2>购物车</h2> <table border="1"> <tr> <td width="27%" align="center">物品编号</td> <td width="27%" align="center">物品名</td> <td width="27%" align="center">定价</td> <td width="27%" align="center">数量</td> <td width="27%" align="center">求购</td> </tr> <% String[][] ssa=cart.getCart(); for(int i=0;i<ssa.length;i++) { %> <tr> <td height="30%" align="center"><%= ssa[i][0] %></td> <td height="30%" align="center"><%= ssa[i][1] %></td> <td height="30%" align="center"><%= ssa[i][2] %></td> <td> <form action="Buy.jsp" method="post"> <input type="text" name="count" value="<%= ssa[i][3] %>"> <input type="hidden" name="sid" value="<%= ssa[i][0] %>"> <input type="hidden" name="action" value="gc"> </form> </td> <td><a href="Buy.jsp?sid=<%= ssa[i][0] %>&action=del">删除</a></td> </tr> <% } %> </table> <br> <br> 本订单总价为:<%= Math.round(cart.getTotal()*100)/100.0%> <% } %> <br> <div class="register"> <button onclick="window.location.href='main_shop.jsp'">继续购物</button> </div> </div> </div> </body> </html>