第5个练习 卡片管理系统(无框架)
第5个练习的记录
效果图1
效果图2
效果图3
效果图4 根据用户输入,跳转到相应的分页页面
效果图5 分页查询 + 自定义条数 + 条件查询

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>介绍页面</title> 7 <script src="js/jquery-1.11.3.min.js"></script> 8 <link rel="stylesheet" href="css/bootstrap.min.css"> 9 <script src="js/bootstrap.min.js"></script> 10 </head> 11 <body> 12 <!-- 57 【列表】 对目标进行描述。目标也有顺序,为了练习,放在无序列表。语法:无序列表。--> 13 <ul type="circle"> 14 <li class="text-primary">目标1:从教程中学到知识点,将其写出来</li> 15 <li class="text-primary">目标2:从基础的知识点开始进行</li> 16 <li class="text-primary">目标3:把编程当成战旗来对待</li> 17 </ul> 18 19 <div class="text-center">博客5</div> 20 21 <!-- 58 【列表】 对要求进行描述。根据我的自定义描述进行记录。语法:HTML5中是描述列表--> 22 <dl class="text-center"> 23 <dt>要求1</dt> <!-- 项目名 --> 24 <dd> <!-- 描述项目 --> 25 前端:HTML5、CSS、js、jQ、AJAX、JSON <br> 26 后端:Java、JSP、Servlet、JavaBean、MySQL 27 </dd> 28 29 <dt>要求2</dt> 30 <dd> 31 后端不使用框架,前端使用Bootstrap3 32 </dd> 33 34 <dt>要求3</dt> 35 <dd> 36 Word记录体验、Excel记录进度、SVN管理版本 37 </dd> 38 </dl> 39 40 <div class="text-center">后续新增</div> 41 <dl class="text-center"> 42 <dt>要求4</dt> <!-- 项目名 --> 43 <dd> <!-- 描述项目 --> 44 Java:JavaMail、junit4、反射 + XML 45 </dd> 46 </dl> 47 48 <!-- 58 【列表】这个项目最主要的两个模块。按照先后顺序进行排序。语法:有序列表。 --> 49 <strong>这个项目主要模块有:</strong><br> 50 <ol type="I"> 51 <li>管理页面</li> 52 <li>分页页面</li> 53 </ol> 54 55 <div> <a href="CardServlet">进入管理页面</a> </div> 56 </body> 57 </html>

1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>游戏王卡片管理系统</title> 8 <base href="${pageContext.request.contextPath}/"> 9 <script src="js/jquery-1.11.3.min.js"></script> 10 <link rel="stylesheet" href="css/bootstrap.min.css"> 11 <script src="js/bootstrap.min.js"></script> 12 <script src="js/demo1.js"></script> 13 <link rel="stylesheet" href="css/demo1.css" media="screen"/> 14 </head> 15 <body> 16 <jsp:include page="header.jsp" flush="true"/> <!-- 引入header文件 --> 17 <jsp:include page="searchWord.jsp" flush="true"/> <!-- 5 【条件查询】 --> 18 <!-- 48 【表格类】 鼠标悬状态、斑马线条纹、添加边框 --> 19 <table width="100%" class="table table-hover table-striped table-bordered"> <!--【查询所有】博客2.1 --> 20 <thead> <!-- 【表格】 表格的标题--> 21 <tr> 22 <!-- 30 【全选】 勾选后,将表格主体中的复选框全部选定 --> 23 <th><input type="checkbox" onclick="checkBox()" id="checkAll"/></th> 24 <th>ID</th> 25 <th>卡片名</th> 26 <th>属性</th> 27 <th>种族</th> 28 <th>攻击力</th> 29 <th>守备力</th> 30 <th> <!-- 45【添加】在模态框中进行添加操作。比原来的【添加】更便捷 --> 31 <a href="#" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#AddModal">添加</a> 32 <!-- 49 【全选删除】 勾选后,删除数据表中的全部数据。button标签有闪退,换成a标签--> 33 <a hrer="#" class="btn btn-primary btn-xs" onclick="ajaxCheckBox()">全选</a> 34 </th> 35 </tr> <!-- 表格标题中的行的结束--> 36 </thead> 37 38 <tbody> <!-- 【表格】 表格主体 --> 39 <tr> 40 <c:forEach items="${list }" var="list"> <!-- 查询所有--> 41 <tr> 42 <td><input type="checkbox" name="checkOne"> </td> <!-- 29【复选框】 --> 43 <td>${list.card_id }</td> 44 <td>${list.card_name }</td> 45 <td>${list.card_attribute }</td> 46 <td>${list.card_race }</td> 47 <td>${list.card_atk }</td> 48 <td>${list.card_def }</td> 49 <td> <!-- 46【修改】 在模态框中进行修改操作。比原来的【修改】更便捷。47【删除】 类似 --> 50 <a href="#" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#cardUpdateModal" onclick="showFormCard(${list.card_id})">修改</a> 51 <a hrer="#" class="btn btn-primary btn-xs" onclick="ajaxDelCard(${list.card_id})">删除</a> 52 </td> 53 </tr> 54 </c:forEach> 55 </tr> 56 </tbody> 57 </table> <!-- 【查询所有】的table结束标签 --> 58 59 当前共有 ${requestScope.rowcount}条 <!-- 6【所有条数】--> 60 <a href="page?currentPage=1">分页页面</a> <!-- 17 【分页查询】 --> 61 <jsp:include page="footer.jsp" flush="true"/> <!-- 引入footer文件--> 62 63 <!-- 45【添加】 在模态框中填写表单、提交表单。需要表单有id才可能通过id进行操作。 --> 64 <!-- 解释版:弹出的窗口就是模态框。 --> 65 <div class="modal fade" id="AddModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 66 <div class="modal-dialog"> 67 <div class="modal-content"> 68 <div class="modal-header"> 69 70 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 71 × 72 </button> 73 <h4 class="modal-title" id="myModalLabel"> 74 添加数据 75 </h4> 76 </div> 77 <div class="modal-body"> 78 79 <!-- 45【添加】 模态框中的表单form。 --> 80 <form class="form-horizontal" id="modaladdform"> 81 <div> 82 <label>card_id:</label> 83 <input type="text" id="card_id" name="card_id" autocomplete="off"> 84 </div> 85 86 <div> 87 <label>card_name:</label> 88 <input type="text" id="card_name" name="card_name" autocomplete="off"> 89 </div> 90 91 <div> 92 <label>card_attribute:</label> 93 <input type="text" id="card_attribute" name="card_attribute" autocomplete="off"> 94 </div> 95 96 <div> 97 <label>card_race:</label> 98 <input type="text" id="card_race" name="card_race" autocomplete="off"> 99 </div> 100 101 <div> 102 <label>card_atk:</label> 103 <input type="text" id="card_atk" name="card_atk" autocomplete="off"> 104 </div> 105 106 <div> 107 <label>card_def:</label> 108 <input type="text" id="card_def" name="card_def" autocomplete="off"> 109 </div> 110 </form> 111 112 </div> 113 114 <div class="modal-footer"> 115 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 116 <button type="button" class="btn btn-primary" onclick="modalAddCard()">添加</button> 117 </div> 118 119 </div> 120 </div> 121 </div> <!-- 45【添加】 模态框的结束div,模态框中包含form --> 122 123 <!-- 46 【修改】 在模态框中修改表单、提交表单。需要表单有id才可能通过id进行操作。 --> 124 <div class="modal fade" id="cardUpdateModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel2" aria-hidden="true"> 125 <div class="modal-dialog"> 126 <div class="modal-content"> 127 <div class="modal-header"> 128 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 129 × 130 </button> 131 <h4 class="modal-title" id="myModalLabel2"> 132 模态框标题:修改 133 </h4> 134 </div> 135 <div class="modal-body"> 136 137 <!-- 46 【修改】 模态框中的表单form--> 138 <form class="form-horizontal" id="modalUpdate_form"> 139 <div> 140 <label>card_id:</label> 141 <input type="text" id="card_id2" name="card_id" autocomplete="off"> 142 </div> 143 144 <div> 145 <label>card_name:</label> 146 <input type="text" id="card_name2" name="card_name" autocomplete="off"> 147 </div> 148 149 <div> 150 <label>card_attribute:</label> 151 <input type="text" id="card_attribute2" name="card_attribute" autocomplete="off"> 152 </div> 153 154 <div> 155 <label>card_race:</label> 156 <input type="text" id="card_race2" name="card_race" autocomplete="off"> 157 </div> 158 159 <div> 160 <label>card_atk:</label> 161 <input type="text" id="card_atk2" name="card_atk" autocomplete="off"> 162 </div> 163 164 <div> 165 <label>card_def:</label> 166 <input type="text" id="card_def2" name="card_def" autocomplete="off"> 167 </div> 168 </form> 169 170 </div> <!-- 模态框中的modal-body的结束的div标签 --> 171 172 <div class="modal-footer"> 173 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 174 <button type="button" class="btn btn-primary" onclick="modalUpdateSubmit()">修改</button> 175 </div> 176 177 </div> 178 </div> 179 </div> <!-- 46 【修改】 的结束div --> 180 181 <script type="text/javascript"> 182 function modalAddCard() { // 45【添加】 获得【添加】 - 模态框 - 表单中填写的数据 183 $.ajax({ 184 url:"AddServlet2", 185 type:"POST", 186 data:$("#modaladdform").serialize(), // 模态框中的form的id 187 success:function(data) { 188 var isExist = data.isExist; // 获得servlet中返回的值 189 if(isExist){ // 添加成功时,返回的值为true 190 $("#AddModal").modal("hide"); // 通过模态框的id,隐藏模态框 191 } // 添加失败时,都运行不到这里? 192 }, 193 dataType:"json" 194 }); 195 } 196 197 function showFormCard(id) { // 46 【修改】 打开模态框时显示"准备修改的内容" 198 $.ajax({ 199 type:"get", 200 url:"UpdateServlet2", 201 data:{"card_id":id}, 202 success:function(data) { // 返回通过id查询到的卡片数据 203 $("#card_id2").val(data.card_id); // 将返回的数据,设置给form 204 $("#card_name2").val(data.card_name); 205 $("#card_attribute2").val(data.card_attribute); 206 $("#card_race2").val(data.card_race); 207 $("#card_atk2").val(data.card_atk); 208 $("#card_def2").val(data.card_def); 209 }, 210 dataType:"json" 211 }); 212 } 213 214 function modalUpdateSubmit() { // 46 【修改】 将从属于【修改】的表单中获得的数据提交到服务器 215 $.ajax({ 216 type:"POST", 217 url:"modalUpdateSubmitServlet", 218 data:$("#modalUpdate_form").serialize(), // 模态框修改,即第二个模态中的表单 219 success:function() { // 没有返回值 220 alert("修改数据并提交成功"); // 直接调用函数,即弹出警告框 221 $("#cardUpdateModal").modal("hide"); 222 } // 由于没有返回值,这里就不用写,和json 223 }); 224 } 225 226 function ajaxDelCard(id) { // 47 【删除】使用AJAX提交id到服务器 227 $.ajax({ 228 type:"POST", 229 url:"DeleteServlet", 230 data:{"id":id}, // servlet接收的是id,不是card_id。以后端为主,所以目前不改动servlet 231 success:function() { // 返回通过id查询到的卡片数据 232 alert("删除成功"); 233 } 234 }); 235 } 236 237 function checkBox(){ // 30 【全选】 当全选的复选框勾选时,设置主体中的复选框的值为勾选,为false。 238 var checkAllEle = document.getElementById("checkAll"); 239 if(checkAllEle.checked==true){ 240 var checkOnes = document.getElementsByName("checkOne"); 241 for(var i=0;i<checkOnes.length;i++){ 242 checkOnes[i].checked=true; 243 } 244 }else{ // 否则,即全不选,主体中的复选框的值什么都不传,并不是false。 245 var checkOnes = document.getElementsByName("checkOne"); 246 for(var i=0;i<checkOnes.length;i++){ 247 checkOnes[i].checked=false; // 由于手动设置为false,最终才为false 248 } 249 } 250 } 251 252 var checkOnes = document.getElementsByName("checkOne"); // 49 【全选删除】 全选删除和选择性删除都要用 253 254 function ajaxCheckBox() { // 49 【全选删除】 提交【全选】复选框的勾选状态。 255 var checkAllEle = document.getElementById("checkAll"); // 对勾选全部与否进行不同的操作 256 var ajaxCheck = false; 257 if(checkAllEle.checked==true) { 258 ajaxCheck = true; 259 alert("已经全部勾选") 260 } else { 261 alert("没有全部勾选") 262 } 263 264 $.ajax({ 265 type:"POST", 266 url:"AllAjaxDeleteServlet", 267 data:{"BooleValue":ajaxCheck}, 268 success:function() { 269 alert("如果页面全部勾选,控制台输入为true。否则为false"); 270 } 271 }); 272 } 273 274 </script> 275 276 </body> 277 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>高级搜索页面</title> 7 </head> 8 <body> 9 <!-- 高级搜索,选项有:卡片名,属性,种族,都是可选项 --> 10 <form action="AdvancedSearch" method="post"> 11 <div> 12 <label>卡片名</label> 13 <input type="text" name="card_name" placeholder="卡片名" > 14 </div> 15 16 <div> 17 <label>属性</label> 18 <input type="text" name="card_attribute" placeholder="属性" > 19 </div> 20 21 <div> 22 <label>种族</label> 23 <input type="text" name="card_race" placeholder="种族" > 24 </div> 25 26 <input type="submit" value="查询" > 27 <input type="reset" value="重置"> 28 </form> 29 </body> 30 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>页面的头部</title> 8 <base href="${pageContext.request.contextPath}/"> 9 <script src="js/jquery-1.11.3.min.js"></script> 10 <link rel="stylesheet" href="demo1.css" media="screen" /> 11 </head> 12 <body> 13 14 <div class="row"> <!-- 44 【网格系统】 将公告栏、帮助信息、登录、注册在一行中显示 --> 15 <div class="col-md-4"> 16 <input type="button" value="公告栏" id="ggl"> 17 <!-- 27 【帮助信息】 悬停时改变颜色、单击时弹出警告框--> 18 <font id="helpinfo">帮助信息</font> </br> 19 20 <!-- 26 【隐藏公告栏】默认为隐藏,点击可显示。31 【公告栏】 对信息的样式进行设置 --> 21 <font id="textnotice" style="display:none" color="black" size="3" face="微软雅黑"> 22 <b>公告栏:对收藏的卡片进行管理</b> 23 <a href="page?currentPage=1"> 24 <img src="img/heimodao.png" width="51px" height="75px" alt="怪兽卡图片"/> 25 </a> 26 </font> 27 </div> 28 29 <div class="col-md-4"> 30 <div class="text-center"> <!-- 43【对齐格式】 居中对齐 --> 31 <a href="http://www.baidu.com">百度一下</a> 32 </div> 33 </div> 34 35 <div class="col-md-4"> 36 <div class="text-right"> <!-- 43 【对齐格式】 右对齐 --> 37 <c:if test="${empty user }"> <!-- 22 【用户名显示】 --> 38 <a href="login.jsp">登录</a> <!-- 7【用户登录】 --> 39 <a href="register.jsp">注册</a> <!-- 11【用户注册】 --> 40 </c:if> 41 <c:if test="${!empty user }"> 42 欢迎您,${user.username } 43 <a href="LogoutServlet">退出</a> 44 </c:if> 45 </div> 46 </div> 47 </div> 48 49 </br> 50 </br> 51 52 <script type="text/javascript"> 53 $(function(){ // jQuery 54 $("#ggl").click(function(){ // 26 【公告栏】 显示/隐藏公告栏 55 $("#textnotice").toggle(1000); 56 }); 57 58 $("#helpinfo").hover(function(){ // 27 【帮助信息】 悬停,改变字体颜色 59 $("#helpinfo").css("color","blue"); 60 },function(){ 61 $("#helpinfo").css("color","black"); 62 }); 63 64 $("#helpinfo").click(function(){ // 27 【帮助信息】 单击,弹出警告框 65 alert("正确完善中,敬请期待"); 66 }); 67 68 }); // jQuery的结束括号 69 </script> 70 71 </body> 72 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>页面的尾部</title> 7 <script src="js/demo1.js"></script> 8 <link rel="stylesheet" href="css/demo1.css" media="screen" /> 9 </head> 10 <body onload="startTime()"> 11 12 <div id="txt"></div> <!-- 3【显示时间】和 4【时间格式】--> 13 14 </body> 15 </html>

