第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>
index.jsp
复制代码
复制代码
  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                     &times;
 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                     &times;
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>
card.jsp
复制代码
复制代码
 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>
advanced_search
复制代码
复制代码
 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>
header.jsp
复制代码
复制代码
 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>
footer.jsp
复制代码
复制代码
  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                     &times;
 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                     &times;
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=&&currentCount=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">&laquo;</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}&&currentCount=${pageBean.currentCount}" aria-label="Previous">
277                         <span aria-hidden="true">&laquo;</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                             &&currentCount=${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">&raquo;</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}&&currentCount=${pageBean.currentCount}" aria-label="Next"> 
312                         <span aria-hidden="true">&raquo;</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 }页&nbsp;到
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>
page.jsp
复制代码
复制代码
 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>
seachWord
复制代码

 

复制代码
  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>
register.jsp
复制代码
复制代码
  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             &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
 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>
login.jsp
复制代码
复制代码
 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>
LoginSuccess.jsp
复制代码

 

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 }
CardDao
复制代码
复制代码
  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 }
UserDao
复制代码

 

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 }
CardService
复制代码
复制代码
 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 }
UserService
复制代码

 

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 }
ActivateServlet
复制代码
复制代码
 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 }
AddServlet
复制代码
复制代码
 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 }
AddServlet2
复制代码
复制代码
 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 }
AdvancedSearchServlet
复制代码
复制代码
 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 }
AllAjaxDeleteServlet
复制代码
复制代码
 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 }
CardServlet
复制代码
复制代码
 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 }
checkAjaxServlet
复制代码
复制代码
  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 }
CheckImgServlet
复制代码
复制代码
 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 }
CheckNameServlet
复制代码
复制代码
 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 }
DeleteServlet
复制代码
复制代码
  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 }
LoginServlet
复制代码
复制代码
 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 }
LogoutServlet
复制代码
复制代码
 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 }
modalUpdateSubmitServlet
复制代码
复制代码
 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 }
PageServlet
复制代码
复制代码
 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 }
RegisterInfo
复制代码
复制代码
 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 }
RegisterServlet
复制代码
复制代码
 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 }
SearchWordServlet
复制代码
复制代码
 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 }
SelectAjaxDeleteServlet
复制代码
复制代码
 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 }
UpdateServlet
复制代码
复制代码
 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 }
UpdateServlet2
复制代码
复制代码
 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 }
UserLoginServlet
复制代码

 

复制代码
 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 }
Card
复制代码
复制代码
  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 }
User
复制代码
复制代码
 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 }
PageBean
复制代码

 

复制代码
  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>
web.xml
复制代码
复制代码
1 driverClass=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/yugioh
3 username=root
4 password=root
database.properties
复制代码
复制代码
 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 }
JDBCUtils
复制代码
复制代码
 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 }
MailUtils
复制代码
复制代码
 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 }
AutoLoginFilter
复制代码

 

posted @   娱乐的心  阅读(74)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示