1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>分页查询的页面</title> 8 <base href="${pageContext.request.contextPath}/"> <!-- target="_blank" --> 9 <script src="js/jquery-1.11.3.min.js"></script> 10 <link rel="stylesheet" href="css/bootstrap.min.css" /> 11 <script src="js/bootstrap.min.js"></script> 12 <script src="js/demo1.js"></script> 13 <link rel="stylesheet" href="css/demo1.css" media="screen" /> 14 </head> 15 <body> 16 <!-- 18 【分页查询 + 条件查询】--> 17 <form action="page" method="post"> 18 <div> 19 <label>条件查询</label> 20 <input type="text" name="card_name" placeholder="请在此输入卡片名"> 21 <!-- 55 【下拉条数】 选择显示的条数。让用户根据实际情况选择。 --> 22 <select name="currentCount"> 23 <option value="3">3条</option> 24 <option value="5">5条</option> 25 </select> <!-- 【分页查询+条件查询】按钮,被55【下拉列表】修改 --> 26 <input class="btn btn-primary btn-xs" type="submit" value="条件+条数"> 27 </div> 28 </form> 29 30 <table width="100%" class="table table-hover table-bordered"> 31 <thead> 32 <tr> 33 <td>ID</td> 34 <td>卡片名</td> 35 <td>属性</td> 36 <td>种族</td> 37 <td>攻击力</td> 38 <td>守备力</td> 39 <td> 40 <!-- 45【模态框添加】 打开模态框 --> 41 <a href="#" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#AddModal">添加</a> 42 </td> 43 </tr> 44 </thead> 45 46 <tbody> 47 <tr> 48 <c:forEach items="${pageBean.cardList }" var="list"> 49 <tr> 50 <td>${list.card_id }</td> 51 <td>${list.card_name }</td> 52 <td>${list.card_attribute }</td> 53 <td>${list.card_race }</td> 54 <td>${list.card_atk }</td> 55 <td>${list.card_def }</td> 56 57 <td> 58 <!-- 46 【模态框修改】 --> 59 <a href="#" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#myUpdateModal" onclick="showFormCard(${list.card_id})">修改</a> 60 <a hrer="#" class="btn btn-primary btn-xs" onclick="ajaxDelCard(${list.card_id})">删除</a> 61 </td> 62 </tr> 63 </c:forEach> 64 </tr> 65 </tbody> 66 67 </table> 68 <div> <a href="page?currentPage=1">第一页</a> </div> 69 <div> <a href="page?currentPage=${pageBean.totalPage}">最后一页</a> </div> 70 <div> <a href="CardServlet">管理页面</a> </div> 71 72 <!-- 45【模态框添加】 模态框:模态框id、表单form、提交按钮 --> 73 <div class="modal fade" id="AddModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 74 <div class="modal-dialog"> 75 <div class="modal-content"> 76 <div class="modal-header"> 77 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 78 × 79 </button> 80 <h4 class="modal-title" id="myModalLabel"> 81 模态框的标题:添加数据 82 </h4> 83 </div> 84 <div class="modal-body"> 85 <!-- 45【模态框添加】 模态框中的表单form:id、各项数据 --> 86 <form class="form-horizontal" id="modaladdform"> 87 <div> 88 <label>card_id:</label> 89 <input type="text" id="card_id" name="card_id" autocomplete="off"> 90 </div> 91 92 <div> 93 <label>card_name:</label> 94 <input type="text" id="card_name" name="card_name" autocomplete="off"> 95 </div> 96 97 <div> 98 <label>card_attribute:</label> 99 <input type="text" id="card_attribute" name="card_attribute" autocomplete="off"> 100 </div> 101 102 <div> 103 <label>card_race:</label> 104 <input type="text" id="card_race" name="card_race" autocomplete="off"> 105 </div> 106 107 <div> 108 <label>card_atk:</label> 109 <input type="text" id="card_atk" name="card_atk" autocomplete="off"> 110 </div> 111 112 <div> 113 <label>card_def:</label> 114 <input type="text" id="card_def" name="card_def" autocomplete="off"> 115 </div> 116 </form> 117 </div> <!-- class="modal-body"所在的div结束标签 --> 118 119 <div class="modal-footer"> 120 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 121 <button type="button" class="btn btn-primary" onclick="modalAddCard()">添加</button> 122 </div> 123 124 </div> 125 </div> 126 </div> <!-- 45【模态框添加】 模态框的结束div,模态框中包含form --> 127 128 <!-- 46 【模态框修改】 模态框id、表单form、提交按钮 --> 129 <div class="modal fade" id="myUpdateModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel2" aria-hidden="true"> 130 <div class="modal-dialog"> 131 <div class="modal-content"> 132 <div class="modal-header"> 133 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 134 × 135 </button> 136 <h4 class="modal-title" id="myModalLabel2"> 137 模态框标题:修改 138 </h4> 139 </div> 140 <div class="modal-body"> 141 <!-- 46 【模态框修改】模态框中的表单form,id和45【模态框添加】模态框中的form不同 --> 142 <form class="form-horizontal" id="modalUpdate_form"> 143 <div> 144 <label>card_id:</label> 145 <input type="text" id="card_id2" name="card_id" autocomplete="off"> 146 </div> 147 148 <div> 149 <label>card_name:</label> 150 <input type="text" id="card_name2" name="card_name" autocomplete="off"> 151 </div> 152 153 <div> 154 <label>card_attribute:</label> 155 <input type="text" id="card_attribute2" name="card_attribute" autocomplete="off"> 156 </div> 157 158 <div> 159 <label>card_race:</label> 160 <input type="text" id="card_race2" name="card_race" autocomplete="off"> 161 </div> 162 163 <div> 164 <label>card_atk:</label> 165 <input type="text" id="card_atk2" name="card_atk" autocomplete="off"> 166 </div> 167 168 <div> 169 <label>card_def:</label> 170 <input type="text" id="card_def2" name="card_def" autocomplete="off"> 171 </div> 172 </form> 173 </div> <!-- class="modal-body"所在div的结束标签 --> 174 175 <div class="modal-footer"> 176 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 177 <button type="button" class="btn btn-primary" onclick="modalUpdateSubmit()">修改</button> 178 </div> 179 180 </div> 181 </div> 182 </div> <!-- 46 【模态框修改】 的结束div --> 183 184 185 <script type="text/javascript"> 186 function modalAddCard() { // 45【模态框添加】 点击链接时触发的函数 187 $.ajax({ 188 url:"AddServlet2", 189 async:true, 190 type:"POST", 191 data:$("#modaladdform").serialize(), // 模态框中的form的id 192 success:function(data) { 193 var isExist = data.isExist; // 获得servlet中返回的值 194 if(isExist){ // 添加成功时,返回的值为true 195 $("#AddModal").modal("hide"); // 通过模态框的id,隐藏模态框 196 } // 添加失败时,都运行不到这里? 197 }, 198 dataType:"json" 199 }); 200 } 201 202 function showFormCard(id) { // 46 【模态框修改】 打开模态框时显示"准备修改的内容" 203 $.ajax({ 204 type:"get", 205 url:"UpdateServlet2", 206 data:{"card_id":id}, 207 success:function(data) { // 返回通过id查询到的卡片数据 208 $("#card_id2").val(data.card_id); // 将返回的数据,设置给form 209 $("#card_name2").val(data.card_name); 210 $("#card_attribute2").val(data.card_attribute); 211 $("#card_race2").val(data.card_race); 212 $("#card_atk2").val(data.card_atk); 213 $("#card_def2").val(data.card_def); 214 }, 215 dataType:"json" 216 }); 217 } 218 219 function modalUpdateSubmit() { // 46 【模态框修改】 模态框提交按钮触发的函数 220 $.ajax({ 221 type:"POST", 222 url:"modalUpdateSubmitServlet", 223 data:$("#modalUpdate_form").serialize(), // 模态框修改,即第二个模态中的表单 224 success:function() { // 没有返回值 225 alert("修改数据并提交成功"); // 直接调用函数,即警告框 226 $("#myUpdateModal").modal("hide"); 227 } // 由于没有返回值,这里就不用写,和json 228 }); 229 } 230 231 function ajaxDelCard(id) { // 47 【删除功能】 使用的函数 232 $.ajax({ 233 type:"POST", 234 url:"DeleteServlet", 235 data:{"id":id}, // servlet接收的是id,不是card_id 236 success:function() { // 返回通过id查询到的卡片数据 237 alert("删除成功"); 238 } 239 }); 240 } 241 242 function _go() { 243 var pc = $("#pageCode").val(); // 获取文本框中的当前页码 244 if(!/^[1-9]\d*$/.test(pc)) { // 对当前页码进行整数校验 245 alert('请输入正确的页码!'); 246 return; 247 } 248 249 // ${pageBean.totalPage} 手打就不报错? 250 if(pc > ${pageBean.totalPage}) { // 判断当前页码是否大于最大页 251 alert('请输入正确的页码!'); 252 return; 253 } 254 255 location = "page?currentPage=" + pc; // location = "${pb.url}&pc=" + pc; 256 257 // http://localhost:8080/yugioh6/&pc=2 258 // http://localhost:8080/yugioh6/page?currentPage=2&&card_name=&¤tCount=3 259 } 260 261 </script> 262 263 <!-- 17 【分页查询】 --> 264 <div class="text-center"> 265 <!-- <div style="width: 380px; margin: 0 auto; margin-top: 50px;"> --> 266 <ul class="pagination" style="text-align: center; margin-top: 10px;"> 267 <c:if test="${pageBean.currentPage==1 }"> 268 <li class="disabled"> 269 <a href="javascript:void(0);" aria-label="Previous"> 270 <span aria-hidden="true">«</span> 271 </a> 272 </li> 273 </c:if> 274 <c:if test="${pageBean.currentPage!=1 }"> 275 <li> 276 <a href="${pageContext.request.contextPath }/page?currentPage=${pageBean.currentPage-1}&&card_name2=${pageBean.likename}&¤tCount=${pageBean.currentCount}" aria-label="Previous"> 277 <span aria-hidden="true">«</span> 278 </a> 279 </li> 280 </c:if> 281 282 <c:forEach begin="1" end="${pageBean.totalPage }" var="page"> 283 <c:if test="${pageBean.currentPage==page }"> 284 <li class="active"> 285 <a href="javascript:void(0);">${page}</a> 286 </li> 287 </c:if> 288 <c:if test="${pageBean.currentPage!=page }"> 289 <li> <!-- 条件查询+分页查询,后续又新加一个显示条数,3合1了 --> 290 <a href="${pageContext.request.contextPath } 291 /page? 292 currentPage=${page} 293 &&card_name2=${pageBean.likename} 294 &¤tCount=${pageBean.currentCount} 295 "> 296 ${page} 297 </a> 298 </li> 299 </c:if> 300 </c:forEach> 301 302 <c:if test="${pageBean.currentPage==pageBean.totalPage }"> 303 <li class="disabled"> 304 <a href="javascript:void(0);" aria-label="Next"> 305 <span aria-hidden="true">»</span> 306 </a> 307 </li> 308 </c:if> 309 <c:if test="${pageBean.currentPage!=pageBean.totalPage }"> 310 <li> 311 <a href="${pageContext.request.contextPath }/page?currentPage=${pageBean.currentPage+1}&&card_name2=${pageBean.likename}&¤tCount=${pageBean.currentCount}" aria-label="Next"> 312 <span aria-hidden="true">»</span> 313 </a> 314 </li> 315 </c:if> 316 317 </ul> 318 </div> <!-- 17 【分页查询】结束 --> 319 320 <div class="text-center"> 321 <%-- 共N页 到M页 --%> <!-- 跳转页数 --> 322 共${pageBean.totalPage }页 到 323 <input type="text" id="pageCode" value="${pb.pc }"/> 324 页 325 <a href="javascript:_go();" class="aSubmit">确定</a> 326 </div> 327 328 </body> 329 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>条件查询的页面</title> 7 <base href="${pageContext.request.contextPath}/"> 8 </head> 9 <body> 10 <!-- 5 【条件查询】 --> 11 <form action="CardServlet" method="post"> 12 <div> 13 <label>条件查询</label> 14 <input id="search" type="text" name="card_name" onkeyup="searchWord(this)" 15 placeholder="请在此输入条件" > 16 <input type="submit" value="查询" > 17 <a href="advanced_search.jsp">高级搜索</a> 18 <a href="CardServlet">主页</a> 19 </div> 20 21 <!-- 21【异步自动填充】 --> 22 <div id="showDiv"></div> 23 <input type="submit" value="查询" > 24 </form> 25 26 <script type="text/javascript"> 27 <!-- 21【异步自动填充-条件查询】 --> 28 function overFn(obj){ 29 $(obj).css("background","#DBEAF9"); 30 } 31 function outFn(obj){ 32 $(obj).css("background","#fff"); 33 } 34 35 function clickFn(obj){ 36 $("#search").val($(obj).html()); 37 $("#showDiv").css("display","none"); 38 } 39 40 function searchWord(obj){ 41 var word = $(obj).val(); 42 var content = ""; 43 $.post( 44 "SearchWordServlet", 45 {"word":word}, 46 function(data){ 47 if(data.length>0){ 48 for(var i=0;i<data.length;i++){ 49 content+="<div style='padding:5px;cursor:pointer' onclick='clickFn(this)' onmouseover='overFn(this)' onmouseout='outFn(this)'>"+data[i]+"</div>"; 50 } 51 $("#showDiv").html(content); 52 $("#showDiv").css("display","block"); 53 } 54 }, 55 "json" 56 ); 57 } 58 </script> 59 60 </body> 61 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>注册页面</title> 7 <base href="${pageContext.request.contextPath}/"> 8 <script src="js/jquery-1.11.3.min.js"></script> 9 <!-- 54 【表单校验】 引入的文件,共3个。在填写注册的表单时,填写错误时会有提示。防止填写错误的格式 --> 10 <script type="text/javascript" src="js/jquery-1.8.3.js"></script> 11 <!--validate.js是建立在jquery之上的,所以得先导入jquery的类库--> 12 <script type="text/javascript" src="js/jquery.validate.min.js"></script> 13 <!--引入国际化js文件--> 14 <script type="text/javascript" src="js/messages_zh.js"></script> 15 <script src="js/demo1.js"></script> 16 </head> 17 <body> 18 19 <form id="registerForm" action="RegisterServlet" method="post" > <!-- 11【用户注册】 --> 20 <div> 21 <label>用户名</label> 22 <input id="username" type="text" name="username"> 23 <span id="usernameInfo"></span> <!-- 20 【异步校验-注册用户名】 --> 24 </div> 25 26 <div> 27 <label>密码</label> 28 <input id="password1" type="password" name="password"> 29 </div> 30 31 <div> 32 <label>确认密码</label> 33 <input id="password2" type="password" name="password2" onkeyup="validate()"> 34 <span id="passwordVerify"></span> <!-- 19 【密码不同】 提示信息 --> 35 </div> 36 37 <div> <!-- 53 【完善表单】 新增邮箱、姓名、性别、出生日期。让注册时填写的信息更全面。 --> 38 <label>Email</label> 39 <input type="text" name="email" id="email"> 40 </div> 41 42 <div> 43 <label>姓名</label> 44 <input type="text" name="name"> 45 </div> 46 47 <div> 48 <label>性别</label> 49 <input type="radio" name="sex" value="男"/>男 50 <input type="radio" name="sex" value="女"/>女 51 <label for="sex" style="display: none;"></label> <!--class="error"作用是?--> 52 </div> 53 54 <div> 55 <label>出生日期</label> 56 <input type="text" name="birthday"> 57 </div> 58 59 <div> 60 <input type="submit" value="注册" name="submit" id="submit"> 61 <input type="reset" value="重置"> 62 </div> 63 64 </form> 65 66 <script type="text/javascript"> 67 68 69 $(function(){ 70 $("#registerForm").validate({ // 54 【表单校验】 71 rules:{ // 规则 72 username:{ 73 required:true, // 必须 74 minlength:2 // 最小6位 75 }, 76 password:{ 77 required:true, // 必须 78 digits:true, // 数字 79 minlength:6 // 最小1位 80 }, 81 // password2 // 不能为空 82 password2:{ 83 required:true, // 必须 84 }, 85 email:{ // 邮箱格式 86 required:true, 87 email:true 88 }, 89 name:{ // 姓名 90 required:true, 91 maxlength:12 92 }, 93 sex:{ // 性别 94 required:true 95 }, 96 birthday:{ // 请输入有效的日期 新增 97 required:true, // 必须 98 date:true 99 } 100 }, 101 messages:{ // 消息 102 username:{ 103 required:"用户名不能为空!", 104 minlength:"用户名不得少于2位!" 105 }, 106 password:{ 107 required:"密码不能为空!", 108 digits:"密码必须是整数!", 109 minlength:"密码不得少于1位!" 110 }, 111 password2:{ 112 required:"密码不能为空!", 113 }, 114 email:{ 115 required:"邮箱不能为空!", 116 email:"邮箱格式不正确!" 117 }, 118 name:{ 119 required:"姓名不能为空!", 120 maxlength:"姓名不得多于12位!" 121 }, 122 sex:{ 123 required:"性别必须勾选!" 124 }, 125 birthday:{ 126 required:"日期必须存在,日期格式(YYYY-MM-DD)", 127 date:"请输入有效的日期,日期格式(YYYY-MM-DD)" //不写这一行,则为:请输入有效的日期 128 } 129 } 130 }); 131 }); // 54 【表单校验】 的函数的结束括号 132 133 134 $(function(){ 135 $("#username").blur(function(){ // 20 【异步校验-注册用户名】 136 var usernameInput = $(this).val(); 137 $.post( 138 "CheckNameServlet", 139 {"username":usernameInput}, 140 function(data){ // 服务器返回的json格式的数据 141 var isExist = data.isExist; 142 var usernameInfo = ""; 143 if(isExist){ 144 usernameInfo = "该用户名已经存在"; 145 $("#usernameInfo").css("color","red"); 146 }else{ 147 usernameInfo = "该用户名不存在,当符合校验规则时,可以使用√" 148 $("#usernameInfo").css("color","green"); 149 } 150 $("#usernameInfo").html(usernameInfo); 151 }, 152 "json" 153 ); //pose方法的结束括号 154 }); // 获取username的值的方法的结束括号 155 }); // 20 【异步校验-注册用户名】的结束括号 156 157 158 // 19 【密码不同】 用户注册时,在表单中填写的两次密码,对两次的值进行判断,并提示相关信息 159 // 获得两次输入的值、进行判断、根据结果显示相关的信息。不一样时,禁用使用注册按钮。 160 function validate() { 161 var password1 = document.getElementById("password1").value; 162 var password2 = document.getElementById("password2").value; 163 if(password1 == password2) { 164 document.getElementById("passwordVerify").innerHTML="<font color='green'>两次密码相同</font>"; 165 document.getElementById("submit").disabled = false; 166 //disabled 禁用submit元素,由于设置的是false,即不能点击注册按钮 167 } 168 else { 169 document.getElementById("passwordVerify").innerHTML="<font color='red'>两次密码不相同</font>"; 170 document.getElementById("submit").disabled = true; 171 //disable 禁用submit元素,由于设置的是true,所以可以使用。 172 } 173 } 174 175 </script> 176 177 178 </body> 179 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>用户登录的页面</title> 8 <base href="${pageContext.request.contextPath}/"> 9 <link rel="stylesheet" href="css/bootstrap.min.css" /> 10 <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script> 11 <script src="js/bootstrap.min.js"></script> 12 <script src="js/demo1.js"></script> 13 <link rel="stylesheet" href="css/demo1.css" media="screen" /> 14 </head> 15 <body> 16 17 <!-- 满足"进入登录页面发现未注册"这个需求 --> 18 <div><a href="register.jsp">开始注册</a></div> 19 20 <!-- 7【用户登录】使用form表格提交,后续会在form中加入其它功能--> 21 <!-- 记住用户名 --> 22 <form action="LoginServlet" method="post"> 23 <div> 24 <label>用户名:</label> 25 <input id="username" type="text" name="username" autocomplete="off" 26 value="${cookie.remembermeCookie.value}"> 27 </div> 28 <div> 29 <label>密码: </label> 30 <input id="password" type="password" name="password" > 31 <!-- ajax提示用户登录失败的信息,原因是密码错误。实际上应该是用户名or登录密码错误 --> 32 <span id="L"></span> 33 </div> 34 35 <!-- 14 【验证码校验】--> 36 <div> 37 <label>验证码:</label> 38 <input id="checkCode" type="text" name="checkCode" onblur="a2()"> 39 <!-- 9 【显示验证码】 --> 40 <img onclick="changeImg(this)" src="CheckImgServlet"> 41 </div> 42 43 44 <div class="checkbox"> 45 <label> <!-- 23 【自动登录】 --> 46 <input type="checkbox" name="autoLogin" value="autoLogin"> 自动登录 47 </label> 48 49 <label> 50 <!-- 记住用户名 1 --> 51 <input type="checkbox" name="rememberme" value="1" 52 ${not empty cookie.remembermeCookie? "checked='checked'" : ""}> 记住用户名 53 54 <!-- 验证码错误时,提示信息,方式2。要记得在验证码的input属性中调用函数 --> 55 <span id="checkInfo"></span> 56 </label> 57 </div> 58 59 <div> 60 <input id="login" type="submit" value="登录" > 61 <input type="reset" value="重置"> 62 </div> 63 </form> 64 65 <%-- <c:if test="${empty requestScope.errorState}"> 66 如果用户未激活会在此处提示 67 </c:if> --%> 68 69 <!-- 这个empty判断的条件,在用户未激活时,进入if-else条件语句后,我设置成不为空的值"是" --> 70 <c:if test="${!empty requestScope.errorState}"> 71 根据账户激活状态进行提示: ${requestScope.loginStateInfo} 72 73 </c:if> 74 75 76 <script type="text/javascript"> 77 window.onload = function(){ 78 } 79 80 function changeImg(obj){ 81 obj.src="${pageContext.request.contextPath }/CheckImgServlet?time="+new Date().getTime(); 82 } 83 84 // 22【登录错误】 用户登录失败时,提示信息。 85 $(function(){ 86 87 $("#password").blur(function(){ 88 var uI = $("#username").val(); 89 var pI = $("#password").val(); 90 91 $.post( 92 "${pageContext.request.contextPath}/UserLoginServlet", 93 {"username":uI,"password":pI}, 94 function(data){ 95 var isExist = data.isExist; 96 var I = ""; 97 if(isExist){ // 当返回true时 98 I = "登录成功"; 99 $("#L").css("color","red"); 100 }else{ 101 I = "登录失败" 102 $("#L").css("color","green"); 103 } 104 $("#L").html(I); 105 }, 106 "json" 107 );//post的结束括号 108 }); //获取用户名的结果括号 )是blur的结束括号 109 }); // 用户登录失败提示信息的结束括号 110 111 // 25 【验证码错误】 在验证码输入错误时,立即进行提示。 112 function a2() { 113 $.post( 114 "checkAjaxServlet", 115 {"checkCode":$("#checkCode").val()}, 116 function(data){ 117 var isExist = data.isExist; 118 if(isExist){ // 当返回true时 119 info = "输入的验证码正确"; 120 $('#checkInfo').css("color","red"); 121 }else{ 122 info = "输入的验证码错误,请检查"; 123 $('#checkInfo').css("color","green"); 124 } 125 $('#checkInfo').html(info); 126 }, 127 "json" 128 );//post的结束括号 129 }; 130 131 </script> <!-- 内部引入时,script的结束括号 --> 132 133 </body> 134 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>登录成功的页面</title> 7 <base href="${pageContext.request.contextPath}/" target="_blank"> 8 </head> 9 <body> 10 <div> 11 显示上次访问的时间:${sessionScope.LastAccessTime} <!-- 13 【上次访问时间】--> 12 </div> 13 14 <div> 15 显示用户登录的次数:${sessionScope.usercountshow} <!-- 8 【登录次数】 --> 16 </div> 17 18 <div> 19 <a href="CardServlet">管理页面</a> 20 </div> 21 </body> 22 </html>
Dao层

1 package dao; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 import CardEntity.Card; 11 import utils.JDBCUtils; 12 13 public class CardDao { 14 private Connection con = JDBCUtils.getConnection(); 15 16 // 高级搜索 根据三个条件来显示条数 17 public int AdvancedSearchCount(String card_name, String card_attribute, String card_race) { 18 try { 19 String sql = "SELECT * FROM deck WHERE NAME LIKE ? AND attribute LIKE ? AND race LIKE ?"; 20 PreparedStatement pst = con.prepareStatement(sql); 21 pst.setString(1, "%"+card_name+"%"); 22 pst.setString(2, "%"+card_attribute+"%"); 23 pst.setString(3, "%"+card_race+"%"); 24 ResultSet rs = pst.executeQuery(); 25 List<Card> list = new ArrayList<Card>(); 26 while(rs.next()){ 27 Card c = new Card(rs.getInt("id"),rs.getString("name"),rs.getString("attribute"),rs.getString("race"),rs.getInt("atk"),rs.getInt("def")); 28 list.add(c); 29 } 30 int i = list.size(); 31 return i; 32 } catch (SQLException ex) { 33 System.out.println(ex); 34 throw new RuntimeException("高级搜索根据查询到的结果显示条数失败"); 35 } 36 } 37 38 // 高级搜索 根据三个条件来进入查询 39 public List<Card> AdvancedSearch(String card_name, String card_attribute, String card_race) { 40 try { 41 /* SELECT * FROM deck 42 WHERE NAME LIKE '%自然%' AND attribute LIKE '%水%' AND race LIKE '%兽族%';*/ 43 String sql = "SELECT * FROM deck WHERE NAME LIKE ? AND attribute LIKE ? AND race LIKE ?"; 44 PreparedStatement pst = con.prepareStatement(sql); 45 pst.setString(1, "%"+card_name+"%"); 46 pst.setString(2, "%"+card_attribute+"%"); 47 pst.setString(3, "%"+card_race+"%"); 48 ResultSet rs = pst.executeQuery(); 49 List<Card> list = new ArrayList<Card>(); 50 while(rs.next()){ 51 Card c = new Card(rs.getInt("id"),rs.getString("name"),rs.getString("attribute"),rs.getString("race"),rs.getInt("atk"),rs.getInt("def")); 52 list.add(c); 53 } 54 return list; 55 }catch(SQLException ex){ 56 System.out.println(ex); 57 throw new RuntimeException("高级搜索失败"); 58 } 59 } 60 61 // 【查询所有】博客2.1 62 public List<Card> selectAll() { 63 try{ 64 PreparedStatement pst = con.prepareStatement("SELECT * FROM deck"); 65 ResultSet rs = pst.executeQuery(); 66 List<Card> list = new ArrayList<Card>(); 67 while(rs.next()){ 68 Card c = new Card(rs.getInt("id"),rs.getString("name"),rs.getString("attribute"),rs.getString("race"),rs.getInt("atk"),rs.getInt("def")); 69 list.add(c); 70 } 71 return list; 72 }catch(SQLException ex){ 73 System.out.println(ex); 74 throw new RuntimeException("查询所有失败"); 75 } 76 } 77 78 // 45【模态框添加】 根据在form中填写的数据,进行添加 79 public int addModal(int id, String name, String attribute, String race, int atk, int def) { 80 try { 81 String sql = "INSERT INTO deck (id,name,attribute,race,atk,def) VALUES(?,?,?,?,?,?)"; 82 PreparedStatement pst = con.prepareStatement(sql); 83 pst.setObject(1, id); 84 pst.setObject(2, name); 85 pst.setObject(3, attribute); 86 pst.setObject(4, race); 87 pst.setObject(5, atk); 88 pst.setObject(6, def); 89 int rows = pst.executeUpdate(); // 如果添加数据成功 得到一个值,值为1 90 int modalInt = 0 ; 91 if (rows > 0) { // 如果rows得到的值为1,则证明添加成功 92 modalInt = 1; // 当添加成功时,将modalInt赋值为1 93 } else { 94 modalInt = 2; // 添加失败时,赋值为2 95 } 96 return modalInt; 97 } catch (SQLException ex) { 98 System.out.println(ex); 99 throw new RuntimeException("使用模态框,添加数据失败"); 100 } 101 } 102 103 // 【添加数据】 博客2.2 104 public void add(int id, String name, String attribute, String race, int atk, int def) { 105 try { 106 String sql = "INSERT INTO deck (id,name,attribute,race,atk,def) VALUES(?,?,?,?,?,?)"; 107 PreparedStatement pst = con.prepareStatement(sql); 108 pst.setObject(1, id); 109 pst.setObject(2, name); 110 pst.setObject(3, attribute); 111 pst.setObject(4, race); 112 pst.setObject(5, atk); 113 pst.setObject(6, def); 114 pst.executeUpdate(); 115 } catch (SQLException ex) { 116 System.out.println(ex); 117 throw new RuntimeException("添加数据失败"); 118 } 119 } 120 121 // 46 模态框修改 和【修改数据】 博客2.3 使用的方法其实是同一个,为了掌握的更彻底,另写一个 122 public void modalUpdate(int id, String name, String attribute, String race, int atk, int def) { 123 try { 124 String sql = "UPDATE deck SET name=?,attribute=?,race=?,atk=?,def=? WHERE id=?"; 125 PreparedStatement pst = con.prepareStatement(sql); 126 pst.setObject(1, name); 127 pst.setObject(2, attribute); 128 pst.setObject(3, race); 129 pst.setObject(4, atk); 130 pst.setObject(5, def); 131 pst.setObject(6, id); 132 pst.executeUpdate(); 133 } catch (SQLException ex) { 134 System.out.println(ex); 135 throw new RuntimeException("模态框提交按钮,修改数据失败"); 136 } 137 } 138 139 // 【修改数据】 博客2.3 140 public void update(int id, String name, String attribute, String race, int atk, int def) { 141 try { 142 String sql = "UPDATE deck SET name=?,attribute=?,race=?,atk=?,def=? WHERE id=?"; 143 PreparedStatement pst = con.prepareStatement(sql); 144 pst.setObject(1, name); 145 pst.setObject(2, attribute); 146 pst.setObject(3, race); 147 pst.setObject(4, atk); 148 pst.setObject(5, def); 149 pst.setObject(6, id); 150 pst.executeUpdate(); 151 } catch (SQLException ex) { 152 System.out.println(ex); 153 throw new RuntimeException("修改数据失败"); 154 } 155 } 156 157 // 【删除数据】 博客2.4 和 15 【按钮提示】 158 public void delete(int id) { 159 try { 160 String sql = "delete from deck where id = ?"; 161 PreparedStatement pst = con.prepareStatement(sql); 162 pst.setObject(1, id); 163 pst.executeUpdate(); 164 } catch (SQLException ex) { 165 System.out.println(ex); 166 throw new RuntimeException("删除数据失败"); 167 } 168 } 169 170 // 5 【条件查询】 171 public List<Card> likeQuery(String name) { 172 try { // SELECT * FROM deck WHERE NAME LIKE '%自然%'; 173 String sql = "SELECT * FROM deck WHERE name LIKE ?"; 174 PreparedStatement pst = con.prepareStatement(sql); 175 pst.setString(1, "%"+name+"%"); 176 ResultSet rs = pst.executeQuery(); 177 List<Card> list = new ArrayList<Card>(); 178 while(rs.next()){ 179 Card c = new Card(rs.getInt("id"),rs.getString("name"),rs.getString("attribute"),rs.getString("race"),rs.getInt("atk"),rs.getInt("def")); 180 list.add(c); 181 } 182 return list; 183 } catch (SQLException ex) { 184 System.out.println(ex); 185 throw new RuntimeException("条件查询失败"); 186 } 187 } 188 189 // 6【所有条数】 190 public int rowCount() { 191 try { 192 String sql = "select count(*) totalCount from deck"; 193 PreparedStatement pst = con.prepareStatement(sql); 194 ResultSet rs = pst.executeQuery(); 195 int rowCount = 0; 196 if(rs.next()) { 197 rowCount=rs .getInt("totalCount"); 198 } 199 return rowCount; 200 } catch (SQLException ex) { 201 System.out.println(ex); 202 throw new RuntimeException("查询所有条数失败"); 203 } 204 } 205 206 // 16【条件查询条数】 207 public int likerowCount(String name) { 208 try { 209 String sql = "SELECT * FROM deck WHERE name LIKE ?"; 210 PreparedStatement pst = con.prepareStatement(sql); 211 pst.setString(1, "%"+name+"%"); 212 ResultSet rs = pst.executeQuery(); 213 List<Card> list = new ArrayList<Card>(); 214 while(rs.next()){ 215 Card c = new Card(rs.getInt("id"),rs.getString("name"),rs.getString("attribute"),rs.getString("race"),rs.getInt("atk"),rs.getInt("def")); 216 list.add(c); 217 } 218 int i = list.size(); 219 return i; 220 } catch (SQLException ex) { 221 System.out.println(ex); 222 throw new RuntimeException("条件查询条数失败"); 223 } 224 } 225 226 // 17 【分页查询】查询全部的条数 227 public int getTotalCount() throws SQLException { 228 try { 229 String sql = "select count(*) totalCount from deck"; 230 PreparedStatement pst = con.prepareStatement(sql); 231 ResultSet rs = pst.executeQuery(); 232 int rowCount = 0; 233 if(rs.next()) { 234 rowCount=rs .getInt("totalCount"); 235 } 236 return rowCount; 237 } catch (SQLException ex) { 238 System.out.println(ex); 239 throw new RuntimeException("查询全部的条数失败"); 240 } 241 } 242 243 // 17 【分页查询】 查询全部 + 分页 244 public List<Card> findCardListForPageBean(int index,int currentCount) throws SQLException { 245 try{ 246 String sql = "select * from deck limit ?,?"; 247 PreparedStatement pst = con.prepareStatement(sql); 248 pst.setInt(1,index); 249 pst.setInt(2,currentCount); 250 ResultSet rs = pst.executeQuery(); 251 List<Card> list = new ArrayList(); 252 while(rs.next()){ 253 Card c = new Card(rs.getInt("id"),rs.getString("name"),rs.getString("attribute"),rs.getString("race"),rs.getInt("atk"),rs.getInt("def")); 254 list.add(c); 255 } 256 return list; 257 }catch(SQLException ex){ 258 System.out.println(ex); 259 throw new RuntimeException("查询全部+分页失败"); 260 } 261 } 262 263 // 18 【分页查询 + 条件查询 】 条件查询 + 分页 264 public List<Card> pagelikequery(String name,int index,int currentCount) { 265 try { 266 String sql = "SELECT * FROM deck WHERE name LIKE ? limit ?,?"; 267 PreparedStatement pst = con.prepareStatement(sql); 268 pst.setString(1, "%"+name+"%"); 269 pst.setInt(2,index); 270 pst.setInt(3,currentCount); 271 ResultSet rs = pst.executeQuery(); 272 List<Card> list = new ArrayList<Card>(); 273 while(rs.next()){ 274 Card c = new Card(rs.getInt("id"),rs.getString("name"),rs.getString("attribute"),rs.getString("race"),rs.getInt("atk"),rs.getInt("def")); 275 list.add(c); 276 } 277 return list; 278 } catch (SQLException ex) { 279 System.out.println(ex); 280 throw new RuntimeException("条件查询+分页失败"); 281 } 282 } 283 284 // 46 【模态框修改】 打开模态框时显示"准备修改的内容" 通过id查询,并将查询结果返回 285 public Card modalUpdate(int id) { 286 try { 287 String sql = "select * from deck where id = ?"; 288 PreparedStatement pst = con.prepareStatement(sql); 289 pst.setObject(1, id); 290 ResultSet rs = pst.executeQuery(); 291 Card c = new Card(); 292 while(rs.next()){ 293 c = new Card(rs.getInt("id"),rs.getString("name"),rs.getString("attribute"),rs.getString("race"),rs.getInt("atk"),rs.getInt("def")); 294 } 295 System.out.println(c); 296 return c; 297 298 } catch (SQLException ex) { 299 System.out.println(ex); 300 throw new RuntimeException("模态框修改时,先通过id查询数据,失败"); 301 } 302 } 303 304 // 49 【全选删除】 305 public void allAjaxDelete() { 306 try { 307 String sql = "delete from deck"; 308 PreparedStatement pst = con.prepareStatement(sql); 309 // pst.setObject(1, id); // 没有参数 310 // pst.executeQuery(); 311 pst.executeUpdate(); // 删除是修改 312 313 } catch (SQLException ex) { 314 System.out.println(ex); 315 throw new RuntimeException("全选删除失败"); 316 } 317 } 318 319 }

1 package dao; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 import CardEntity.User; 11 import utils.JDBCUtils; 12 13 public class UserDao { 14 private Connection con = JDBCUtils.getConnection(); 15 16 // 通过激活码,目前是uid,查询用户 17 public User findByCode(String uid) { 18 try { 19 String sql = "select * from user where uid = ?"; 20 PreparedStatement pst = con.prepareStatement(sql); 21 pst.setString(1,uid); 22 ResultSet rs = pst.executeQuery(); 23 User userD = null; 24 while(rs.next()){ 25 User u = new User(rs.getString("uid"),rs.getString("username")); 26 userD = u; 27 // System.out.println(rs.getString("uid") +" " +rs.getString("username")); 28 } 29 // System.out.println("通过激活码查询:" + userD.getUid()); 30 // System.out.println("通过激活码查询:" + userD.getName()); 31 return userD; 32 }catch(SQLException ex){ 33 System.out.println(ex); 34 throw new RuntimeException("通过激活码,查询用户失败,查询到的结果是null"); 35 } 36 } 37 38 // 在通过激活码查询到用户名,对查询到的用户设置激活状态为1,code设置成null 39 public void update(User existUser,String uid) { 40 int state =existUser.getState(); // 得到准备激活的用户的激活状态 41 // String uid = existUser.getUid(); // 得到准备激活的用户的uid 42 // System.out.println("到dao层的激活状态为:"+existUser.getState()); 43 // System.out.println("到dao层的uid为:"+existUser.getUid()); 44 try { 45 String sql = "update user set state=? where uid = ?"; 46 PreparedStatement pst = con.prepareStatement(sql); 47 pst.setInt(1,state); 48 pst.setString(2, uid); 49 pst.executeUpdate(); 50 }catch(SQLException ex){ 51 System.out.println(ex); 52 throw new RuntimeException("设置激活用户的激活状态失败"); 53 } 54 } 55 56 // 7【用户登录】 57 public User Login(String username, String password) { 58 try { 59 String sql = "select * from user where username=? and password=?"; 60 PreparedStatement pst = con.prepareStatement(sql); 61 pst.setString(1,username); 62 pst.setString(2,password); 63 ResultSet rs = pst.executeQuery(); 64 User user = null; 65 while(rs.next()){ 66 User u = new User(rs.getString("uid"),rs.getString("username"),rs.getString("password")); 67 user = u; 68 } 69 return user; 70 }catch(SQLException ex){ 71 System.out.println(ex); 72 throw new RuntimeException("用户登录失败"); 73 } 74 } 75 76 // 8 【登录次数】 统计用户登录次数(本次不算) 77 public int selectUserCount() { 78 try { 79 String sql = "select count from count"; 80 PreparedStatement pst = con.prepareStatement(sql); 81 ResultSet usercount = pst.executeQuery(); 82 int i= 0; 83 while(usercount.next()){ 84 i = usercount.getInt("count"); 85 } 86 return i; 87 }catch(SQLException ex){ 88 System.out.println(ex); 89 throw new RuntimeException("统计用户登录次数(本次不算)失败"); 90 } 91 } 92 93 // 8 【登录次数】 修改用户登录次数(计算本次) 94 public void setUserCount(int usercountshow){ 95 try { 96 String sql = "UPDATE count SET count=?"; 97 PreparedStatement pst = con.prepareStatement(sql); 98 pst.setObject(1, usercountshow); 99 int i = pst.executeUpdate(); 100 }catch(SQLException ex){ 101 System.out.println(ex); 102 throw new RuntimeException("修改用户登录次数(计算本次)失败"); 103 } 104 } 105 106 // 11【用户注册】 107 public void regist(String rUid,String rUsername,String rPassword,String rName,String rEmail,String rSex,String rBirthday) throws SQLException{ 108 try { 109 String sql = "insert into user (uid,username,password,email,name,sex,birthday) VALUES(?,?,?,?,?,?,?)"; 110 PreparedStatement pst = con.prepareStatement(sql); 111 pst.setObject(1, rUid); 112 pst.setObject(2, rUsername); 113 pst.setObject(3, rPassword); 114 pst.setObject(4, rEmail); // 邮箱 新增 115 pst.setObject(5, rName); // 姓名 新增 116 pst.setObject(6, rSex); // 性别 新增 117 pst.setObject(7, rBirthday); // 出生日期 新增 118 pst.executeUpdate(); 119 } catch (SQLException ex) { 120 System.out.println(ex); 121 throw new RuntimeException("注册用户失败"); 122 } 123 } 124 125 // 20 【异步校验-注册用户名】 查询用户名是否存在 126 public Long checkUsername(String username) throws SQLException { 127 try { 128 String sql = "select count(*) from user where username=?"; 129 PreparedStatement pst = con.prepareStatement(sql); 130 pst.setString(1, username); 131 ResultSet rs = pst.executeQuery(); 132 int icount = 0; 133 if(rs.next()) { 134 icount =rs.getInt("count(*)"); 135 } 136 Long i = (long) icount; 137 return i; 138 } catch (SQLException ex) { 139 System.out.println(ex); 140 throw new RuntimeException("异步校验,查询用户名是否存在失败"); 141 } 142 } 143 144 // 用户登录失败提示信息,使用的方法 145 public User checkUser(String username,String password) throws SQLException { 146 try { 147 String sql = "select * from user where username=? and password=? "; 148 PreparedStatement pst = con.prepareStatement(sql); 149 pst.setString(1, username); 150 pst.setString(2, password); 151 ResultSet rs = pst.executeQuery(); 152 User user = new User(); 153 while(rs.next()){ 154 user = new User(rs.getString("username"),rs.getString("password")); 155 } 156 return user; 157 } catch (SQLException ex) { 158 System.out.println(ex); 159 throw new RuntimeException("登录失败提示信息,失败"); 160 } 161 } 162 163 164 // 21【异步自动填充-条件查询】 165 public List<Object> findBookByWord(String word) throws SQLException { 166 try { 167 String sql = "SELECT * FROM deck WHERE name LIKE ? LIMIT 0,20"; 168 PreparedStatement pst = con.prepareStatement(sql); 169 pst.setString(1, "%"+ word +"%"); 170 ResultSet rs = pst.executeQuery(); 171 List<Object> list = new ArrayList<>(); 172 while(rs.next()){ 173 list.add(rs.getString("name")); 174 } 175 return list; 176 } catch (SQLException ex) { 177 System.out.println(ex); 178 throw new RuntimeException("异步自动填充,条件查询失败"); 179 } 180 } 181 182 // 23 【自动登录】 183 public User login(String username, String password) throws SQLException { 184 try { 185 String sql = "select * from user where username=? and password=? "; 186 PreparedStatement pst = con.prepareStatement(sql); 187 pst.setString(1, username); 188 pst.setString(2, password); 189 ResultSet rs = pst.executeQuery(); 190 User user = new User(); 191 while(rs.next()){ 192 user = new User(rs.getString("username"),rs.getString("password")); 193 } 194 return user; 195 } catch (SQLException ex) { 196 System.out.println(ex); 197 throw new RuntimeException("自动登录失败"); 198 } 199 } 200 201 // 将当前时间保存到数据库中 202 public void saveCurrenTime(String currentTime) { 203 try { 204 String sql = "update time SET currenttime=?"; 205 PreparedStatement pst = con.prepareStatement(sql); 206 pst.setObject(1, currentTime); 207 pst.executeUpdate(); 208 } catch (SQLException ex) { 209 System.out.println(ex); 210 throw new RuntimeException("保存当前访问时间"); 211 } 212 } 213 214 // 获得上次访问时间 215 public String showCurrentTime() { 216 try { 217 String sql = "select currenttime from time"; 218 PreparedStatement pst = con.prepareStatement(sql); 219 ResultSet rs = pst.executeQuery(); 220 String ct = null; 221 while(rs.next()){ 222 ct = rs.getString("currentTime"); 223 } 224 return ct; 225 }catch(SQLException ex){ 226 System.out.println(ex); 227 throw new RuntimeException("查询上次访问时间"); 228 } 229 } 230 }
Servicen层

1 package service; 2 3 import java.sql.SQLException; 4 import java.util.List; 5 6 import CardEntity.Card; 7 import CardEntity.PageBean; 8 import dao.CardDao; 9 10 public class CardService { 11 12 // 45【模态框添加】 进行逻辑判断,判断添加数据是否成功 13 public boolean addModal(int id, String name, String attribute, String race, int atk, int def) { 14 CardDao carddao = new CardDao(); 15 int modalInt = carddao.addModal(id, name, attribute, race, atk, def); // 获得返回值 16 boolean isExist = false; // 默认为false 17 if(modalInt == 1){ // 返回值为1,代表成功,其余都是失败 18 isExist = true; 19 } else { 20 isExist = false; 21 } 22 return isExist; // 根据dao操作后的返回值,判断添加是否成功,成功则返回true 23 } 24 25 // 18 【分页查询 + 条件查询 】 目前没有将查询全部时的分页和条件查询的分页分离开。 26 public PageBean findPageBean(int currentPage,int currentCount,String name) throws SQLException { 27 CardDao dao = new CardDao(); 28 PageBean pageBean = new PageBean(); 29 30 // 如果有条件,将关键字的name封装,在jsp中取出给url。目的:用来区别查询全部还是条件查询 31 if(name != null) { //将关键字封装给pageBean,jsp利用这个值来让分页+条件查询,进行翻页 32 pageBean.setLikename(name); 33 } 34 35 // 55【下拉列表】 像设置name一样,设置currentCount 36 // currentCount在分页功能时,已经设置,是不是只要在jsp页面中给url即可? 37 38 pageBean.setCurrentPage(currentPage); // 1 当前页 39 pageBean.setCurrentCount(currentCount); // 2 当前页显示的条数 40 int totalCount ; // 3 总条数 41 42 //如果,没有条件,就查询全部条数。有条件,则进行条件条数查询 43 if(name == null) { 44 totalCount = dao.getTotalCount(); // 获得全部的条数 45 } else { 46 totalCount = dao.likerowCount(name); // 获得条件查询的结果的条数 47 } 48 49 pageBean.setTotalCount(totalCount); 50 int totalPage = (int) Math.ceil(1.0*totalCount/currentCount); // 4 总页数 51 pageBean.setTotalPage(totalPage); 52 53 int index = (currentPage-1)*currentCount; // 5 每页显示数据 54 55 //如果没有条件,就查询全部。有条件,则条件查询。 56 if(name == null) { // 查询全部 + 分页,两个参数 57 List<Card> CardList = dao.findCardListForPageBean(index,currentCount); 58 pageBean.setCardList(CardList); 59 }else{ 60 CardDao carddao = new CardDao(); // 条件查询 + 分页,三个参数 61 List<Card> list= carddao.pagelikequery(name,index,currentCount); 62 pageBean.setCardList(list); 63 } 64 return pageBean; 65 } 66 67 68 // 17 【分页查询】 69 /* public PageBean findPageBean(int currentPage,int currentCount) throws SQLException { 70 CardDao dao = new CardDao(); 71 PageBean pageBean = new PageBean(); 72 73 pageBean.setCurrentPage(currentPage); // 1 当前面 74 pageBean.setCurrentCount(currentCount); // 2 当前页显示的条数 75 int totalCount = dao.getTotalCount();; // 3 总条数 76 77 pageBean.setTotalCount(totalCount); 78 int totalPage = (int) Math.ceil(1.0*totalCount/currentCount); // 4 总页数 向上取整 79 pageBean.setTotalPage(totalPage); 80 81 int index = (currentPage-1)*currentCount; // 5 每页显示数据 82 83 List<Card> CardList = dao.findCardListForPageBean(index,currentCount); // 查询全部,带分页 84 pageBean.setCardList(CardList); 85 return pageBean; 86 }*/ 87 }

1 package service; 2 3 import java.sql.SQLException; 4 5 import CardEntity.User; 6 import dao.UserDao; 7 8 public class UserService { 9 10 public void activeUser(String uid) { 11 12 // 1 通过激活码查询用户 13 UserDao UserDao = new UserDao(); 14 User existUser = UserDao.findByCode(uid); // 假设dao层的方法取不出来值,直接uid更新 15 if(existUser == null) { // 需要更精准的判断? 不等于null的情况太多. 16 // 自定义异常 // 上面已经有方法判断了 17 throw new RuntimeException("用户激活码无效,请重试或重新发送激活邮件"); 18 } 19 20 // 2 更新用户信息 21 // System.out.println("未设置时账户的激活状态为:"+existUser.getState()); 22 // System.out.println("未设置是uid为:"+existUser.getUid()); 23 24 existUser.setState(1); 25 // existUser.setCode(null); 26 UserDao.update(existUser,uid); // 将当前用户的激活状态设置成1,code值设置成null 27 28 // System.out.println("只要邮件中的uid有值时就能到这里? "+uid); 29 // 只要uid的值不正确就会报上面自定义的异常 因为通过uid查询到的结果是null 30 } 31 32 // 20 【异步校验-注册用户名】 33 public boolean checkUsername(String username) throws SQLException { 34 UserDao dao = new UserDao(); 35 Long isExist = dao.checkUsername(username); 36 return isExist>0?true:false; 37 } 38 39 // 异步校验 登录错误时提示信息。根据用户名和密码查询,没有查到时,结果是0。在这里返回false 40 public boolean UserLogin(String username,String password) throws SQLException { 41 UserDao dao = new UserDao(); 42 User user = dao.checkUser(username,password); //如果输入的结果是正确的,那么会返回用户。 43 // System.out.println("输入的信息错误,查询结果是null:" + user); 44 boolean isExist = false; 45 if(user == null){ 46 isExist = false; // 查询不到用户时,返回false 47 } else if(user.getUsername() !=null && user.getPassword()!=null) { 48 isExist = true; // 查询到用户时,返回true 49 } 50 return isExist; 51 } 52 }
Servlet

1 package web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import service.UserService; 10 11 public class ActivateServlet extends HttpServlet { // 改url为Activate 12 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 13 14 // 1 获得激活码 15 String uid = request.getParameter("uid"); 16 // System.out.println("ActivateServlet中:" + uid); 17 // ActivateServlet中:7de4dd25-c238-45f1-891b-f9816f5e138b // 成功接收到uid,并将页面跳转到登录页面 18 19 // 2 用户激活 20 UserService userService = new UserService(); // Impl 21 userService.activeUser(uid); 22 23 // 3 成功提示 24 request.setAttribute("msg", "激活成功,请登录"); 25 26 // return "/jsp/login.jsp"; 27 request.getRequestDispatcher("login.jsp").forward(request, response); //这种方式? 28 } 29 30 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 doGet(request, response); 32 } 33 }

1 package web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import dao.CardDao; 10 11 // 【添加数据】 博客2.2 12 public class AddServlet extends HttpServlet { 13 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 14 request.setCharacterEncoding("UTF-8"); 15 16 String cardid = request.getParameter("card_id"); 17 int id = Integer.parseInt(cardid); 18 String name = request.getParameter("card_name"); 19 String attribute = request.getParameter("card_attribute"); 20 String race = request.getParameter("card_race"); 21 String cardatk = request.getParameter("card_atk"); 22 int atk = Integer.parseInt(cardatk); 23 String carddef = request.getParameter("card_def"); 24 int def = Integer.parseInt(carddef); 25 26 CardDao carddao = new CardDao(); 27 carddao.add(id,name,attribute,race,atk,def); 28 response.sendRedirect("CardServlet"); 29 } 30 31 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 doGet(request, response); 33 } 34 }

1 package web; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 import service.CardService; 11 12 // 45【添加】 模态框添加数据时,使用的是这个servlet 13 public class AddServlet2 extends HttpServlet { 14 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 15 request.setCharacterEncoding("UTF-8"); //为什么不统一解决乱码,也不需要设置? 16 17 String cardid = request.getParameter("card_id"); // ajax可以提交到此,需要可能为null 18 int id = Integer.parseInt(cardid); 19 String name = request.getParameter("card_name"); 20 String attribute = request.getParameter("card_attribute"); 21 String race = request.getParameter("card_race"); 22 String cardatk = request.getParameter("card_atk"); 23 int atk = Integer.parseInt(cardatk); 24 String carddef = request.getParameter("card_def"); 25 int def = Integer.parseInt(carddef); 26 27 CardService cardservice = new CardService(); 28 boolean isExist = false; // isExist默认false 29 isExist = cardservice.addModal(id,name,attribute,race,atk,def); // 添加成功时service层返回的值为true 30 response.getWriter().write("{\"isExist\":"+isExist+"}"); // 将isExist传递 31 // response.sendRedirect("CardServlet"); // 为什么不会重定向? 32 } 33 34 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 35 doGet(request, response); 36 } 37 }

1 package web; 2 3 import java.io.IOException; 4 import java.util.List; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 import CardEntity.Card; 12 import dao.CardDao; 13 14 // 高级搜索 15 public class AdvancedSearchServlet extends HttpServlet { 16 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 17 request.setCharacterEncoding("UTF-8"); 18 19 String card_name = request.getParameter("card_name"); 20 String card_attribute = request.getParameter("card_attribute"); 21 String card_race = request.getParameter("card_race"); 22 23 System.out.println(card_name+""+card_attribute+""+card_race); 24 25 CardDao cardDao = new CardDao(); 26 List<Card> list = cardDao.AdvancedSearch(card_name,card_attribute,card_race); 27 28 // 高级搜索这个功能也要放到CardServlet中? 因为有条数啊 29 int AScount = cardDao.AdvancedSearchCount(card_name,card_attribute,card_race); 30 31 request.setAttribute("list", list); 32 request.setAttribute("rowcount", AScount); 33 request.getRequestDispatcher("card.jsp").forward(request, response); 34 } 35 36 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 37 doGet(request, response); 38 } 39 }

1 package web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import dao.CardDao; 10 11 // 49 【全选删除】 使用的servlet 只接收一个布尔值,也就是用于判断是否全部勾选的值 12 public class AllAjaxDeleteServlet extends HttpServlet { 13 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 14 request.setCharacterEncoding("UTF-8"); 15 16 String BooleValue = request.getParameter("BooleValue"); 17 // BooleValue值为true时,执行dao的方法 18 // BooleValue=="true" 不会 // 内存地址不同 19 if(BooleValue.equals("true")){ // 对于字符串来说:==比较的是内存地址,equals比较是值 20 CardDao carddao = new CardDao(); 21 carddao.allAjaxDelete(); 22 } 23 } 24 25 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 26 doGet(request, response); 27 } 28 }

1 package web; 2 3 import java.io.IOException; 4 import java.util.List; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 import CardEntity.Card; 12 import dao.CardDao; 13 14 public class CardServlet extends HttpServlet { 15 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 16 request.setCharacterEncoding("UTF-8"); 17 18 CardDao carddao = new CardDao(); 19 List<Card> list = null; 20 int rowcount = 0; 21 22 String likename = request.getParameter("card_name"); 23 if(likename == null) { // 根据关键字进行判断 24 list = carddao.selectAll(); // 【查询所有】博客2.1 25 rowcount = carddao.rowCount(); // 6【所有条数】 26 } else{ 27 list = carddao.likeQuery(likename); // 5【条件查询】 28 rowcount = carddao.likerowCount(likename); // 16【条件查询条数】 29 } 30 31 request.setAttribute("list", list); 32 request.setAttribute("rowcount", rowcount); 33 request.getRequestDispatcher("card.jsp").forward(request, response); 34 } 35 36 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 37 doGet(request, response); 38 } 39 }

1 package web; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 // 25 【验证码错误】 11 public class checkAjaxServlet extends HttpServlet { 12 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 13 request.setCharacterEncoding("UTF-8"); 14 15 String checkCode = request.getParameter("checkCode"); // 将checkCode传递过来 16 boolean isExist = false; 17 // 将输入的值checkCode和正确的值对比,相等则返回true,不等则返回false 18 String checkCode_session = (String) request.getSession().getAttribute("checkcode_session"); 19 if(checkCode_session.equals(checkCode)){ 20 isExist = true; 21 } else { 22 isExist = false; 23 } 24 response.getWriter().write("{\"isExist\":"+isExist+"}"); 25 } 26 27 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 28 doGet(request, response); 29 } 30 }

1 package web; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.Graphics2D; 7 import java.awt.image.BufferedImage; 8 import java.io.BufferedReader; 9 import java.io.FileReader; 10 import java.io.IOException; 11 import java.util.ArrayList; 12 import java.util.List; 13 import java.util.Random; 14 15 import javax.imageio.ImageIO; 16 import javax.servlet.ServletException; 17 import javax.servlet.http.HttpServlet; 18 import javax.servlet.http.HttpServletRequest; 19 import javax.servlet.http.HttpServletResponse; 20 21 // 9 【显示验证码】 22 public class CheckImgServlet extends HttpServlet { 23 private List<String> words = new ArrayList<String>(); 24 25 @Override 26 public void init() throws ServletException { 27 String path = getServletContext().getRealPath("/WEB-INF/new_words.txt"); 28 try { 29 BufferedReader reader = new BufferedReader(new FileReader(path)); 30 String line; 31 while ((line = reader.readLine()) != null) { 32 words.add(line); 33 } 34 reader.close(); 35 } catch (IOException e) { 36 e.printStackTrace(); 37 } 38 } 39 40 public void doGet(HttpServletRequest request, HttpServletResponse response) 41 throws ServletException, IOException { 42 int width = 180; // 原值120 43 int height = 30; 44 BufferedImage bufferedImage = new BufferedImage(width, height, 45 BufferedImage.TYPE_INT_RGB); 46 47 Graphics graphics = bufferedImage.getGraphics(); 48 graphics.setColor(getRandColor(200, 250)); 49 graphics.fillRect(0, 0, width, height); 50 51 graphics.setColor(Color.WHITE); 52 graphics.drawRect(0, 0, width - 1, height - 1); 53 54 Graphics2D graphics2d = (Graphics2D) graphics; 55 graphics2d.setFont(new Font("宋体", Font.BOLD, 18)); 56 57 Random random = new Random(); 58 int index = random.nextInt(words.size()); 59 String word = words.get(index); 60 61 int x = 10; 62 for (int i = 0; i < word.length(); i++) { 63 graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random 64 .nextInt(110), 20 + random.nextInt(110))); 65 int jiaodu = random.nextInt(60) - 30; 66 double theta = jiaodu * Math.PI / 180; 67 68 char c = word.charAt(i); 69 70 graphics2d.rotate(theta, x, 20); 71 graphics2d.drawString(String.valueOf(c), x, 20); 72 graphics2d.rotate(-theta, x, 20); 73 x += 30; 74 } 75 76 request.getSession().setAttribute("checkcode_session", word); 77 78 graphics.setColor(getRandColor(160, 200)); 79 int x1; 80 int x2; 81 int y1; 82 int y2; 83 for (int i = 0; i < 30; i++) { 84 x1 = random.nextInt(width); 85 x2 = random.nextInt(12); 86 y1 = random.nextInt(height); 87 y2 = random.nextInt(12); 88 graphics.drawLine(x1, y1, x1 + x2, x2 + y2); 89 } 90 graphics.dispose(); 91 ImageIO.write(bufferedImage, "jpg", response.getOutputStream()); 92 93 } 94 95 public void doPost(HttpServletRequest request, HttpServletResponse response) 96 throws ServletException, IOException { 97 doGet(request, response); 98 } 99 100 private Color getRandColor(int fc, int bc) { 101 Random random = new Random(); 102 if (fc > 255) { 103 fc = 255; 104 } 105 if (bc > 255) { 106 bc = 255; 107 } 108 int r = fc + random.nextInt(bc - fc); 109 int g = fc + random.nextInt(bc - fc); 110 int b = fc + random.nextInt(bc - fc); 111 return new Color(r, g, b); 112 } 113 }

1 package web; 2 3 import java.io.IOException; 4 import java.sql.SQLException; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 import service.UserService; 12 13 // 20【异步校验-注册用户名】 14 public class CheckNameServlet extends HttpServlet { 15 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 16 request.setCharacterEncoding("UTF-8"); 17 18 String username = request.getParameter("username"); 19 UserService service = new UserService(); 20 boolean isExist = false; 21 try { 22 isExist = service.checkUsername(username); 23 } catch (SQLException e) { 24 e.printStackTrace(); 25 } 26 response.getWriter().write("{\"isExist\":"+isExist+"}"); 27 } 28 29 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 30 doGet(request, response); 31 } 32 }

1 package web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import dao.CardDao; 10 11 // 【删除数据】 博客2.4 和 15 【按钮提示】 使用的是同一个servlet 12 // 为什么会在删除数据后,进入index.jsp? 13 public class DeleteServlet extends HttpServlet { 14 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 15 request.setCharacterEncoding("UTF-8"); 16 17 String idString = request.getParameter("id"); 18 int id =Integer.parseInt(idString); 19 CardDao bookdao = new CardDao(); 20 bookdao.delete(id); 21 response.sendRedirect("CardServlet"); 22 } 23 24 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 doGet(request, response); 26 } 27 }

1 package web; 2 3 import java.io.IOException; 4 import java.net.URLEncoder; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 8 import javax.servlet.ServletException; 9 import javax.servlet.http.Cookie; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 import javax.servlet.http.HttpSession; 14 15 import CardEntity.User; 16 import dao.UserDao; 17 18 // 7【用户登录】 后续会加入其它功能 19 public class LoginServlet extends HttpServlet { 20 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 21 request.setCharacterEncoding("UTF-8"); 22 23 HttpSession session = request.getSession(); 24 String error = null; // 12【错误信息】 25 String errorState = null; // 用户激活3 判断是否提示信息的条件 26 27 // 14 【验证码校验】 28 // String checkCode_client = request.getParameter("checkCode"); 29 String checkCode_client = "自然"; // 暂时保证为true,方便登录 30 // String checkCode_session = (String) request.getSession().getAttribute("checkcode_session"); 31 // System.out.println("是正确的值吗?" + checkCode_session); 32 String checkCode_session = "自然"; 33 if(!checkCode_session.equals(checkCode_client)){ 34 request.setAttribute("loginInfocheckCode", "您的验证码不正确"); 35 request.setAttribute("error", error); 36 request.getRequestDispatcher("login.jsp").forward(request, response); 37 return; 38 } 39 40 // 7【用户登录】在记得sendRedirect到登录成功页面 后续会加入判断条件 41 String username = request.getParameter("username"); 42 String password = request.getParameter("password"); 43 UserDao userdao = new UserDao(); 44 User user = null; 45 user = userdao.Login(username,password); 46 47 // 用户激活3 根据查询到的激活状态来决定是否能登录 48 // System.out.println("登录时,查询到的用户的uid值为:" + user.getUid()); 49 // System.out.println(user.getState()); 50 51 // int loginState = user.getState(); 52 int loginState = 1; 53 System.out.println(user); 54 System.out.println("why数据表中是1,却激活失败呢?" + loginState); 55 // 类中的有参构造,有的只是2个参数 56 57 // 8 【登录次数】 登录成功会显示次数,登录失败则显示 12【错误信息】 58 if(user!=null & loginState!=0){ // 新增激活状态不为0时,才能登录 59 int usercount = userdao.selectUserCount(); 60 usercount++; 61 int usercountshow = usercount; // 不使用简写的格式 62 userdao.setUserCount(usercountshow); 63 response.getWriter().write(user.toString()+" 登录成功 " + usercountshow); 64 String showcount = String.valueOf(usercountshow); 65 session.setAttribute("usercountshow", showcount); 66 67 // 13 【上次访问时间】 68 Date date = new Date(); 69 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 70 String currentTime = format.format(date); 71 72 String lastAccessTime = null; 73 lastAccessTime = userdao.showCurrentTime(); //获得上次访问时间 74 userdao.saveCurrenTime(currentTime); //保存本次访问时间 75 response.setContentType("text/html;charset=UTF-8"); 76 77 if(lastAccessTime==null){ 78 session.setAttribute("LastAccessTime", "您是第一次访问"); 79 }else{ 80 session.setAttribute("LastAccessTime", lastAccessTime); 81 } 82 83 } if(user!=null&loginState==0){ // 用户激活3 有用户,但未激活时,要进入提示 84 String loginStateInfo = "账户未激活,请到邮箱激活"; 85 errorState = "是"; // 和error一样 86 request.setAttribute("errorState", errorState); // 用为判断是否进入提示的条件 87 request.setAttribute("loginStateInfo",loginStateInfo); // 提示的内容 88 request.getRequestDispatcher("login.jsp").forward(request, response); 89 // return; //这里就退出方法的话,记住用户名这个功能就执行不到了 90 91 } else { // 12【错误信息】 92 request.setAttribute("loginInfo", "使用if-else中代码完成的显示:密码错误"); 93 error = "错误"; 94 request.setAttribute("error", error); 95 request.getRequestDispatcher("login.jsp").forward(request, response); 96 return; 97 } // 用户不空null,统计登录次数和时间。为null则提示错误信息 98 99 // 记住用户名 100 String rememberme = request.getParameter("rememberme"); 101 if("1".equals(rememberme)){ 102 Cookie remembermeCookie = new Cookie("remembermeCookie",user.getUsername()); 103 remembermeCookie.setPath("/"); 104 remembermeCookie.setMaxAge(60*60*24*7); 105 response.addCookie(remembermeCookie); 106 } 107 108 // 23 【自动登录】 登录成功才会到这一步,否则就会转发到login.jsp 109 String autoLogin = request.getParameter("autoLogin"); 110 if(autoLogin!=null){ 111 String username_code = URLEncoder.encode(username, "UTF-8"); 112 113 Cookie cookie_username = new Cookie("cookie_username",username_code); 114 Cookie cookie_password = new Cookie("cookie_password",password); 115 cookie_username.setMaxAge(60*60); 116 cookie_password.setMaxAge(60*60); 117 cookie_username.setPath(request.getContextPath()); 118 cookie_password.setPath(request.getContextPath()); 119 response.addCookie(cookie_username); 120 response.addCookie(cookie_password); 121 } // 判断用户是否自动登录的结束括号 122 123 124 // 12【错误信息】 需要使用user是否为空来判断。 22【用户名显示】 125 if(user!=null&loginState!=0) { // 当有用户存在,且账户激活时,才能重定向 126 session.setAttribute("user", user); 127 response.sendRedirect("LoginSuccess.jsp"); 128 } 129 130 } // goGet方法的结束括号 131 132 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 133 doGet(request, response); 134 } 135 }

1 package web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.Cookie; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 import javax.servlet.http.HttpSession; 10 11 public class LogoutServlet extends HttpServlet { 12 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 13 HttpSession session = request.getSession(); 14 15 //从session中将user删除 16 session.removeAttribute("user"); 17 18 //将存储在客户端的cookie删除掉 19 Cookie cookie_username = new Cookie("cookie_username",""); 20 cookie_username.setMaxAge(0); 21 //创建存储密码的cookie 22 Cookie cookie_password = new Cookie("cookie_password",""); 23 cookie_password.setMaxAge(0); 24 25 response.addCookie(cookie_username); 26 response.addCookie(cookie_password); 27 28 response.sendRedirect(request.getContextPath()+"/login.jsp"); 29 30 } 31 32 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 33 doGet(request, response); 34 } 35 }

1 package web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import dao.CardDao; 10 11 // 46 【修改】 模态框提交按钮触发的函数,使用的servlet。和原本的修改功能,可以使用同一个方法。 12 public class modalUpdateSubmitServlet extends HttpServlet { 13 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 14 request.setCharacterEncoding("UTF-8"); 15 16 String cardid = request.getParameter("card_id"); 17 int id = Integer.parseInt(cardid); 18 String name = request.getParameter("card_name"); 19 String attribute = request.getParameter("card_attribute"); 20 String race = request.getParameter("card_race"); 21 String cardatk = request.getParameter("card_atk"); 22 int atk = Integer.parseInt(cardatk); 23 String carddef = request.getParameter("card_def"); 24 int def = Integer.parseInt(carddef); 25 26 CardDao Carddao = new CardDao(); 27 Carddao.modalUpdate(id,name,attribute,race,atk,def); 28 // response.sendRedirect("CardServlet"); // 重定向失效,是因为ajax并不是刷新页面?所以失效? 29 } 30 31 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 doGet(request, response); 33 } 34 }

1 package web; 2 3 import java.io.IOException; 4 import java.sql.SQLException; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 import CardEntity.Card; 12 import CardEntity.PageBean; 13 import service.CardService; 14 15 // 17 【分页查询】 后修改成 18【分页查询 + 条件查询】 16 public class PageServlet extends HttpServlet { 17 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 18 request.setCharacterEncoding("UTF-8"); 19 response.setCharacterEncoding("UTF-8"); 20 21 String name = request.getParameter("card_name"); // form且post提交card_name 22 23 // 三合一 条件查询+分页+选择页数,然后博客5中显示第一个分页后,翻下一页显示为空这个问题 24 String name2 = request.getParameter("card_name2"); // 下一页通过a链接提交的条件 25 26 if(name2==null){ // 如果下一页翻页时,传递的值是null,那么设置为"",不然报错 27 name2=""; 28 } 29 byte[] b = name2.getBytes("ISO-8859-1"); 30 31 if(name2!=""){ // 如果输入的条件的值不为""时,那么才将这个值赋值给name 32 name = new String(b,"utf-8"); 33 } 34 // System.out.println("输入的条件,值为:" + name); // 编码转换后就能正常显示了,三合一结束 35 36 37 /* System.out.println("接收的参数,未转换时的值为:" + nameS); // 参数1 38 if(nameS==null) { 39 nameS = ""; 40 } 41 String name = new String(nameS.getBytes("iso-8859-1"), "utf-8");*/ 42 43 CardService service = new CardService(); 44 45 String currentPageStr = request.getParameter("currentPage"); 46 if(currentPageStr==null) currentPageStr="1"; 47 int currentPage = Integer.parseInt(currentPageStr); 48 49 // 55 【下拉条数】 // 得到从页面通过下拉列表选择的那个值,3或者5 50 String currentCountString = request.getParameter("currentCount"); // 参数 2 51 if(currentCountString==null){ // 如果currentCount值为null会引发异常,现在处理一下 52 currentCountString = "3"; 53 // System.out.println("字符串的值为:" + currentCountString); 54 } 55 int currentCount = Integer.parseInt(currentCountString); // 3 or 5 56 57 PageBean<Card> pageBean = null; 58 try { // 将当前页,每页显示的条数传递进service,在service中得到pageBean这个封装的数据 59 // 18【分页查询 + 条件查询】 60 pageBean = service.findPageBean(currentPage,currentCount,name); 61 } catch (SQLException e) { 62 e.printStackTrace(); 63 } 64 65 request.setAttribute("pageBean", pageBean); 66 request.getRequestDispatcher("/page.jsp").forward(request, response); 67 } 68 69 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 70 doGet(request, response); 71 } 72 }

1 package web; 2 3 import java.io.IOException; 4 import java.sql.SQLException; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 import service.UserService; 12 13 public class RegisterInfo extends HttpServlet { 14 15 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 16 request.setCharacterEncoding("UTF-8"); 17 18 String username = request.getParameter("rInfo"); 19 UserService service = new UserService(); 20 21 //如何知道注册是否成功? 22 boolean isExist = false; 23 try { 24 isExist = service.checkUsername(username); 25 } catch (SQLException e) { 26 e.printStackTrace(); 27 } 28 response.getWriter().write("{\"isExist\":"+isExist+"}"); 29 } 30 31 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 doGet(request, response); 33 } 34 }

1 package web; 2 3 import java.io.IOException; 4 import java.sql.SQLException; 5 import java.util.Map; 6 import java.util.UUID; 7 8 import javax.mail.MessagingException; 9 import javax.mail.internet.AddressException; 10 import javax.servlet.ServletException; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 import org.apache.commons.beanutils.BeanUtils; 16 17 import CardEntity.User; 18 import dao.UserDao; 19 import utils.MailUtils; 20 21 // 11【用户注册】 22 public class RegisterServlet extends HttpServlet { 23 24 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 request.setCharacterEncoding("UTF-8"); 26 27 Map<String, String[]> properties = request.getParameterMap(); 28 User user = new User(); 29 try { 30 BeanUtils.populate(user, properties); // 如果,user中的属性 = 键值对中的键,则得到值 31 } catch (Exception e) { 32 e.printStackTrace(); 33 } 34 35 String rUsername = user.getUsername(); 36 String rPassword = user.getPassword(); 37 String rEmail = user.getEmail(); // 邮箱 新增 38 String rName = user.getName(); // 姓名 新增 39 String rSex = user.getSex(); // 性别 新增 40 String rBirthday = user.getBirthday(); // 出生日期 新增 41 42 // 如果用户名和密码为null,用户名为null,密码为null,重定向到登录页面 43 if(rUsername == "" && rPassword == "" || rUsername == "" || rPassword == ""){ 44 request.setAttribute("registerinfo", "注册失败"); 45 request.getRequestDispatcher("register.jsp").forward(request, response); 46 return; 47 } 48 49 user.setUid(UUID.randomUUID().toString()); // user表使用的随机生成的字符串 50 String rUid = user.getUid(); 51 52 try { 53 UserDao userdao = new UserDao(); 54 userdao.regist(rUid,rUsername,rPassword,rName,rEmail,rSex,rBirthday); 55 56 // 在保存用户之下,发送邮件 编写MatilUtils工具类发送邮件 57 MailUtils.sendMail(user.getEmail(),user.getUid()); 58 59 } catch (SQLException e) { 60 e.printStackTrace(); 61 } catch (AddressException e) { 62 e.printStackTrace(); 63 } catch (MessagingException e) { 64 e.printStackTrace(); 65 } 66 67 response.sendRedirect("login.jsp"); 68 } 69 70 protected void doPost(HttpServletRequest request, HttpServletResponse response) 71 throws ServletException, IOException { 72 doGet(request, response); 73 } 74 }

1 package web; 2 3 import java.io.IOException; 4 import java.sql.SQLException; 5 import java.util.List; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 import com.google.gson.Gson; 13 import dao.UserDao; 14 15 // 21【异步自动填充-条件查询】 16 public class SearchWordServlet extends HttpServlet { 17 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 18 request.setCharacterEncoding("utf-8"); 19 20 String word = request.getParameter("word"); 21 UserDao userdao = new UserDao(); 22 List<Object> bookList = null; 23 try { 24 bookList = userdao.findBookByWord(word); 25 } catch (SQLException e) { 26 e.printStackTrace(); 27 } 28 29 Gson gson = new Gson(); 30 String json = gson.toJson(bookList); 31 response.setContentType("text/html;charset=UTF-8"); 32 response.getWriter().write(json); 33 } 34 35 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 36 doGet(request, response); 37 } 38 }

1 package web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 // 51 【选择性删除】 接收AJAX提交的数组。由于没有办法将复选框和传递进来的值对应,最终未实现 10 public class SelectAjaxDeleteServlet extends HttpServlet { 11 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 12 request.setCharacterEncoding("UTF-8"); 13 14 String BooleArray = request.getParameter("BooleArray"); 15 System.out.println(BooleArray); 16 17 // String BooleArray = request.getParameter("checkOne"); // 这里接收到的应该是name 18 // System.out.println(BooleArray); // 并不是键值对中的键 19 20 boolean isExist = true; 21 response.getWriter().write("{\"isExist\":"+isExist+"}"); 22 } 23 24 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 doGet(request, response); 26 } 27 }

1 package web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import dao.CardDao; 10 11 // 【修改数据】 博客2.3 12 public class UpdateServlet extends HttpServlet { 13 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 14 request.setCharacterEncoding("UTF-8"); 15 16 String cardid = request.getParameter("card_id"); 17 int id = Integer.parseInt(cardid); 18 String name = request.getParameter("card_name"); 19 String attribute = request.getParameter("card_attribute"); 20 String race = request.getParameter("card_race"); 21 String cardatk = request.getParameter("card_atk"); 22 int atk = Integer.parseInt(cardatk); 23 String carddef = request.getParameter("card_def"); 24 int def = Integer.parseInt(carddef); 25 26 CardDao Carddao = new CardDao(); 27 Carddao.update(id,name,attribute,race,atk,def); 28 response.sendRedirect("CardServlet"); 29 } 30 31 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 doGet(request, response); 33 } 34 }

1 package web; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 import com.google.gson.Gson; 11 12 import CardEntity.Card; 13 import dao.CardDao; 14 15 // 46 【修改】 打开模态框时显示"准备修改的内容" 使用的是这个servlet 16 public class UpdateServlet2 extends HttpServlet { 17 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 18 request.setCharacterEncoding("UTF-8"); 19 20 String cardid = request.getParameter("card_id"); 21 int id = Integer.parseInt(cardid); 22 23 CardDao Carddao = new CardDao(); // 通过id查询,并将查询结果返回 24 Card c = Carddao.modalUpdate(id); // c是通过id查询到的卡片的数据 25 26 Gson gson = new Gson(); // 在这里,如何将c传递给ajax呢? 27 String json = gson.toJson(c); 28 response.setContentType("text/html;charset=UTF-8"); 29 response.getWriter().write(json); 30 } 31 32 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 33 doGet(request, response); 34 } 35 }

1 package web; 2 3 import java.io.IOException; 4 import java.sql.SQLException; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 import service.UserService; 12 13 // 22【登录错误】 14 public class UserLoginServlet extends HttpServlet { 15 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 16 request.setCharacterEncoding("UTF-8"); 17 18 String username = request.getParameter("username"); 19 String password = request.getParameter("password"); 20 UserService service = new UserService(); 21 boolean isExist = false; 22 try { 23 isExist = service.UserLogin(username,password); // 查询不到时,返回false 24 } catch (SQLException e) { 25 e.printStackTrace(); 26 } 27 28 response.getWriter().write("{\"isExist\":"+isExist+"}"); 29 } 30 31 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 doGet(request, response); 33 } 34 }

1 package CardEntity; 2 3 public class Card { 4 private int card_id; 5 private String card_name; 6 private String card_attribute; 7 private String card_race; 8 private int card_atk; 9 private int card_def; 10 11 public Card() { 12 super(); 13 } 14 15 public Card(int card_id, String card_name, String card_attribute, String card_race, int card_atk, int card_def) { 16 super(); 17 this.card_id = card_id; 18 this.card_name = card_name; 19 this.card_attribute = card_attribute; 20 this.card_race = card_race; 21 this.card_atk = card_atk; 22 this.card_def = card_def; 23 } 24 25 public int getCard_id() { 26 return card_id; 27 } 28 29 public void setCard_id(int card_id) { 30 this.card_id = card_id; 31 } 32 33 public String getCard_name() { 34 return card_name; 35 } 36 37 public void setCard_name(String card_name) { 38 this.card_name = card_name; 39 } 40 41 public String getCard_attribute() { 42 return card_attribute; 43 } 44 45 public void setCard_attribute(String card_attribute) { 46 this.card_attribute = card_attribute; 47 } 48 49 public String getCard_race() { 50 return card_race; 51 } 52 53 public void setCard_race(String card_race) { 54 this.card_race = card_race; 55 } 56 57 public int getCard_atk() { 58 return card_atk; 59 } 60 61 public void setCard_atk(int card_atk) { 62 this.card_atk = card_atk; 63 } 64 65 public int getCard_def() { 66 return card_def; 67 } 68 69 public void setCard_def(int card_def) { 70 this.card_def = card_def; 71 } 72 73 @Override 74 public String toString() { 75 return "Card [card_id=" + card_id + ", card_name=" + card_name + ", card_attribute=" + card_attribute 76 + ", card_race=" + card_race + ", card_atk=" + card_atk + ", card_def=" + card_def + "]"; 77 } 78 }

1 package CardEntity; 2 3 public class User { 4 private String uid; // user表使用的随机生成的字符串 5 private String username; // 用户名 6 private String password; // 密码 7 private String email; // 邮箱 新增 8 private String name; // 姓名 新增 9 private String sex; // 性别 新增 10 private String birthday; // 出生日期 新增 11 12 private int state; // 激活状态 13 private String code; // 激活码 由于要传入null只能使用String? 14 15 public User(String username, String password) { 16 this.username = username; 17 this.password = password; 18 } 19 20 public User( String uid, String username, String password) { // 新增uid 21 this.uid = uid; 22 this.username = username; 23 this.password = password; 24 } 25 26 public User(String uid, String username, String password, String email, String name, String sex, String birthday, 27 int state, String code) { 28 super(); 29 this.uid = uid; 30 this.username = username; 31 this.password = password; 32 this.email = email; 33 this.name = name; 34 this.sex = sex; 35 this.birthday = birthday; 36 this.state = state; 37 this.code = code; 38 } 39 40 public User() { 41 } 42 43 public String getCode() { // 激活码 的get和set方法 44 return code; 45 } 46 47 public void setCode(String code) { 48 this.code = code; 49 } 50 51 public int getState() { // 激活状态 的get和set方法 52 return state; 53 } 54 55 public void setState(int i) { 56 this.state = i; 57 } 58 59 public String getSex() { // 性别 的get和set方法 60 return sex; 61 } 62 63 public void setSex(String sex) { 64 this.sex = sex; 65 } 66 67 public String getBirthday() { // 出生日期 的get和set方法 68 return birthday; 69 } 70 71 public void setBirthday(String birthday) { 72 this.birthday = birthday; 73 } 74 75 public String getEmail() { // 邮箱 的get和Set方法 76 return email; 77 } 78 79 public void setEmail(String email) { 80 this.email = email; 81 } 82 83 public String getName() { // 姓名 的get和Set方法 84 return name; 85 } 86 87 public void setName(String name) { 88 this.name = name; 89 } 90 91 public String getUid() { 92 return uid; 93 } 94 95 public void setUid(String uid) { 96 this.uid = uid; 97 } 98 99 public String getUsername() { 100 return username; 101 } 102 public void setUsername(String username) { 103 this.username = username; 104 } 105 public String getPassword() { 106 return password; 107 } 108 public void setPassword(String password) { 109 this.password = password; 110 } 111 @Override 112 public String toString() { 113 return "User [username=" + username + ", password=" + password + "]"; 114 } 115 }

1 package CardEntity; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class PageBean<T> { 7 private int currentPage; //当前页 8 private int currentCount; //当前页显示的条数 9 private int totalCount; //总条数 10 private int totalPage; //总页数 11 private List<T> cardList = new ArrayList<T>(); //每页显示的数据 12 private String likename; //存储条件查询的关键字,在分页的情况下 13 14 public String getLikename() { 15 return likename; 16 } 17 public String setLikename(String likename) { 18 return this.likename = likename; 19 } 20 public int getCurrentPage() { 21 return currentPage; 22 } 23 public void setCurrentPage(int currentPage) { 24 this.currentPage = currentPage; 25 } 26 public int getCurrentCount() { 27 return currentCount; 28 } 29 public void setCurrentCount(int currentCount) { 30 this.currentCount = currentCount; 31 } 32 public int getTotalCount() { 33 return totalCount; 34 } 35 public void setTotalCount(int totalCount) { 36 this.totalCount = totalCount; 37 } 38 public int getTotalPage() { 39 return totalPage; 40 } 41 public void setTotalPage(int totalPage) { 42 this.totalPage = totalPage; 43 } 44 public List<T> getCardList() { 45 return cardList; 46 } 47 public void setCardList(List<T> cardList) { 48 this.cardList = cardList; 49 } 50 }

1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 3 <display-name>yugioh5</display-name> 4 <filter> 5 <filter-name>AutoLoginFilter</filter-name> 6 <filter-class>filter.AutoLoginFilter</filter-class> 7 </filter> 8 <filter-mapping> 9 <filter-name>AutoLoginFilter</filter-name> 10 <url-pattern>/*</url-pattern> 11 </filter-mapping> 12 <welcome-file-list> 13 <welcome-file>index.html</welcome-file> 14 <welcome-file>index.htm</welcome-file> 15 <welcome-file>index.jsp</welcome-file> 16 <welcome-file>default.html</welcome-file> 17 <welcome-file>default.htm</welcome-file> 18 <welcome-file>default.jsp</welcome-file> 19 </welcome-file-list> 20 <servlet> 21 <description></description> 22 <display-name>CardServlet</display-name> 23 <servlet-name>CardServlet</servlet-name> 24 <servlet-class>web.CardServlet</servlet-class> 25 </servlet> 26 <servlet-mapping> 27 <servlet-name>CardServlet</servlet-name> 28 <url-pattern>/CardServlet</url-pattern> 29 </servlet-mapping> 30 <servlet> 31 <description></description> 32 <display-name>AddServlet</display-name> 33 <servlet-name>AddServlet</servlet-name> 34 <servlet-class>web.AddServlet</servlet-class> 35 </servlet> 36 <servlet-mapping> 37 <servlet-name>AddServlet</servlet-name> 38 <url-pattern>/AddServlet</url-pattern> 39 </servlet-mapping> 40 <servlet> 41 <description></description> 42 <display-name>AddServlet2</display-name> 43 <servlet-name>AddServlet2</servlet-name> 44 <servlet-class>web.AddServlet2</servlet-class> 45 </servlet> 46 <servlet-mapping> 47 <servlet-name>AddServlet2</servlet-name> 48 <url-pattern>/AddServlet2</url-pattern> 49 </servlet-mapping> 50 <servlet> 51 <description></description> 52 <display-name>UpdateServlet</display-name> 53 <servlet-name>UpdateServlet</servlet-name> 54 <servlet-class>web.UpdateServlet</servlet-class> 55 </servlet> 56 <servlet-mapping> 57 <servlet-name>UpdateServlet</servlet-name> 58 <url-pattern>/UpdateServlet</url-pattern> 59 </servlet-mapping> 60 <servlet> 61 <description></description> 62 <display-name>UpdateServlet2</display-name> 63 <servlet-name>UpdateServlet2</servlet-name> 64 <servlet-class>web.UpdateServlet2</servlet-class> 65 </servlet> 66 <servlet-mapping> 67 <servlet-name>UpdateServlet2</servlet-name> 68 <url-pattern>/UpdateServlet2</url-pattern> 69 </servlet-mapping> 70 <servlet> 71 <description></description> 72 <display-name>DeleteServlet</display-name> 73 <servlet-name>DeleteServlet</servlet-name> 74 <servlet-class>web.DeleteServlet</servlet-class> 75 </servlet> 76 <servlet-mapping> 77 <servlet-name>DeleteServlet</servlet-name> 78 <url-pattern>/DeleteServlet</url-pattern> 79 </servlet-mapping> 80 <servlet> 81 <description></description> 82 <display-name>LoginServlet</display-name> 83 <servlet-name>LoginServlet</servlet-name> 84 <servlet-class>web.LoginServlet</servlet-class> 85 </servlet> 86 <servlet-mapping> 87 <servlet-name>LoginServlet</servlet-name> 88 <url-pattern>/LoginServlet</url-pattern> 89 </servlet-mapping> 90 <servlet> 91 <description></description> 92 <display-name>CheckImgServlet</display-name> 93 <servlet-name>CheckImgServlet</servlet-name> 94 <servlet-class>web.CheckImgServlet</servlet-class> 95 </servlet> 96 <servlet-mapping> 97 <servlet-name>CheckImgServlet</servlet-name> 98 <url-pattern>/CheckImgServlet</url-pattern> 99 </servlet-mapping> 100 <servlet> 101 <description></description> 102 <display-name>RegisterServlet</display-name> 103 <servlet-name>RegisterServlet</servlet-name> 104 <servlet-class>web.RegisterServlet</servlet-class> 105 </servlet> 106 <servlet-mapping> 107 <servlet-name>RegisterServlet</servlet-name> 108 <url-pattern>/RegisterServlet</url-pattern> 109 </servlet-mapping> 110 <servlet> 111 <description></description> 112 <display-name>PageServlet</display-name> 113 <servlet-name>PageServlet</servlet-name> 114 <servlet-class>web.PageServlet</servlet-class> 115 </servlet> 116 <servlet-mapping> 117 <servlet-name>PageServlet</servlet-name> 118 <url-pattern>/page</url-pattern> 119 </servlet-mapping> 120 <servlet> 121 <description></description> 122 <display-name>CheckNameServlet</display-name> 123 <servlet-name>CheckNameServlet</servlet-name> 124 <servlet-class>web.CheckNameServlet</servlet-class> 125 </servlet> 126 <servlet-mapping> 127 <servlet-name>CheckNameServlet</servlet-name> 128 <url-pattern>/CheckNameServlet</url-pattern> 129 </servlet-mapping> 130 <servlet> 131 <description></description> 132 <display-name>SearchWordServlet</display-name> 133 <servlet-name>SearchWordServlet</servlet-name> 134 <servlet-class>web.SearchWordServlet</servlet-class> 135 </servlet> 136 <servlet-mapping> 137 <servlet-name>SearchWordServlet</servlet-name> 138 <url-pattern>/SearchWordServlet</url-pattern> 139 </servlet-mapping> 140 <servlet> 141 <description></description> 142 <display-name>RegisterInfo</display-name> 143 <servlet-name>RegisterInfo</servlet-name> 144 <servlet-class>web.RegisterInfo</servlet-class> 145 </servlet> 146 <servlet-mapping> 147 <servlet-name>RegisterInfo</servlet-name> 148 <url-pattern>/RegisterInfo</url-pattern> 149 </servlet-mapping> 150 <servlet> 151 <description></description> 152 <display-name>UserLoginServlet</display-name> 153 <servlet-name>UserLoginServlet</servlet-name> 154 <servlet-class>web.UserLoginServlet</servlet-class> 155 </servlet> 156 <servlet-mapping> 157 <servlet-name>UserLoginServlet</servlet-name> 158 <url-pattern>/UserLoginServlet</url-pattern> 159 </servlet-mapping> 160 <servlet> 161 <description></description> 162 <display-name>checkAjaxServlet</display-name> 163 <servlet-name>checkAjaxServlet</servlet-name> 164 <servlet-class>web.checkAjaxServlet</servlet-class> 165 </servlet> 166 <servlet-mapping> 167 <servlet-name>checkAjaxServlet</servlet-name> 168 <url-pattern>/checkAjaxServlet</url-pattern> 169 </servlet-mapping> 170 <servlet> 171 <description></description> 172 <display-name>modalUpdateSubmitServlet</display-name> 173 <servlet-name>modalUpdateSubmitServlet</servlet-name> 174 <servlet-class>web.modalUpdateSubmitServlet</servlet-class> 175 </servlet> 176 <servlet-mapping> 177 <servlet-name>modalUpdateSubmitServlet</servlet-name> 178 <url-pattern>/modalUpdateSubmitServlet</url-pattern> 179 </servlet-mapping> 180 <servlet> 181 <description></description> 182 <display-name>AjaxServlet2</display-name> 183 <servlet-name>AjaxServlet2</servlet-name> 184 <servlet-class>web.AjaxServlet2</servlet-class> 185 </servlet> 186 <servlet-mapping> 187 <servlet-name>AjaxServlet2</servlet-name> 188 <url-pattern>/ajaxServlet2</url-pattern> 189 </servlet-mapping> 190 <servlet> 191 <description></description> 192 <display-name>AllAjaxDeleteServlet</display-name> 193 <servlet-name>AllAjaxDeleteServlet</servlet-name> 194 <servlet-class>web.AllAjaxDeleteServlet</servlet-class> 195 </servlet> 196 <servlet-mapping> 197 <servlet-name>AllAjaxDeleteServlet</servlet-name> 198 <url-pattern>/AllAjaxDeleteServlet</url-pattern> 199 </servlet-mapping> 200 <servlet> 201 <description></description> 202 <display-name>SelectAjaxDeleteServlet</display-name> 203 <servlet-name>SelectAjaxDeleteServlet</servlet-name> 204 <servlet-class>web.SelectAjaxDeleteServlet</servlet-class> 205 </servlet> 206 <servlet-mapping> 207 <servlet-name>SelectAjaxDeleteServlet</servlet-name> 208 <url-pattern>/SelectAjaxDeleteServlet</url-pattern> 209 </servlet-mapping> 210 <servlet> 211 <description></description> 212 <display-name>LogoutServlet</display-name> 213 <servlet-name>LogoutServlet</servlet-name> 214 <servlet-class>web.LogoutServlet</servlet-class> 215 </servlet> 216 <servlet-mapping> 217 <servlet-name>LogoutServlet</servlet-name> 218 <url-pattern>/LogoutServlet</url-pattern> 219 </servlet-mapping> 220 <servlet> 221 <description></description> 222 <display-name>ActivateServlet</display-name> 223 <servlet-name>ActivateServlet</servlet-name> 224 <servlet-class>web.ActivateServlet</servlet-class> 225 </servlet> 226 <servlet-mapping> 227 <servlet-name>ActivateServlet</servlet-name> 228 <url-pattern>/Activate</url-pattern> 229 </servlet-mapping> 230 <servlet> 231 <description></description> 232 <display-name>AdvancedSearchServlet</display-name> 233 <servlet-name>AdvancedSearchServlet</servlet-name> 234 <servlet-class>web.AdvancedSearchServlet</servlet-class> 235 </servlet> 236 <servlet-mapping> 237 <servlet-name>AdvancedSearchServlet</servlet-name> 238 <url-pattern>/AdvancedSearch</url-pattern> 239 </servlet-mapping> 240 </web-app>

1 driverClass=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3306/yugioh 3 username=root 4 password=root

1 package utils; 2 3 import java.io.InputStream; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.util.Properties; 7 8 public class JDBCUtils { 9 private static Connection con ; 10 private static String driverClass; 11 private static String url; 12 private static String username; 13 private static String password; 14 15 static{ 16 try{ 17 readConfig(); 18 Class.forName(driverClass); 19 con = DriverManager.getConnection(url, username, password); 20 }catch(Exception ex){ 21 throw new RuntimeException("数据库连接失败"); 22 } 23 } 24 25 private static void readConfig()throws Exception{ 26 InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("database.properties"); 27 Properties pro = new Properties(); 28 pro.load(in); 29 driverClass=pro.getProperty("driverClass"); 30 url = pro.getProperty("url"); 31 username = pro.getProperty("username"); 32 password = pro.getProperty("password"); 33 } 34 35 public static Connection getConnection(){ 36 return con; 37 } 38 }

1 package utils; 2 3 import java.util.Properties; 4 5 import javax.mail.Authenticator; 6 import javax.mail.Message; 7 import javax.mail.MessagingException; 8 import javax.mail.PasswordAuthentication; 9 import javax.mail.Session; 10 import javax.mail.Transport; 11 import javax.mail.internet.AddressException; 12 import javax.mail.internet.InternetAddress; 13 import javax.mail.internet.MimeMessage; 14 import javax.mail.internet.MimeMessage.RecipientType; 15 16 public class MailUtils { 17 18 public static void sendMail(String email, String uid) // emailMsg 改成了 uid 19 throws AddressException, MessagingException { 20 // 1.创建一个程序与邮件服务器会话对象 Session 21 22 Properties props = new Properties(); 23 props.setProperty("mail.transport.protocol", "SMTP"); 24 props.setProperty("mail.host", "smtp.qq.com"); 25 props.setProperty("mail.smtp.auth", "true"); // 指定验证为true 26 27 // 创建验证器 28 Authenticator auth = new Authenticator() { 29 public PasswordAuthentication getPasswordAuthentication() { 30 return new PasswordAuthentication("实际邮箱", "实际验证码"); 31 } 32 }; 33 34 Session session = Session.getInstance(props, auth); 35 36 // 2.创建一个Message,它相当于是邮件内容 37 Message message = new MimeMessage(session); 38 39 message.setFrom(new InternetAddress("实际邮箱@qq.com")); // 设置发送者 40 41 message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者 42 43 message.setSubject("yugioh5用户激活"); 44 45 // 设置内容 46 String url = "http://localhost:8080/yugioh5/Activate?uid="+uid; //没有& 47 // message.setText("这是一封激活邮件,请<a href='#'>点我来激活账户</a>"); 48 // message.setContent(uid, "text/html;charset=utf-8"); // uid加入到邮件内容中 49 message.setContent( 50 "<h1>来自yugioh5的激活邮件!激活请点击以下链接!</h1><h3><a href='"+url+"'>"+url+"</a></h3>", 51 "text/html;charset=UTF-8"); 52 53 // 3.创建 Transport用于将邮件发送 54 Transport.send(message); 55 } 56 }

1 package filter; 2 3 import java.io.IOException; 4 import java.net.URLDecoder; 5 import java.sql.SQLException; 6 7 import javax.servlet.Filter; 8 import javax.servlet.FilterChain; 9 import javax.servlet.FilterConfig; 10 import javax.servlet.ServletException; 11 import javax.servlet.ServletRequest; 12 import javax.servlet.ServletResponse; 13 import javax.servlet.http.Cookie; 14 import javax.servlet.http.HttpServletRequest; 15 import javax.servlet.http.HttpServletResponse; 16 import javax.servlet.http.HttpSession; 17 18 import CardEntity.User; 19 import dao.UserDao; 20 21 // 23 【自动登录】 22 public class AutoLoginFilter implements Filter{ 23 24 @Override 25 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 26 throws IOException, ServletException { 27 HttpServletRequest req = (HttpServletRequest) request; 28 HttpServletResponse resp = (HttpServletResponse) response; 29 HttpSession session = req.getSession(); 30 31 String cookie_username = null; 32 String cookie_password = null; 33 Cookie[] cookies = req.getCookies(); 34 if(cookies!=null){ //如果cookie不为null 就获得cookie中的用户名和密码 35 for(Cookie cookie : cookies){ 36 if("cookie_username".equals(cookie.getName())){ 37 cookie_username = cookie.getValue(); 38 cookie_username = URLDecoder.decode(cookie_username, "UTF-8"); 39 } 40 if("cookie_password".equals(cookie.getName())){ 41 cookie_password = cookie.getValue(); 42 } 43 } 44 } 45 46 // 如果值不为空,则登录。使用的用户名和密码是通过cookie存入的,在Filter中取出 47 if(cookie_username!=null&&cookie_password!=null){ 48 UserDao userdao = new UserDao(); 49 User user = null; 50 try { 51 user = userdao.login(cookie_username,cookie_password); 52 } catch (SQLException e) { 53 e.printStackTrace(); 54 } 55 session.setAttribute("user", user); 56 } 57 chain.doFilter(req, resp); 58 } 59 60 @Override 61 public void init(FilterConfig filterConfig) throws ServletException { 62 } 63 64 @Override 65 public void destroy() { 66 } 67 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」