第6个练习 卡片管理系统(SSM框架)
第6个练习的记录
效果图1
效果图2
效果图3
效果图4
效果图5
效果图6
效果图7 卡组页面
效果图8 二级联动下的增删改查
效果图9 图书管理页面
效果图10 上传图片功能
项目列表1
项目列表2
MVC三层
Controller层

1 package shanhai.controller; 2 3 import java.io.UnsupportedEncodingException; 4 import java.util.HashMap; 5 import java.util.Map; 6 7 import javax.servlet.http.Cookie; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import javax.servlet.http.HttpSession; 11 12 import org.springframework.beans.factory.annotation.Autowired; 13 import org.springframework.stereotype.Controller; 14 import org.springframework.ui.Model; 15 import org.springframework.web.bind.annotation.RequestMapping; 16 import org.springframework.web.bind.annotation.RequestMethod; 17 import org.springframework.web.bind.annotation.ResponseBody; 18 19 import shanhai.pojo.Card; 20 import shanhai.pojo.Logininfo; 21 import shanhai.pojo.QueryVo; 22 import shanhai.pojo.User; 23 import shanhai.service.CardService; 24 import utils.Page; 25 26 @Controller 27 public class CardController { 28 @Autowired 29 private CardService c; 30 // HttpServletRequest request; 31 // HttpServletResponse response; 32 33 @RequestMapping(value = "/card/list") // 分页 34 public String list(QueryVo vo,Model model) throws UnsupportedEncodingException{ 35 36 Page<Card> page = c.selectPageByQueryVo(vo); // 条件查询 37 38 int currentPage_number = page.getPage(); // 当前页数, 39 if(currentPage_number < 1) {currentPage_number = 1;} // 条件查询后为0,要设置成1 40 41 int total = page.getTotal(); // 总记录数 42 int size = page.getSize(); // 每页显示条数 43 int tP = (int) Math.ceil(total/size); // 总页数tP,向上取整 44 if(true){tP+=1;} // 比实际值要少1,所以要+1 45 46 model.addAttribute("page", page); 47 model.addAttribute("Total_number", total); 48 model.addAttribute("totalPage_number", tP); 49 model.addAttribute("currentPage_number", currentPage_number); 50 model.addAttribute("Size_number", size); 51 52 model.addAttribute("Name", vo.getName()); 53 model.addAttribute("Race", vo.getRace()); 54 55 return "card"; 56 57 } 58 59 @RequestMapping(value = "/card/add.action",method=RequestMethod.POST) 60 public String Edit(Card card,Model model){ // 添加数据 61 c.addCard(card); 62 return "card"; 63 } 64 65 @RequestMapping(value = "/card/showFormCard.action",method=RequestMethod.POST) 66 public @ResponseBody 67 Card showFormCard(Integer id,Model model){ // id查询 68 return c.showFormCard(id); 69 } 70 71 @RequestMapping(value = "/card/modalUpdateSubmit.action") 72 public @ResponseBody 73 String updateSubmit(Card card,Model model){ // 修改数据 74 c.updateSubmit(card); 75 return "OK"; 76 } 77 78 @RequestMapping(value = "/card/delete.action") 79 public @ResponseBody 80 String deleteAjax(Integer id,Model model){ // 删除数据 81 c.deleteAjax(id); 82 return "OK"; 83 } 84 85 86 @RequestMapping(value = "/user/login.action",method=RequestMethod.GET) 87 public String intoLogin(){ // 进入登录的jsp页面 88 return "login"; 89 } 90 91 @RequestMapping(value = "/user/userLogin.action") // 接收用户登录的信息 92 public String userlogin(User user,Model model,HttpSession session, 93 String rememberme,String remembermePassword, String autoLogin, 94 HttpServletRequest request, HttpServletResponse response) 95 throws UnsupportedEncodingException{ 96 boolean s = c.userLogin(user); // 如果用户信息存在,值为true 即登录成功,反之失败 97 String loginUser = user.getUsername(); // 从接收参数上取用户名 虽密码错误,但要重进登录ye 98 99 String logintime = c.logintime(user); // 2 上次访问时间 100 int loginNumber = c.loginNumber(user); // 12 历史登录次数 101 102 User myProfileUser = c.myProfileName(user); // 我的资料 显示名称(非用户名) 103 // System.out.println("登录时,db查询,是个对象,而非str: " + myProfileUser); //若get则空指针 104 105 String usernameOfIfelse = null; // 7 判断从db中查询到的结果是否为null 106 if(c.getUsername(loginUser)==null) { // 从db获取用户名,若为空则进入错误提示 107 usernameOfIfelse ="db查询结果为null,若获得用户名则空指针"; 108 } else{ 109 usernameOfIfelse = user.getUsername(); 110 } 111 112 // 14 记住用户名 通过形参rememberme传递 113 // System.out.println("记住用户名时传递的input值 " + rememberme); 114 // remembermeUserName(user,rememberme,request,response); 115 116 // 16 记住用户名和密码 117 // System.out.println("记住用户名和密码时,传递的input值: " + remembermePassword); 118 remembermePassword(user,remembermePassword,request,response); 119 120 if(s){ // 若用户信息存在,登录成功 121 session.setAttribute("logintime", logintime); // 上次登录时间 122 session.setAttribute("loginNumber", loginNumber); // 历史登录次数(算本次) 123 session.setAttribute("loginUserName",loginUser); // myProfileUserName 124 session.setAttribute("myProfileUser", myProfileUser); // 显示在我的资料页面 125 session.setAttribute("newMy", myProfileUser.getMy()); // 第一次进入我的资料页面显示个性签名 126 return "forward:/user/loginSuccess"; // 设session,进登录成功的ye 127 } else 128 // 7 在这里判断,虽然登录失败了,但是否是用户名正确,密码错了的情况?若是,则进入登录页面 129 if(loginUser == usernameOfIfelse){ // 登录的用户名和查询的结果(已除去空指针)相等 130 session.setAttribute("UsePasswordError", 131 "用户名正确,但密码错误,请检查用户名和密码,并重新输入"); 132 return "redirect:/user/login.action"; // 重新进入登录ye 133 } else { 134 // 6 登录失败时,提示信息 135 session.setAttribute("loginFailure", "用户登录失败,请注册"); 136 return "redirect:/user/toRegister.action"; // 重定向到新的方法,去注册 137 } 138 } 139 140 // 14 记住用户名,在登录的方法之中再调用的() 141 /*public void remembermeUserName(User user,String rememberme) 142 throws UnsupportedEncodingException { 143 144 request.setCharacterEncoding("utf-8"); 145 response.setCharacterEncoding("utf-8"); 146 147 if("1".equals(rememberme)){ // rememberme有空指针的可能性 由数字改为str即无 148 // System.out.println("记住用户名: " + rememberme); 149 Cookie remembermeCookie = new Cookie("remembermeCookie",user.getUsername()); 150 remembermeCookie.setPath("/"); 151 remembermeCookie.setMaxAge(60*60*24*7); 152 response.addCookie(remembermeCookie); 153 } else if(rememberme == null){ 154 // 当没有勾选"记住用户名"时,要清理掉上次可能保存下来的用户名 155 Cookie remembermeCookie = new Cookie("remembermeCookie",user.getUsername()); 156 remembermeCookie.setPath("/"); 157 remembermeCookie.setMaxAge(0); 158 response.addCookie(remembermeCookie); 159 } 160 161 } */// 14 记住用户名 登录的方法中再调用的() 162 163 // 16 记住用户名和密码,在登录的方法中再调用的() 164 void remembermePassword(User user,String remembermePassword, 165 HttpServletRequest request, HttpServletResponse response) 166 throws UnsupportedEncodingException { 167 request.setCharacterEncoding("utf-8"); 168 response.setCharacterEncoding("utf-8"); 169 170 // System.out.println("记住用户名和密码: " + remembermePassword); 171 if("1".equals(remembermePassword)){ 172 Cookie remembermeCookie = new Cookie( 173 "remembermeCookie",user.getUsername()); 174 remembermeCookie.setPath("/"); 175 remembermeCookie.setMaxAge(60*60*24*7); 176 response.addCookie(remembermeCookie); // 往cookie中存入用户名 177 178 Cookie remembermeCookiePassword = new Cookie( 179 "remembermeCookiePassword",user.getPassword()); 180 remembermeCookiePassword.setPath("/"); 181 remembermeCookiePassword.setMaxAge(60*60*24*7); 182 response.addCookie(remembermeCookiePassword); // 往cookie中存入密码 183 184 // System.out.println(user.getUsername() + ":" +user.getPassword()); 185 186 } else if(remembermePassword == null){ 187 // 未勾选"记住用户名和密码"时,要清理掉上次可能保存下来的密码,用户名!!! 188 189 Cookie remembermeCookie = new Cookie( 190 "remembermeCookie",user.getPassword()); 191 remembermeCookie.setPath("/"); 192 remembermeCookie.setMaxAge(0); 193 response.addCookie(remembermeCookie); // 未勾选时,清除密码 194 195 Cookie remembermeCookiePassword = new Cookie( 196 "remembermeCookiePassword",user.getPassword()); 197 remembermeCookiePassword.setPath("/"); 198 remembermeCookiePassword.setMaxAge(0); 199 response.addCookie(remembermeCookiePassword); // 未勾选时,清除密码 200 } 201 } 202 203 @RequestMapping(value = "/user/loginSuccess") 204 public String LoginSuccess(User user, Model model){ // 进入登录成功的页面 205 return "LoginSuccess"; 206 } 207 208 @RequestMapping(value = "/user/homepage.action") 209 public String homepage(User user,Model model) { // 登录成功的页面进入主页面 210 return "redirect:/card/list"; 211 } 212 213 @RequestMapping("/user/toRegister.action") // 进注册的ye 214 public String toRegisterJsp(HttpSession session) { // 方式一,注册链接,二登录失败时 215 return "register"; 216 } 217 218 @RequestMapping(value = "/user/register.action") 219 public String userRegister (User user,Model model){ // 查询用户信息不一致时,去注册页面 220 c.userRegister(user); // 假设数据格式正确,所以不用返回值 221 return "redirect:/user/login.action"; 222 } 223 224 @RequestMapping(value = "/user/logOut.action") 225 public String logOut(HttpSession session) { // 暂时不考虑Cookie,当有时则要删除 226 session.removeAttribute("loginUserName"); // 从session中将user删除 227 return "redirect:/card/list"; 228 } 229 230 @RequestMapping(value = "user/ajaxUserName.action") 231 public @ResponseBody 232 Map<String,Object> ajaxUserName(String username,Model model) { // 校验用户名是否可以注册 233 234 Map<String,Object> resultMap = new HashMap<String, Object>(); 235 boolean isExist = c.ajaxUserName(username); // 用户不存在时,false 236 237 resultMap.put("isExist", isExist); 238 return resultMap; 239 } 240 241 @RequestMapping(value = "/user/myProfile.action") 242 public String myProfile (Model model){ // 查看我的资料中的用户名 243 return "myProfile"; // 进入 我的资料页面 244 } 245 246 @RequestMapping(value = "/user/updateMyProfile.action") // 更新我的资料 247 public String updateMyProfile (String loginUserName,String myProfileName, 248 String my ,String userInfo,Model model,HttpSession session){ 249 // System.out.println("长文本提交的用户信息: " + userInfo); 250 251 c.updateMyProfile(loginUserName,myProfileName,my,userInfo); // 通过用户名改名称 252 253 // 由于修改input后,重定向到我的资料,值还是原值,所以下4行代码解决这个问题 254 // 修改成功后,显示的是原值,虽然数据表已经更新,我在我的资料页面中input中三元运算符判断了 255 256 // 需要更新后的用户,用于显示 257 User u = c.updateShow(loginUserName,myProfileName,my,userInfo); 258 session.setAttribute("newUpdate", u.getName()); // 在我的资料ye中显示修改后的名称 259 session.setAttribute("newMy", u.getMy()); 260 session.setAttribute("newUserInfo", u.getUserInfo()); 261 262 return "redirect:/user/myProfile.action"; 263 } 264 265 @RequestMapping(value = "/baidu.action") 266 public String baidu() { // 进入百度一下的主页的方式1 267 return "redirect:http://www.baidu.com"; 268 } 269 270 @RequestMapping(value = "/user/UpdatePassword.action", 271 produces = "text/html;charset=UTF-8") // 4 据用户名修改密码 修改版 272 public @ResponseBody 273 String updatePassword(String usernameUpdatePassword, String password1, 274 String password2,String updatePassword) { // 目前接收session值的方式 275 276 // 如果我们不希望抛出500错误页面,但仍需要进行事务回滚 277 // 那么我们就要在controller中将service实现类抛出的异常捕获 278 try { 279 boolean b = c.updatePassword(usernameUpdatePassword,password1, 280 password2,updatePassword); 281 return "修改密码成功"; 282 } catch (Exception e) { // 如果捕获了异常,说明修改密码失败 283 return "修改密码失败"; 284 } 285 286 } 287 288 @RequestMapping(value = "user/securityQuestion.action" 289 ,produces = "text/html;charset=UTF-8") 290 public @ResponseBody String security_Question(Logininfo logininfo){ // 8 设置密保问题 291 c.sQ(logininfo); 292 293 return "目前默认修改成功"; 294 } 295 296 @RequestMapping(value = "/user/toForGet.action") 297 public String forGetPassword() { // 9 忘记密码 298 return "sQJSP"; // 进入,忘记密码时,重设密码的页面 299 300 } 301 302 /*@RequestMapping(value = "/user/toSQ.action",produces = "text/html;charset=UTF-8") 303 public @ResponseBody 304 String toSQ(Logininfo logininfo) { // 9 忘记密码,重设后的密码提交到此 305 // 如果我们不希望抛出500错误页面,但仍需要进行事务回滚 306 // 那么我们就要在controller中将service实现类抛出的异常捕获 307 try { 308 boolean b = c.forGetPassword(logininfo); 309 return "通过密保问题修改密码成功"; 310 } catch (Exception e) { 311 return "密保问题修改密码失败,已经通过事务回滚"; // 如果捕获了异常,说明修改密码失败 312 } 313 }*/ 314 315 @RequestMapping(value = "/user/toSQ.action") 316 // 9 忘记密码,进行密保问题答案的验证 317 public String toSQ(Logininfo logininfo,HttpSession session) { 318 // 如果我们不希望抛出500错误页面,但仍需要进行事务回滚 319 // 那么我们就要在controller中将service实现类抛出的异常捕获 320 try { 321 boolean b = c.forGetPassword(logininfo); 322 session.setAttribute("sQusername", logininfo.getUsername()); 323 return "sqPassword"; 324 } catch (Exception e) { 325 return "login"; // 如果捕获了异常,说明修改密码失败 326 } 327 } 328 329 @RequestMapping(value = "user/sQUpdatePassword.action") 330 public String tosQ(String sQusername, String sQupdatePassword){ // 9 密保问题验证,设密码 331 c.sQUpdatePassword(sQusername,sQupdatePassword); // 重设后的密码提交到此 332 return "redirect:/user/login.action"; 333 } 334 335 /* @RequestMapping(value = "/card/.action") // 路径 336 public @ResponseBody // 返回json注解 337 String method (Model model){ // 形参,mode往前台传值 338 // 调用service层接口 c.方法名(形参); 339 model.addAttribute("", ); 340 return "forward:/user/"; // 转发 341 return "redirect:/card/list"; // 重定向 342 return "card"; // 进入card.jsp 343 return "OK"; // ? 344 } 345 */ 346 347 348 /* @RequestMapping(value = "/baidu.action") 349 public void baidu(HttpServletResponse response) throws IOException { 350 response.sendRedirect("https://www.baidu.com"); // 进入百度一下的主页的方式2 351 } */ 352 353 }

1 package shanhai.controller; 2 3 import java.sql.Date; 4 import java.util.List; 5 6 import javax.servlet.http.HttpSession; 7 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.stereotype.Controller; 10 import org.springframework.ui.Model; 11 import org.springframework.web.bind.annotation.RequestMapping; 12 import org.springframework.web.bind.annotation.RequestMethod; 13 import org.springframework.web.bind.annotation.ResponseBody; 14 15 import shanhai.pojo.Books; 16 import shanhai.pojo.Card; 17 import shanhai.pojo.magic_trapCard; 18 import shanhai.service.DeckService; 19 20 @Controller 21 public class DeckController { 22 23 @Autowired 24 private DeckService c; 25 26 // 38 查询当前月份的书籍 27 @RequestMapping(value = "/readingDateQuery.html",params={"Query136"}, 28 method=RequestMethod.GET) 29 public String ReadingDateQuery136(Integer Query136,HttpSession session){ 30 // System.out.println(Query136); 31 List<Books> BookList = c.ReadingDateQuery136(Query136); 32 session.setAttribute("BookList", BookList); 33 34 return "book"; 35 } 36 37 /*@RequestMapping(value = "/deck/BookReadingDateQuery136") // 38 查询当前月份的书籍 38 public String ReadingDateQuery136(Integer Query136, HttpSession session){ 39 40 List<Books> BookList = c.ReadingDateQuery136(Query136); 41 session.setAttribute("BookList", BookList); 42 43 return "book"; 44 }*/ 45 46 @RequestMapping(value = "/deck/BookReadingDateQuery") // 38 书籍据时间段查询 47 public String ReadingDateQuery(Date startDateQuery,Date endDateQuery, 48 HttpSession session){ 49 List<Books> BookList = null; 50 51 BookList = c.ReadingDateQuery(startDateQuery,endDateQuery); 52 53 session.setAttribute("BookList", BookList); 54 55 return "book"; 56 } 57 58 @RequestMapping(value = "/deck/deletesMagicTrap") // 35 批量删除魔陷 59 public String deletesMagicTrap(Integer[] ids,String deletesCardId, 60 HttpSession session){ 61 String str = deletesCardId.substring(0, deletesCardId.indexOf(",")); // 截取,前的部分 62 63 if(ids != null && ids.length != 0){ 64 /*for (Integer integer : ids) { 65 System.out.println("批量删除魔陷时,提交的id数组为: " + integer); 66 }*/ 67 c.deletesMagicTrap(ids,str); 68 } 69 70 // List<magic_trapCard> magic_trapList = c.magic_trapOption(magic_trapOne,magic_trapTwo); 71 // session.setAttribute("magic_trapList", magic_trapList); 72 73 // return "magic_trapDeck"; 74 // return "redirect:/deck/magic_trapList"; // 重定向到,进入菜单-魔陷 75 // return "forward:/deck/magic_trapList"; // 转发到,进入 菜单-魔陷 76 // return "forward:/deck/magic_trapOption"; // 转发到,进入 列表联动 77 78 // 36 为了显示出操作后的页面效果,所以在这里利用str查询db 79 List<magic_trapCard> magic_trapList = c.magic_trapOptionStr(str); 80 session.setAttribute("magic_trapList", magic_trapList); 81 return "magic_trapDeck"; 82 } 83 84 @RequestMapping(value = "/deck/deleteMagicTrap") 85 public @ResponseBody 86 String deleteMagicTrap(Integer magicTrapId,String cardType,Model model){ // 34 单次删除 87 c.deleteMagicTrap(magicTrapId,cardType); 88 return "OK"; 89 } 90 91 @RequestMapping(value = "/deck/modalUpdateSubmitMagicTrap") 92 public @ResponseBody 93 String updateSubmitMagicTrap(magic_trapCard mt,Model model){ // 33魔陷修改 模态框提交的修改的值 94 c.updateSubmitMagicTrap(mt); 95 return "OK"; 96 } 97 98 @RequestMapping(value = "/deck/showFormMagicTrap") 99 public @ResponseBody 100 // 32 魔陷 模态框显示魔陷卡信息,查询 修改魔限卡时,提交的ID为magicTrapId,类型为cardType 101 magic_trapCard showFormMagic_trap(Integer magicTrapId,String cardType,Model model){ 102 // 二级联动 据ID查询的魔限卡信息为: 103 magic_trapCard mt = c.showFormMagicTrap(magicTrapId,cardType); 104 return mt; 105 } 106 107 @RequestMapping(value = "/deck/addMagic_trap") 108 public String Magic_trap(magic_trapCard mt,Model model){ // 31 添加魔陷 109 c.addMagic_trap(mt); 110 return "magic_trapDeck"; 111 } 112 113 114 @RequestMapping(value = "/deck/deletesBook.action",method=RequestMethod.POST) 115 public String deletesBook(Integer[] ids,HttpSession session){ // 27 批量删除书籍 116 if(ids != null && ids.length != 0){ 117 /*for (Integer integer : ids) { 118 System.out.println("批量删除书籍时,提交的id数组为: " + integer); 119 }*/ 120 c.deletesBook(ids); 121 } 122 123 List<Books> BookList = c.BookList(); // 23 菜单 书籍再查询一遍db中的书籍列表 124 session.setAttribute("BookList", BookList); 125 126 return "book"; 127 } 128 129 @RequestMapping(value = "/deck/deleteBook.action") 130 public @ResponseBody 131 String deleteBook(Integer id,Model model){ // 26 删除书籍 132 c.deleteBook(id); 133 return "OK"; 134 } 135 136 @RequestMapping(value = "/deck/modalUpdateSubmitBook.action") 137 public @ResponseBody 138 String updateSubmitBook(Books books,Model model){ // 25 书籍修改 模态框提交的修改的值 139 c.updateSubmitBook(books); 140 return "OK"; 141 } 142 143 @RequestMapping(value = "/deck/showFormBook.action") 144 public @ResponseBody 145 Books showFormBook(Integer id,Model model){ // 25 书籍修改 模态框显示书籍信息,查询 146 return c.showFormBook(id); // 查询到的书籍信息,id修改书籍时,提交的书名 147 } 148 149 @RequestMapping(value = "/deck/addBook.action") 150 public String addBook(Books books,Model model){ // 24 添加书籍 151 c.addBook(books); 152 return "book"; 153 } 154 155 @RequestMapping(value = "/book/list") 156 public String MenuBook(HttpSession session) { 157 List<Books> BookList = c.BookList(); // 23 菜单 书籍 158 session.setAttribute("BookList", BookList); 159 return "book"; 160 } 161 162 @RequestMapping(value = "/deck/magic_trapOption") // 22 魔陷卡组列表 163 public String magic_trapOption(String magic_trapOne,String magic_trapTwo, 164 HttpSession session) { // 形参为两个列表提交 165 List<magic_trapCard> magic_trapList = c.magic_trapOption(magic_trapOne,magic_trapTwo); 166 167 session.setAttribute("magic_trapList", magic_trapList); 168 return "magic_trapDeck"; 169 } 170 171 @RequestMapping(value = "/deck/magic_trapList") // 22 菜单新增魔陷卡组 172 public String magic_trapDeck() { 173 return "magic_trapDeck"; 174 } 175 176 @RequestMapping(value = "deck/list") 177 public String deck(String deckOne, String deckTwo,String deckInfo, 178 HttpSession session) { // 17 卡组联动 参数:第一分类,第二分类 179 List<Card> SelectDeckList = c.selectDeck(deckOne,deckTwo); // 17 补全 180 181 String newDeckInfo = c.deckInfo(deckOne,deckTwo); // 19 卡组信息 182 183 session.setAttribute("deckIdList",SelectDeckList); 184 session.setAttribute("deckInfo",newDeckInfo); 185 186 return "deck"; 187 } 188 189 /*@RequestMapping(value = "deck/list") 190 public String deck(Integer deckId, HttpSession session) { // 13 选择卡组 191 System.out.println("接收到的选择的卡组ID为: " + deckId); 192 193 List<Card> SelectDeckList = c.deckId(deckId); 194 // System.out.println("据列表提交的值,从db中查询到的卡组,遍历结果为: " + SelectDeckList); 195 196 if(SelectDeckList == null) { 197 System.out.println("结果为null"); 198 } else { 199 for (Card card : SelectDeckList) { 200 System.out.println(card); // 据列表提交的值,db中查询到的卡组,遍历结果 201 } 202 } 203 204 session.setAttribute("deckIdList",SelectDeckList); 205 return "deck"; 206 }*/ 207 208 209 /* @RequestMapping(value = "/card/.action") // 路径 210 public @ResponseBody // 返回json注解 211 String method (Model model){ // 形参,mode往前台传值 212 // 调用service层接口 c.方法名(形参); 213 model.addAttribute("", ); 214 return "forward:/user/"; // 转发 215 return "redirect:/card/list"; // 重定向 216 return "card"; // 进入card.jsp 217 return "OK"; // ? 218 } 219 */ 220 221 } // DeckController类的结束

package shanhai.controller; import java.io.File; import java.util.List; import java.util.UUID; import javax.servlet.http.HttpSession; import org.apache.commons.io.FilenameUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import shanhai.pojo.Picture; import shanhai.service.PictureService; @Controller @RequestMapping(value ="/picture") public class PictureController { @Autowired private PictureService cP; @RequestMapping(value = "/list") // 新增 查看图片列表 public ModelAndView methodPicture (HttpSession session,Model model){ // 根据数据表中存储的名称,查看本地磁盘中的图片 List<Picture> pictureList = cP.queryAll(); /*for (Picture a : pictureList) { System.out.println("list中的图片类的名称为: " + a.getPicName()); }*/ ModelAndView mav = new ModelAndView(); mav.addObject("pictureList", pictureList); mav.setViewName("picture"); return mav; } @RequestMapping(value = "/picture2",method=RequestMethod.POST) // 形参名称要和form中的nmae相同 public String updateitem(MultipartFile pictureFile) throws Exception{ // 假设接收到的图片名称是1 // 保存图片到 // 为了处理出现重名现象, 将原始文件名去掉,通过UUID算法生成新的文件名 String name = UUID.randomUUID().toString().replaceAll("-", ""); // jpg String ext = FilenameUtils.getExtension(pictureFile.getOriginalFilename()); // 指定带盘符的路径,物理路径 pictureFile.transferTo(new File("D:\\upload\\" + name + "." + ext)); String picName = new String(name + "." + ext); cP.addPicName(picName); // 在数据表中保存图片的名称 return "redirect:/picture/pictureShow.action?picName=" + picName; } @RequestMapping(value = "/pictureShow.action") public ModelAndView show1 (String picName,HttpSession session,Model model){ ModelAndView mav = new ModelAndView(); mav.addObject("picName", picName); // 接收到的licName值 mav.setViewName("picture"); return mav; } /*@RequestMapping(value = "/picture/video/list") // 已使用多请求路径,请注意 public String showVideo() { // 显示静态资源的视频 return "video"; }*/ /* @RequestMapping(value = "/card/.action") public @ResponseBody String method (Model model){ // 调用service层接口 c.方法名(形参); model.addAttribute("", ); return "forward:/user/"; return "redirect:/card/list"; return "card"; } */ }
Tomcat的配置

1 package shanhai.controller; 2 3 import java.util.List; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpSession; 7 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.stereotype.Controller; 10 import org.springframework.ui.Model; 11 import org.springframework.web.bind.annotation.PathVariable; 12 import org.springframework.web.bind.annotation.RequestBody; 13 import org.springframework.web.bind.annotation.RequestMapping; 14 import org.springframework.web.bind.annotation.RequestMethod; 15 import org.springframework.web.bind.annotation.RequestParam; 16 import org.springframework.web.bind.annotation.ResponseBody; 17 18 import shanhai.pojo.UserTest; 19 20 @Controller 21 public class TestController { 22 23 @Autowired 24 HttpServletRequest request; 25 26 @RequestMapping(value="/test/Test53",method=RequestMethod.POST) 27 public @ResponseBody UserTest requestBody53( // 53 写注释 28 @RequestBody List<UserTest> usertestList){ 29 30 System.out.println(usertestList); 31 32 UserTest uT = usertestList.get(2); 33 System.out.println("List中取出第三个对象: " + uT); 34 35 for(UserTest u : usertestList){ 36 System.out.println("姓名:" + u.getUserName() +"," + 37 "密码:" + u.getPassWord()+ 38 "别称:" + u.getName()); 39 } 40 41 return uT; 42 } 43 44 @ResponseBody 45 @RequestMapping(value="/test/requestBodyTest52.action",method=RequestMethod.POST) 46 // public String requestBody52(@RequestBody BillForm billForm ,Model model){ 47 public String requestBody52(Model model){ 48 System.out.println("进入test52"); // 52 测试接收对象+List 失败 49 50 return "ok"; 51 } 52 53 // 51 尝试 c层向ajax传递List类型的对象 54 @RequestMapping(value="/test/requestBodyTest51.action",method=RequestMethod.POST) 55 public @ResponseBody UserTest requestBody51(@RequestBody List<UserTest> usertestList ,Model model){ 56 57 System.out.println(usertestList); 58 59 UserTest uT = usertestList.get(0); 60 System.out.println("List中取出第一个对象: " + uT); 61 62 for(UserTest u : usertestList){ 63 System.out.println("姓名:" + u.getUserName() +"," + "密码:" + u.getPassWord()); 64 } 65 66 return uT; 67 } 68 69 // 50 c层向ajax传递单个java对象,已经成功 70 @RequestMapping(value="/test/requestBodyTest50.action",method=RequestMethod.POST) 71 public @ResponseBody UserTest requestBody50(@RequestBody List<UserTest> usertestList ,Model model){ 72 73 System.out.println(usertestList); 74 75 UserTest uT = usertestList.get(0); 76 System.out.println("List中取出第一个对象: " + uT); 77 78 for(UserTest u : usertestList){ 79 System.out.println("姓名:" + u.getUserName() +"," + "密码:" + u.getPassWord()); 80 } 81 82 return uT; 83 } 84 85 // 49 传递List的json数据 给c层 86 @ResponseBody 87 @RequestMapping(value="/test/requestBodyTest49.action",method=RequestMethod.POST) 88 public String requestBody49(@RequestBody List<UserTest> usertestList ,Model model){ 89 90 System.out.println(usertestList); 91 92 // UserTest uT = usertestList.get(0); 93 // System.out.println("List中取出第一个对象: " + uT); 94 95 for(UserTest u : usertestList){ 96 System.out.println("姓名:" + u.getUserName() +"," + "密码:" + u.getPassWord()); 97 } 98 99 return "ok"; 100 } 101 102 @RequestMapping(value="/test/requestBodyTest48.action") // 48@RequestBody,未收到值 103 public @ResponseBody 104 UserTest requestBody48(@RequestBody UserTest usertest,Model model){ 105 // UserTest requestBody48(String userNmae,String passWord){ // 普通的方式可以传递 106 System.out.println("进入@RequestBody测试的方法中"); 107 System.out.println(usertest); 108 109 return usertest; 110 } 111 112 @RequestMapping(value="/test/requestParam.html") // 47@RequestParam 113 public String getRequestParam(@RequestParam("name") String name){ 114 System.out.println("name值为: " + name); // 前端须有对应的名称 115 return "testJSP"; 116 } 117 118 @RequestMapping(value="/test/params/{id}") // 46@PathVariable 119 public String getParams(@PathVariable int id){ // 如果接收的参数和形参一致,直接注解即可 120 System.out.println("id值为: " + id); 121 return "testJSP"; 122 } 123 124 /*@RequestMapping(value="/test/params/{id}") // 46@PathVariable 125 public String getParams(@PathVariable("id") int idValue){ // 如果id和idValue不一致,需别名 126 System.out.println("id值为: " + idValue); 127 return "testJSP"; 128 }*/ 129 130 @RequestMapping(value="/test/into") // 43 自动注入 131 public String intoTest(){ // 进入测试用的jsp页面 132 return "testJSP"; 133 } 134 135 @RequestMapping(value={"/test/session","/test/getSession"}) 136 public String getSession(){ // 在测试ye中,点链接,在控制台获得session中的值 137 HttpSession httpSession = request.getSession(); 138 System.out.println("deckInfo值为: " + httpSession.getAttribute("deckInfo")); 139 System.out.println(httpSession); 140 141 return"testJSP"; 142 } 143 144 }
Service层

1 package shanhai.service; 2 3 import java.util.List; 4 5 import shanhai.pojo.Card; 6 import shanhai.pojo.Logininfo; 7 import shanhai.pojo.QueryVo; 8 import shanhai.pojo.User; 9 import utils.Page; 10 11 public interface CardService { 12 public List<Card> selectList(); // 查询所有 13 public void addCard(Card card); // 添加数据 14 public Card showFormCard(int id); // id查询 15 public void updateSubmit(Card card); // 修改数据 16 public void deleteAjax(Integer id); // 删除数据 17 public Page<Card> selectPageByQueryVo(QueryVo vo); // 分页按钮跳转 18 public boolean userLogin(User user); // 用户登录 19 public void userRegister(User user); // 注册用户 20 public boolean ajaxUserName(String username); // 校验用户名是否可以注册 21 public User myProfileName(User user); // 我的资料 显示名称(非用户名) 22 23 // 通过用户名修改名称 这里不受后续选择的方式1还是方式2的影响,返回只要一个结果 24 public void updateMyProfile(String loginUserName, String myProfileName, 25 String my,String userInfo); 26 27 // 需要更新后的用户,用于显示 28 public User updateShow(String loginUserName, String myProfileName, 29 String my,String userInfo); 30 31 // 修改用户密码 使用了事务 32 public boolean updatePassword(String usernameUpdatePassword,String password1, 33 String password2, String updatePassword); 34 35 public String logintime(User user); // 上次登录时间 36 37 public String getUsername(String loginUser); // 据用户名从db中查询用户信息 38 39 public void sQ(Logininfo logininfo); // 8 密保问题 40 41 public boolean forGetPassword(Logininfo logininfo); // 9 忘记密码 42 43 // 9 密保问题验证,设密码 44 public void sQUpdatePassword(String sQusername, String sQupdatePassword); 45 46 // 12 历史登录次数 47 public int loginNumber(User user); 48 49 }

1 package shanhai.service; 2 3 import java.util.Date; 4 import java.util.List; 5 import java.util.UUID; 6 7 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.stereotype.Service; 9 import org.springframework.transaction.annotation.Transactional; 10 11 import shanhai.mapper.CardDao; 12 import shanhai.pojo.Card; 13 import shanhai.pojo.Logininfo; 14 import shanhai.pojo.QueryVo; 15 import shanhai.pojo.User; 16 import utils.Page; 17 18 @Service 19 public class CardServiceImpl implements CardService { 20 @Autowired 21 private CardDao d; 22 23 public List<Card> selectList() { // 查询所有 24 return d.selectList(); 25 } 26 27 public void addCard(Card card) { // 添加数据 28 d.addCard(card); 29 } 30 31 public Card showFormCard(int id) { // id查询 32 return d.showFormCard(id); 33 } 34 35 public void updateSubmit(Card card) { // 修改数据 36 d.updateSubmit(card); 37 } 38 39 public void deleteAjax(Integer id) { // 删除数据 40 d.deleteAjax(id); 41 } 42 43 public Page<Card> selectPageByQueryVo(QueryVo vo) { // 分页按钮跳,未条件查询 44 Page<Card> page = new Page<Card>(); 45 page.setSize(5); // 每页数 46 vo.setSize(5); 47 if (null != vo) { 48 if (null != vo.getPage()) { // 判断当前页 不能为空 49 page.setPage(vo.getPage()); 50 vo.setStartRow((vo.getPage() -1)*vo.getSize()); // 算结果 51 } 52 53 if(null != vo.getName() && !"".equals(vo.getName().trim())){ 54 vo.setName(vo.getName().trim()); 55 } 56 57 if(null != vo.getRace() && !"".equals(vo.getRace().trim())){ // 下拉列表的值 58 vo.setRace(vo.getRace().trim()); 59 } 60 if(null != vo.getRace() && !"".equals(vo.getRace().trim())){ 61 vo.setRace(vo.getRace().trim()); 62 } 63 64 if(null != vo.getAtk1() && !"".equals(vo.getAtk1())){ // 无法去除空格 65 vo.setAtk1(vo.getAtk1()); 66 } 67 if(null != vo.getAtk2() && !"".equals(vo.getAtk2())){ 68 vo.setAtk2(vo.getAtk2()); 69 } 70 71 page.setTotal(d.page2QuerytotalCount(vo)); 72 page.setRows(d.pageQuery2(vo)); 73 } 74 return page; 75 } 76 77 public boolean userLogin(User user) { // 用户登录 78 User queryUser = d.userLogin(user); // 登录信息和数据表中存储的数据对比 79 80 if(queryUser!=null) { // 判断用户登录是否成功, 81 return true; // 返回值给controller 82 }else{ // 如果登录信息错误,就会返回null 83 return false; // 因为用户信息和数据库存储的数据不一致 84 } 85 86 } 87 88 public void userRegister(User user) { // 用户注册 89 user.setUid(UUID.randomUUID().toString()); // user表使用的随机生成的字符串 90 user.setState(0); 91 user.setCode("0"); 92 93 // 省市联动 目前只能接收省的值为数字,在这里转换成str 河北,四川,广东,江西 94 switch(user.getProvinces()) { 95 case "0" : 96 user.setProvinces("河北省"); 97 break; 98 case "1" : 99 user.setProvinces("四川省"); 100 break; 101 case "2" : 102 user.setProvinces("广东省"); 103 break; 104 case "3" : 105 user.setProvinces("江西省"); 106 break; 107 } 108 109 d.userRegister(user); // 设置后的省的值为user.getProvinces() 110 111 } 112 113 public boolean ajaxUserName(String username) { // 校验用户名是否可以注册 114 User u = d.ajaxUserName(username); 115 116 if(u == null) { 117 return false; 118 }else { 119 return true; 120 } 121 122 } 123 124 public User myProfileName(User user) { // 我的资料 显示名称(非用户名) 125 return d.myProfileName(user); 126 } 127 128 // 通过用户名修改名称 方式1 应该有能接收多参数传入的方式,先用之前的方式,后续改用@param注解 129 /* public void updateMyProfile(String loginUserName, String myProfileName) { 130 // 将获得的参数设置成一个对象, 131 User u= new User(); 132 u.setUsername(loginUserName); 133 u.setName(myProfileName); 134 d.updateMyProfile(u); 135 }*/ 136 137 // 新增修改个性签名的参数 138 // 通过用户名修改名称 方式2,尝试使用@param注解来传递多个参数值 139 public void updateMyProfile(String loginUserName, String myProfileName, 140 String my,String userInfo) { 141 d.updateMyProfile(loginUserName,myProfileName,my,userInfo); 142 } 143 144 // 需要更新后的用户对象,用于显示 方式1 准备传入一个user类 145 /*public User updateShow(String loginUserName, String myProfileName) { 146 // 将获得的参数设置成一个对象, 147 User updateShow = new User(); 148 updateShow.setUsername(loginUserName); 149 updateShow.setName(myProfileName); 150 return d.updateShow(updateShow); 151 }*/ 152 153 // 需要更新后的用户对象,用于显示 方式2 使用@param注解来传递多个参数值 154 public User updateShow(String loginUserName, String myProfileName, 155 String my,String userInfo) { 156 return d.updateShow(loginUserName,myProfileName,my,userInfo); 157 } 158 159 // 修改用户密码 使用事务 160 @Transactional 161 public boolean updatePassword(String usernameUpdatePassword, String password1, 162 String password2, String updatePassword) { 163 String username = usernameUpdatePassword; // 据当前用户名修改密码 164 165 User user1 = d.queryPassword1(username,password1); // 旧用户的uid 166 User user2 = d.queryPassword2(username,password2); 167 168 d.updatePassword(username,updatePassword); 169 170 // 这里不能使用|| ||代表任意一个条件为真,判断结果就是真,不满足需求 171 if(user1 != null && user2 !=null ) { // 如果查询和更新都成功,返回true,表示成功 172 return true; 173 } else { // 否则,抛出异常,回滚事务,表示失败 174 throw new RuntimeException(); 175 } 176 177 } // 修改用户密码的方法的结束括号 178 179 180 public String logintime(User user) { // 2 上次登录时间 181 String s = null ; // 准备返回的值 182 183 String usernameLogintime = user.getUsername(); // 获取当前用户名 184 185 // 将if-else改为根据当前用户名查询到的数值,再判断是否为null 186 // 改在else中查询,预期是只执行一次即可 187 188 // 从db中获取上次时间 后由string改为类Logininfo 作用if-else判断用 189 // 预期效果为: 此用户是第一次登录时,返回null 不是时,返回一个对象,包含用户名和时间 190 Logininfo selectTime = d.selectLogintime(usernameLogintime); 191 192 if(selectTime!= null) { // db有值,代表非第一次登录 193 Date Date = new Date(); 194 d.firstLoginTime(usernameLogintime,Date); // 在db中设置当前时间 195 selectTime = d.selectLogintime(usernameLogintime); // 再次获取时间 196 s = selectTime.getLogintime(); 197 } else { // 无,代表第一次 198 s = "当前用户是第一次登录,下次登录时则会显示具体时间"; 199 200 // 在这里将用户名存入db中,因为else只会执行一次,也就是时间为null时,所以不用考虑其它 201 d.setLogininfoUsername(usernameLogintime); 202 } 203 return s; 204 } // 上次登录时间的结束括号 205 206 public String getUsername(String loginUser) { // 据用户名从db中查询用户信息 207 return d.getUsername(loginUser); 208 } 209 210 public void sQ(Logininfo logininfo) { // 8 密保问题 未使用事务 211 212 String Username = logininfo.getUsername(); // 密保问题中,当前的用户名 213 214 String securityQuestion1 = logininfo.getSecurityQuestion1(); // 设置密保问题1 215 d.setSQ1(Username,securityQuestion1); 216 217 Logininfo q1 = d.querySQ1(Username,securityQuestion1); // 从db查询密保问题1 218 String q1str = q1.getSecurityQuestion1(); 219 220 String securityQuestion2 = logininfo.getSecurityQuestion2(); // 设置密保问题2 221 d.setSQ2(Username,securityQuestion2); 222 223 Logininfo q2 = d.querySQ2(Username,securityQuestion2); // 从db查询密保问题2 224 String q2str = q2.getSecurityQuestion2(); 225 226 227 String securityQuestion3 = logininfo.getSecurityQuestion3(); // 设置密保问题3 228 d.setSQ3(Username,securityQuestion3); 229 230 Logininfo q3 = d.querySQ3(Username,securityQuestion3); // 从db查询密保问题3 231 String q3str = q3.getSecurityQuestion3(); 232 } 233 234 @Transactional 235 public boolean forGetPassword(Logininfo logininfo) { // 9 忘记密码 要使用事务 236 String Username = logininfo.getUsername(); 237 238 String securityQuestion1 = logininfo.getSecurityQuestion1(); // form接收到的问题1 239 Logininfo q1 = d.querySQ1(Username,securityQuestion1); // 从db查询到的问题1 240 String dbsQ1 = q1.getSecurityQuestion1(); 241 242 String securityQuestion2 = logininfo.getSecurityQuestion2(); // form接收到的问题2 243 Logininfo q2 = d.querySQ2(Username,securityQuestion2); // 从db查询到的问题2 244 String dbsQ2 = q2.getSecurityQuestion2(); 245 246 String securityQuestion3 = logininfo.getSecurityQuestion3(); // form接收到的问题3 247 Logininfo q3 = d.querySQ3(Username,securityQuestion3); // 从db查询到的问题3 248 String dbsQ3 = q3.getSecurityQuestion3(); 249 250 // 当form接收到的问题的答案 和 db中用户名+问题查询的结果 共3次,额外有3次接收值不为空的判断 251 // 不能判断不为空,因为刚一进入的页面时,必须是空的 252 // securityQuestion1 != null && securityQuestion2 != null && securityQuestion1 != null 253 if(securityQuestion1.equals(dbsQ1) && securityQuestion2.equals(dbsQ2) && 254 securityQuestion3.equals(dbsQ3)) { 255 return true; 256 } else { // 否则,抛出异常,回滚事务,表示失败 257 throw new RuntimeException(); 258 } 259 260 } 261 262 // 9 密保问题验证,设密码 263 public void sQUpdatePassword(String sQusername, String sQupdatePassword) { 264 d.sQUpdatePassword(sQusername,sQupdatePassword); 265 } 266 267 // 12 历史登录次数 268 public int loginNumber(User user) { 269 String username = user.getUsername(); // 当前用户名 270 271 Logininfo logininfo = d.loginNumber(username); // 查询登录次数 272 int loginSuccessNumber = logininfo.getLoginNumber(); 273 274 loginSuccessNumber++; // 本次登录成功,则往logininfo中loginNumber的值+1 275 276 d.setLoginNumber(username,loginSuccessNumber); // +1后存入db 277 278 return loginSuccessNumber; 279 } 280 281 } // CardServiceImpl的结束括号

1 package shanhai.service; 2 3 import java.sql.Date; 4 import java.util.List; 5 6 import shanhai.pojo.Books; 7 import shanhai.pojo.Card; 8 import shanhai.pojo.magic_trapCard; 9 10 public interface DeckService { 11 List<Card> deckId(Integer deckId); // 13 选择卡组 12 List<Card> selectDeck(String deckOne, String deckTwo); // 17 卡组联动,选择具体的卡组 13 String deckInfo(String deckOne, String deckTwo); // 19 卡组信息 14 15 // 22 魔陷卡组列表 16 List<magic_trapCard> magic_trapOption(String magic_trapOne, String magic_trapTwo); 17 List<Books> BookList(); // 23 书架列表查询 18 public void addBook(Books books); // 24 添加书籍 19 Books showFormBook(int id); // 25 模态框显示书籍信息,查询 20 void updateSubmitBook(Books books); // 25 书籍修改 模态框提交的修改的值 21 void deleteBook(Integer id); // 26 删除书籍 22 void deletesBook(Integer[] ids); // 27 批量删除书籍 23 void addMagic_trap(magic_trapCard mt); // 31 添加魔陷 24 25 // 32 魔陷 模态框显示魔陷卡信息,查询 26 magic_trapCard showFormMagicTrap(Integer magicTrapId,String cardType); 27 // 33魔陷修改 模态框提交的修改的值 28 void updateSubmitMagicTrap(magic_trapCard mt); 29 void deleteMagicTrap(Integer magicTrapId, String cardType); // 34 单次删除 30 void deletesMagicTrap(Integer[] ids, String str); // 35 批量删除 31 32 // 36 为了显示出操作后的页面效果,所以在这里利用str查询db 33 List<magic_trapCard> magic_trapOptionStr(String str); 34 // 38 书籍据时间段查询 35 List<Books> ReadingDateQuery(Date startDateQuery, Date endDateQuery); 36 // 38 查询当前月份的书籍 37 List<Books> ReadingDateQuery136(Integer query136); 38 39 }

1 package shanhai.service; 2 3 import java.sql.Date; 4 import java.util.List; 5 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Service; 8 9 import shanhai.mapper.DeckDao; 10 import shanhai.pojo.Books; 11 import shanhai.pojo.Card; 12 import shanhai.pojo.magic_trapCard; 13 14 @Service 15 public class DeckServiceImpl implements DeckService{ 16 @Autowired 17 private DeckDao d; 18 19 public String deckInfo(String deckOne, String deckTwo) { // 19 卡组信息 20 String selectDeckInfo = null ; // 准备根据列表传递过来的值,来从db查询卡组信息 21 22 // 0:黑魔术师 0:黑魔导少女 1:自然竹笋 1:自然木鳞龙 不同于查询卡组内容,这是查询卡组信息 23 if("0".equals(deckOne)){ 24 25 switch(deckTwo) { 26 case "黑魔术师" : 27 selectDeckInfo = d.selectDeckInfo2(); // 黑魔术师卡组 28 break; 29 case "黑魔导少女" : 30 selectDeckInfo = d.selectDeckInfo3(); // 黑魔导少女卡组 31 break; 32 } 33 } 34 35 if("1".equals(deckOne)) { 36 switch(deckTwo) { 37 case "自然竹笋" : 38 selectDeckInfo = d.selectDeckInfo4(); // 自然竹笋卡组 39 break; 40 case "自然木鳞龙" : 41 selectDeckInfo = d.selectDeckInfo5(); // 自然木鳞龙卡组 42 break; 43 case "自然木龙兽" : 44 selectDeckInfo = d.selectDeckInfo6(); // 自然木龙兽 45 } 46 } 47 48 return selectDeckInfo; 49 } 50 51 52 public List<Card> selectDeck(String deckOne, String deckTwo) { // 17 卡组联动,选择具体的卡组 53 List<Card> deckIdList = null ; // 准备根据列表传递过来的值,来选择从db中查询 54 55 // 0:黑魔术师 0:黑魔导少女 1:自然竹笋 1:自然木鳞龙 56 if("0".equals(deckOne)){ 57 switch(deckTwo) { 58 case "黑魔术师" : 59 deckIdList = d.deckId2(); // 黑魔术师卡组 60 break; 61 case "黑魔导少女" : 62 deckIdList = d.deckId3(); // 黑魔导少女卡组 63 break; 64 } 65 } 66 67 if("1".equals(deckOne)) { 68 switch(deckTwo) { 69 case "自然竹笋" : 70 deckIdList = d.deckId4(); // 自然竹笋卡组 71 break; 72 case "自然木鳞龙" : 73 deckIdList = d.deckId5(); // 自然木鳞龙卡组 74 break; 75 case "自然木龙兽" : 76 deckIdList = d.deckId6(); // 自然木龙兽 77 } 78 } 79 80 return deckIdList; 81 } 82 83 84 public List<Card> deckId(Integer deckId) { // 13 选择卡组 85 // 目前有3种情况1,null 2是数值为1(代表自然竹笋卡组),3是数值为2(代表黑魔导少女卡组) 86 if(deckId == null) { 87 deckId = 0; 88 } 89 90 List<Card> deckIdList = null ; // 准备根据列表传递过来的值,来选择从db中查询 91 92 switch(deckId) { 93 case 0 : 94 // 无卡组 95 break; 96 case 1 : 97 deckIdList = d.deckId2(); // 从db中查询deck2 自然竹笋 98 break; 99 case 2 : 100 deckIdList = d.deckId3(); // 从db中查询deck3 101 break; 102 } 103 104 /*if(deckIdList == null ) { 105 deckIdList.add(new Card(1,"0","0","0",0,0)); 106 }*/ 107 108 return deckIdList; 109 } 110 111 // 22 魔陷卡组列表 112 public List<magic_trapCard> magic_trapOption(String magic_trapOne, String magic_trapTwo) { 113 List<magic_trapCard> magic_trapList = null ; 114 115 if("0".equals(magic_trapOne)){ 116 switch(magic_trapTwo) { 117 case "场地魔法卡" : 118 magic_trapList = d.magic1(); 119 break; 120 case "普通魔法卡" : 121 magic_trapList = d.magic2(); 122 break; 123 } 124 } 125 126 if("1".equals(magic_trapOne)) { 127 switch(magic_trapTwo) { 128 case "普通陷阱卡" : 129 magic_trapList = d.trap1(); 130 break; 131 case "反击陷阱卡" : 132 magic_trapList = d.trap2(); 133 break; 134 } 135 } 136 137 return magic_trapList; 138 } 139 140 public List<Books> BookList() { // 23 书架列表查询 141 List<Books> ListBook = d.BookList(); 142 143 return ListBook; 144 } 145 146 public void addBook(Books books) { // 24 添加书籍 147 d.addBook(books); 148 } 149 150 public Books showFormBook(int id) { // 25 模态框显示书籍信息,查询 151 // 在些尝试一下能否从db中查询出timestamp类型的数据 152 153 154 155 return d.showFormBook(id); 156 } 157 158 public void updateSubmitBook(Books books) { // 25 书籍修改 模态框提交的修改的值 159 d.updateSubmitBook(books); 160 } 161 162 public void deleteBook(Integer id) { // 26 删除书籍 163 d.deleteBook(id); 164 } 165 166 167 public void deletesBook(Integer[] ids) { // 27 批量删除书籍 168 d.deletesBook(ids); 169 } 170 171 172 public void addMagic_trap(magic_trapCard mt) { // 31 添加魔陷 173 String s = mt.getCardType(); // 据cardType类型,选择不同的数据表,然后再添加 174 switch(s){ 175 case "场地魔法卡": 176 d.addMagic_card1(mt); // 添加到magic_card1 177 break; 178 case "普通魔法卡": 179 d.addMagic_card2(mt); // 添加到magic_card2 180 break; 181 case "普通陷阱卡": 182 d.addTrap_card1(mt); // 添加到trap_card1 183 break; 184 case "反击陷阱卡": 185 d.addTrap_card2(mt); // 添加到trap_card2 186 break; 187 } 188 189 } 190 191 // 32 魔陷 模态框显示魔陷卡信息,查询 192 public magic_trapCard showFormMagicTrap(Integer magicTrapId,String cardType) { 193 // 据cardType类型,选择不同的数据表,然后再查询 194 magic_trapCard magic_trapCard = null; 195 196 switch(cardType){ 197 case "场地魔法卡": 198 magic_trapCard = d.showFormMagic1(magicTrapId); // 查询魔陷中的魔法卡列表1 199 break; 200 case "普通魔法卡": 201 magic_trapCard = d.showFormMagic2(magicTrapId); // 查询魔陷中的魔法卡列表2 202 break; 203 case "普通陷阱卡": 204 magic_trapCard = d.showFormTrap1(magicTrapId); // 查询魔陷中的陷阱卡列表1 205 break; 206 case "反击陷阱卡": 207 magic_trapCard = d.showFormTrap2(magicTrapId); // 查询魔陷中的陷阱卡列表2 208 break; 209 } 210 211 return magic_trapCard; 212 } 213 214 // 33魔陷修改 模态框提交的修改的值 215 public void updateSubmitMagicTrap(magic_trapCard mt) { 216 String s = mt.getCardType(); // 据魔陷卡的卡片类型来判断修改到哪个表中 217 218 switch(s) { 219 case "场地魔法卡" : 220 d.updateSubmitMagic1(mt); 221 break; 222 case "普通魔法卡" : 223 d.updateSubmitMagic2(mt); 224 break; 225 case "普通陷阱卡" : 226 d.updateSubmitTrap1(mt); 227 break; 228 case "反击陷阱卡" : 229 d.updateSubmitTrap2(mt); 230 break; 231 } 232 233 } 234 235 public void deleteMagicTrap(Integer magicTrapId, String cardType) { // 34 单次删除 236 switch(cardType){ // 据cardType类型,选择不同的数据表,然后再删除 237 case "场地魔法卡": 238 d.deleteMagic1(magicTrapId); // 查询魔陷中的魔法卡列表1 239 break; 240 case "普通魔法卡": 241 d.deleteMagic2(magicTrapId); // 查询魔陷中的魔法卡列表2 242 break; 243 case "普通陷阱卡": 244 d.deleteTrap1(magicTrapId); // 查询魔陷中的陷阱卡列表1 245 break; 246 case "反击陷阱卡": 247 d.deleteTrap2(magicTrapId); // 查询魔陷中的陷阱卡列表2 248 break; 249 } 250 } 251 252 public void deletesMagicTrap(Integer[] ids, String str) { // 35 批量删除 253 switch(str){ // 据前端隐藏input传递的str,选择不同的数据表,然后再删除 254 case "场地魔法卡": 255 d.deletesMagic1(ids); // 批量删除魔陷卡列表中的魔法卡列表1 256 break; 257 case "普通魔法卡": 258 d.deletesMagic2(ids); 259 break; 260 case "普通陷阱卡": 261 d.deletesTrap1(ids); 262 break; 263 case "反击陷阱卡": 264 d.deletesTrap2(ids); 265 break; 266 } 267 } 268 269 // 36 为了显示出操作后的页面效果,所以在这里利用str查询db 270 public List<magic_trapCard> magic_trapOptionStr(String str) { 271 List<magic_trapCard> mtList = null; 272 273 switch(str) { 274 case "场地魔法卡": 275 mtList = d.selectMagic1(); 276 break; 277 case "普通魔法卡": 278 mtList = d.selectMagic2(); 279 break; 280 case "普通陷阱卡": 281 mtList = d.selectTrap1(); 282 break; 283 case "反击陷阱卡": 284 mtList = d.selectTrap2(); 285 break; 286 } 287 288 return mtList; 289 } 290 291 // 38 书籍据时间段查询 292 public List<Books> ReadingDateQuery(Date startDateQuery, Date endDateQuery) { 293 return d.ReadingDateQuery(startDateQuery,endDateQuery); 294 } 295 296 // 38 查询当前月份的书籍 297 public List<Books> ReadingDateQuery136(Integer Query136) { 298 List<Books> bookList = null; 299 300 switch(Query136){ 301 case 1: 302 bookList = d.ReadingDateQuery1(); 303 break; 304 case 3: 305 bookList = d.ReadingDateQuery3(); 306 break; 307 case 6: 308 bookList = d.ReadingDateQuery6(); 309 break; 310 } 311 312 return bookList; 313 } 314 315 } // DeckServiceImpl类的结束括号

1 package shanhai.service; 2 3 import java.util.List; 4 import shanhai.pojo.Picture; 5 6 public interface PictureService { 7 8 public void addPicName(String picName); // 在数据表中保存图片的名称 9 10 public List<Picture> queryAll(); // 查询图片列表 11 12 }

1 package shanhai.service; 2 3 import java.util.List; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Service; 7 8 import shanhai.mapper.PictureDao; 9 import shanhai.pojo.Picture; 10 11 @Service 12 public class PictureServiceImpl implements PictureService { 13 14 @Autowired 15 private PictureDao pD; 16 17 public void addPicName(String picName) { // 在数据表中保存图片的名称 18 pD.addPicName(picName); 19 } 20 21 public List<Picture> queryAll() { 22 return pD.queryAll(); 23 } 24 25 }
Dao层

1 package shanhai.mapper; 2 3 import java.util.Date; 4 import java.util.List; 5 6 import org.apache.ibatis.annotations.Param; 7 8 import shanhai.pojo.Card; 9 import shanhai.pojo.Logininfo; 10 import shanhai.pojo.QueryVo; 11 import shanhai.pojo.User; 12 13 public interface CardDao { 14 public List<Card> selectList(); // 查询所有 15 public void addCard(Card card); // 添加数据 16 public Card showFormCard(int id); // id查询 17 public void updateSubmit(Card card); // 修改数据 18 public void deleteAjax(int id); // 删除数据 19 public Integer page2QuerytotalCount(QueryVo vo); // 根据条件,查询总条数 20 public List<Card> pageQuery2(QueryVo vo); // 根据条件,返回分页的结果 21 public User userLogin(User user); // 用户登录 22 public void userRegister(User user); // 用户注册 23 public User ajaxUserName(String username); // 校验用户名是否可以注册 24 public User myProfileName(User user); // 我的资料 显示名称(非用户名) 25 // public void updateMyProfile(User u); // 通过用户名修改名称 第一种方式 26 public void updateMyProfile( // 通过用户名修改名称 方式2 新增my 27 @Param("username") String loginUserName, 28 @Param("name") String myProfileName, 29 @Param("my") String my, 30 @Param("userInfo") String userInfo); 31 32 // public User updateShow(User updateShow); // 需要更新后的用户对象,用于显示 方式1 33 public User updateShow( // 需要更新后的user来显示 方式2 新增my 34 @Param("username") String loginUserName, 35 @Param("name") String myProfileName, 36 @Param("my") String my, 37 @Param("userInfo") String userInfo); 38 39 public User queryPassword1( // 第一次查询密码 40 @Param("username") String username, 41 @Param("password") String password1); 42 43 public User queryPassword2( // 第二次查询密码 44 @Param("username") String username, 45 @Param("password") String password2); 46 47 public void updatePassword( // 更新密码 48 @Param("username") String username, 49 @Param("password") String updatePassword); 50 51 // 第一次登录时,记录当前时间 后续传入用户名 后改为每次登录时都设置 52 public void firstLoginTime( 53 @Param("username") String usernameLogintime, 54 @Param("logintime") Date Date); 55 56 public Logininfo selectLogintime( // 从db中查询上次登录的时间 57 @Param("username") String usernameLogintime); 58 59 // 利用if-elst设置一次,将用户名保存到logininfo中 60 public void setLogininfoUsername( 61 @Param("username") String usernameLogintime); 62 63 // 据用户名从db中查询用户信息 64 public String getUsername( 65 @Param("username") String loginUser); 66 67 // 8 密保问题 设置密保问题1 68 public String setSQ1( 69 @Param("username") String Username, 70 @Param("securityQuestion1") String securityQuestion1); 71 72 // 从db中查询密保问题1的结果 73 public Logininfo querySQ1( 74 @Param("username") String Username, 75 @Param("securityQuestion1") String securityQuestion1); 76 77 78 // 设置密保问题2 79 public void setSQ2( 80 @Param("username") String Username, 81 @Param("securityQuestion2") String securityQuestion2); 82 83 // 从db中查询密保问题2的结果 84 public Logininfo querySQ2( 85 @Param("username") String Username, 86 @Param("securityQuestion2") String securityQuestion2); 87 88 89 // 设置密保问题3 90 public void setSQ3( 91 @Param("username") String Username, 92 @Param("securityQuestion3") String securityQuestion3); 93 94 // 从db中查询密保问题3的结果 95 public Logininfo querySQ3( 96 @Param("username") String Username, 97 @Param("securityQuestion3") String securityQuestion3); 98 99 // 9 密保问题验证,设密码 100 public void sQUpdatePassword( 101 @Param("username") String sQusername, 102 @Param("password") String sQupdatePassword); 103 104 // 12 查询登录次数 105 public Logininfo loginNumber( 106 @Param("username") String username); 107 108 // 12 +1后存入db 109 public void setLoginNumber( 110 @Param("username") String username, 111 @Param("loginNumber") int loginSuccessNumber); 112 113 }

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <mapper namespace="shanhai.mapper.CardDao"> <!-- 命名空间,包名可能会变 --> 4 5 <!-- 12 +1后存入db --> 6 <update id="setLoginNumber"> 7 UPDATE logininfo 8 <set> 9 loginNumber = #{loginNumber} 10 </set> 11 <where> 12 username = #{username} 13 </where> 14 15 </update> 16 17 <!-- 12 历史登录次数1 查询登录次数--> 18 <select id="loginNumber" resultType="Logininfo"> 19 SELECT * FROM logininfo 20 <where> 21 <if test="username != null and username != ''"> 22 username = #{username} 23 </if> 24 </where> 25 </select> 26 27 <!-- 9 密保问题验证后,设置密码--> 28 <update id="sQUpdatePassword"> 29 UPDATE user 30 <set> 31 password = #{password} 32 </set> 33 <where> 34 <if test="username != null and username != ''"> 35 username = #{username} 36 </if> 37 </where> 38 </update> 39 40 <!-- 从db中查询密保问题3的结果 --> 41 <select id="querySQ3" resultType="Logininfo"> 42 SELECT * FROM logininfo 43 <where> 44 <if test="username != null and username != ''"> 45 username = #{username} 46 </if> 47 <if test="securityQuestion3 != null and securityQuestion3 != ''"> 48 and securityQuestion3 = #{securityQuestion3} 49 </if> 50 </where> 51 </select> 52 53 <!-- 设置密保问题3 --> 54 <select id="setSQ3"> 55 UPDATE logininfo 56 <set> 57 securityQuestion3 = #{securityQuestion3} 58 </set> 59 <where> 60 <if test="username != null and username != ''"> 61 username = #{username} 62 </if> 63 </where> 64 </select> 65 66 67 <!-- 从db中查询密保问题2的结果 --> 68 <select id="querySQ2" resultType="Logininfo"> 69 SELECT * FROM logininfo 70 <where> 71 <if test="username != null and username != ''"> 72 username = #{username} 73 </if> 74 <if test="securityQuestion2 != null and securityQuestion2 != ''"> 75 and securityQuestion2 = #{securityQuestion2} 76 </if> 77 </where> 78 </select> 79 80 <!-- 设置密保问题2 --> 81 <select id="setSQ2"> 82 UPDATE logininfo 83 <set> 84 securityQuestion2 = #{securityQuestion2} 85 </set> 86 <where> 87 <if test="username != null and username != ''"> 88 username = #{username} 89 </if> 90 </where> 91 </select> 92 93 <!-- 从db中查询密保问题1的结果 --> 94 <select id="querySQ1" resultType="Logininfo"> 95 SELECT * FROM logininfo 96 <where> 97 <if test="username != null and username != ''"> 98 username = #{username} 99 </if> 100 <if test="securityQuestion1 != null and securityQuestion1 != ''"> 101 and securityQuestion1 = #{securityQuestion1} 102 </if> 103 </where> 104 </select> 105 106 <!-- 8 密保问题 设置密保问题1 --> 107 <select id="setSQ1"> 108 UPDATE logininfo 109 <set> 110 securityQuestion1 = #{securityQuestion1} 111 </set> 112 <where> 113 <if test="username != null and username != ''"> 114 username = #{username} 115 </if> 116 </where> 117 </select> 118 119 <!-- 据用户名从db中查询用户信息 120 SELECT * FROM USER WHERE username = '1'; --> 121 <select id="getUsername" resultType="String"> 122 SELECT * FROM user 123 <where> 124 <if test="username != null and username != ''"> 125 username = #{username} 126 </if> 127 </where> 128 </select> 129 130 <!-- 利用if-elst设置一次,将用户名保存到logininfo中 --> 131 <!-- public void setLogininfoUsername(String usernameLogintime); --> 132 <insert id="setLogininfoUsername" parameterType="String"> 133 INSERT INTO logininfo (username) VALUES (#{username}); 134 </insert> 135 136 <!-- 根据当前用户名,从db中查询上次登录的时间 --> 137 <!-- 这是,不用用户名就能直接查询时间的版本 --> 138 <!-- <select id="selectLogintime" resultType="String"> 139 SELECT logintime FROM logininfo ; 140 </select> --> 141 142 <!-- 根据当前用户名,从db中查询上次登录的时间 --> 143 <!-- 真正的根据当前用户名查询,而非上个版本的直接查询 --> 144 <!-- <select id="selectLogintime" resultType="String"> 145 SELECT logininfo 146 <where> 147 <if test="username != null and uaername != ''"> 148 username = #{username} 149 <if test="logintime != null and logintime != ''"> 150 and logintime = #{logintime} 151 </where> 152 </select> --> 153 154 <!-- 根据当前用户名,从db中查询上次登录的时间 --> 155 <!-- 真正的根据当前用户名查询,而非上个版本的直接查询 --> 156 <!-- 改为使用占位符,不然总是能查询到 --> 157 <select id="selectLogintime" resultType="Logininfo"> 158 SELECT * FROM logininfo 159 <where> 160 <if test="username != null and username != ''"> 161 username = #{username} 162 </if> 163 </where> 164 165 </select> 166 167 <!-- 第一次登录时,记录当前时间 后弃用parameterType="Date" --> 168 <insert id="firstLoginTime" > 169 UPDATE logininfo 170 <set> 171 logintime = #{logintime} 172 </set> 173 <where>username = #{username}</where> 174 </insert> 175 176 <!-- 更新密码 根据用户名来设置密码 --> 177 <select id="updatePassword" > 178 UPDATE user 179 <set> 180 password = #{password} 181 </set> 182 <where> username = #{username} </where> 183 </select> 184 185 <!-- 第二次查询密码 --> 186 <select id="queryPassword2" resultType="User"> 187 SELECT * FROM user 188 <where> 189 <if test="username != null and username != ''"> 190 username = #{username} 191 </if> 192 <if test="password != null and password != ''"> 193 and password = #{password} 194 </if> 195 </where> 196 </select> 197 198 <!-- 第一次查询密码 --> 199 <select id="queryPassword1" resultType="User"> 200 SELECT * FROM user 201 <where> 202 <if test="username != null and username != ''"> 203 username = #{username} 204 </if> 205 <if test="password != null and password != ''"> 206 and password = #{password} 207 </if> 208 </where> 209 </select> 210 211 <!-- 需要更新后的用户,用于显示 方式2 使用@param注解,这里不用写传入的参数 --> 212 <select id="updateShow" resultType="User"> 213 SELECT * FROM user 214 <where> 215 <if test="username != null and username != ''"> 216 username = #{username} 217 </if> 218 <if test="name != null and name != ''"> 219 and name = #{name} 220 </if> 221 <if test="my != null and my != ''"> 222 and my = #{my} 223 </if> 224 <if test="userInfo != null and userInfo != ''"> 225 and userInfo = #{userInfo} 226 </if> 227 </where> 228 </select> 229 230 <!-- 需要更新后的用户,用于显示 方式1 即传入一个类 具体参数类型为User --> 231 <!-- <select id="updateShow" parameterType="User" resultType="User"> 232 select * from user where username = #{username} and name = #{name} 233 </select> --> 234 235 <!-- 通过用户名修改名称 方式2 使用@param注解,这里不用写传入的参数 --> 236 <update id="updateMyProfile" > 237 UPDATE user 238 <set> name = #{name},my = #{my},userInfo = #{userInfo} </set> 239 <where> username = #{username} </where> 240 </update> 241 242 <!-- 通过用户名修改名称 方式1 即传入一个类 具体参数类型为User --> 243 <!-- <select id="updateMyProfile" parameterType="User" > 244 UPDATE user 245 <set>name = #{name}</set> 246 <where>username = #{username}</where> 247 </select> --> 248 249 <!-- 我的资料 显示名称(非用户名) --> 250 <select id="myProfileName" parameterType="String" resultType="User"> 251 SELECT * FROM user 252 <where> username = #{username} </where> 253 </select> 254 255 <!-- 校验用户名是否可以注册 --> 256 <select id="ajaxUserName" parameterType="String" resultType="User"> 257 SELECT * FROM user 258 <where> username = #{username} </where> 259 </select> 260 261 <!-- 用户注册,state,code没有详细设置 --> 262 <select id="userRegister" parameterType="User" > 263 INSERT INTO user (uid,username,password,email,name,sex,provinces,provinceCity,birthday,state,code) 264 VALUES(#{uid},#{username},#{password},#{email},#{name},#{sex},#{provinces}, 265 #{provinceCity},#{birthday},#{state},#{code}) 266 </select> 267 268 <!-- 用户登录 --> 269 <select id="userLogin" parameterType="User" resultType="User"> 270 SELECT * FROM user 271 <where> username = #{username} and password = #{password} </where> 272 </select> 273 274 <!-- 总条数 注意条件,目前有3个 --> 275 <select id="page2QuerytotalCount" parameterType="QueryVo" resultType="Integer"> 276 SELECT COUNT(1) FROM deck 277 <where> 278 <if test="name != null and name != ''"> 279 name like "%"#{name}"%" 280 </if> 281 <if test="race != null and race != ''"> 282 AND race = #{race} 283 </if> 284 <if test="atk1 != null and atk1 != ''"> 285 AND atk BETWEEN #{atk1} AND #{atk2} 286 </if> 287 </where> 288 </select> 289 290 <!-- 结果集,新增查询条件race,新增范围查询的范围值2个,总条数的SQL要设置好相对应的条件 --> 291 <!-- 方法返回类型是List<Card>,但是这里的返回类型是集合中的元素的类型 --> 292 <select id="pageQuery2" parameterType="QueryVo" resultType="Card"> 293 SELECT * FROM deck 294 <where> 295 <if test="name != null and name != ''"> 296 name like "%"#{name}"%" 297 </if> 298 <if test="race != null and race != ''"> 299 AND race = #{race} 300 </if> 301 <if test="atk1 != null and atk1 != ''"> 302 AND atk BETWEEN #{atk1} AND #{atk2} 303 </if> 304 305 </where> 306 limit #{startRow},#{size} 307 </select> 308 309 <!-- 删除数据 --> 310 <delete id="deleteAjax" parameterType="int"> 311 DELETE FROM deck 312 <where> id = #{id} </where> 313 </delete> 314 315 <!-- 修改数据 --> 316 <update id="updateSubmit" parameterType="Card"> 317 UPDATE deck 318 <set> name=#{name},attribute=#{attribute},race=#{race},atk=#{atk},def=#{def} </set> 319 <where> id=#{id} </where> 320 </update> 321 322 <!-- 通过id查询,并返回结果在表单中显示,有传参,有返回值 --> 323 <select id="showFormCard" parameterType="int" resultType="Card"> 324 SELECT * FROM deck 325 <where> id = #{id} </where> 326 </select> 327 328 <!-- 添加数据,无返回结果 --> 329 <select id="addCard" parameterType="Card"> 330 INSERT INTO deck (id,name,attribute,race,atk,def) 331 VALUES(#{id},#{name},#{attribute},#{race},#{atk},#{def}) 332 </select> 333 334 <!-- 查询所有,未传参--> 335 <select id="selectList" resultType="Card"> 336 SELECT * FROM deck 337 </select> 338 339 </mapper>

1 package shanhai.mapper; 2 3 import java.sql.Date; 4 import java.util.List; 5 6 import org.apache.ibatis.annotations.Param; 7 8 import shanhai.pojo.Books; 9 import shanhai.pojo.Card; 10 import shanhai.pojo.magic_trapCard; 11 12 public interface DeckDao { 13 // public List<Card> deckId2(); // 13 选择卡组 选择从db中查询deck2表中的卡组 14 public List<Card> deckId2(); // 17 卡组联动 改为黑魔术师卡组 15 16 // public List<Card> deckId3(); // 13 选择卡组 从db中查询deck3 17 public List<Card> deckId3(); // 17 卡组联动 改为黑魔导少女卡组 18 19 public List<Card> deckId4(); // 17 卡组联动 改为自然竹笋卡组 20 public List<Card> deckId5(); // 17 卡组联动 改为自然木鳞龙卡组 21 22 public String selectDeckInfo2(); // 19 卡组信息 23 public String selectDeckInfo3(); // 19 卡组信息 24 public String selectDeckInfo4(); // 19 卡组信息 25 public String selectDeckInfo5(); // 19 卡组信息 26 27 public List<Card> deckId6(); // 21 新增 自然木龙兽卡组 28 public String selectDeckInfo6(); // 21 新增 自然木龙兽卡组信息 29 30 public List<magic_trapCard> magic1(); // 22 查询 场地魔法卡 31 public List<magic_trapCard> trap1(); // 22 查询普通陷阱卡 32 public List<magic_trapCard> magic2(); // 22 查询 普通魔法卡 33 public List<magic_trapCard> trap2(); // 22 查询 反击陷阱卡 34 35 public List<Books> BookList(); // 23 书架列表查询 36 public void addBook(Books books); // 24 添加书籍 37 public Books showFormBook(int id); // 25 模态框显示书籍信息,查询 38 public void updateSubmitBook(Books books); // 25 书籍修改 模态框提交的修改的值 39 40 public void deleteBook(Integer id); // 26 删除书籍 41 public void deletesBook(Integer[] ids); // 27 批量删除书籍 42 43 public void addMagic_card1(magic_trapCard mt); // 31 添加魔陷 添加到magic_card1 44 public void addMagic_card2(magic_trapCard mt); // 添加到magic_card2 45 public void addTrap_card1(magic_trapCard mt); // 添加到trap_card1 46 public void addTrap_card2(magic_trapCard mt); // 添加到trap_card2 47 48 // 32 魔陷 模态框显示魔陷卡信息,据ID查询,并且返回一个魔陷卡的对象 49 public magic_trapCard showFormMagic1(Integer magicTrapId); 50 public magic_trapCard showFormMagic2(Integer magicTrapId); 51 public magic_trapCard showFormTrap1(Integer magicTrapId); 52 public magic_trapCard showFormTrap2(Integer magicTrapId); 53 54 // 33 模态框修改魔陷 提交的修改的值 55 public void updateSubmitMagic1(magic_trapCard mt); 56 public void updateSubmitMagic2(magic_trapCard mt); 57 public void updateSubmitTrap1(magic_trapCard mt); 58 public void updateSubmitTrap2(magic_trapCard mt); 59 60 // 34 单次删除 61 public void deleteMagic1(Integer magicTrapId); 62 public void deleteMagic2(Integer magicTrapId); 63 public void deleteTrap1(Integer magicTrapId); 64 public void deleteTrap2(Integer magicTrapId); 65 66 // 35 据前端隐藏input传递的str,选择不同的数据表,然后再删除 67 public void deletesMagic1(Integer[] ids); 68 public void deletesMagic2(Integer[] ids); 69 public void deletesTrap1(Integer[] ids); 70 public void deletesTrap2(Integer[] ids); 71 72 // 36 为了显示出操作后的页面效果,所以在这里利用str查询db 73 public List<magic_trapCard> selectMagic1(); 74 public List<magic_trapCard> selectMagic2(); 75 public List<magic_trapCard> selectTrap1(); 76 public List<magic_trapCard> selectTrap2(); 77 78 // 38 书籍据时间段查询 79 public List<Books> ReadingDateQuery( 80 @Param("startDateQuery") Date startDateQuery, 81 @Param("endDateQuery") Date endDateQuery); 82 83 // 38 查询当前月份的数据 84 public List<Books> ReadingDateQuery1(); 85 public List<Books> ReadingDateQuery3(); 86 public List<Books> ReadingDateQuery6(); 87 88 }

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <mapper namespace="shanhai.mapper.DeckDao"> <!-- 命名空间,包名可能会变 --> 4 5 <select id="ReadingDateQuery6" resultType="Books"> 6 SELECT * FROM book 7 <where> 8 <![CDATA[ 9 startDate >= DATE_SUB(NOW(),INTERVAL 6 MONTH) ]]> 10 </where> 11 </select> 12 13 <select id="ReadingDateQuery3" resultType="Books"> 14 SELECT * FROM book 15 <where> 16 <![CDATA[ 17 startDate >= DATE_SUB(NOW(),INTERVAL 3 MONTH) ]]> 18 </where> 19 </select> 20 21 <!-- 39 查看当前月份的数据 其实也会查询当前这个月之后的数据,只是我们不添加即可 --> 22 <!-- SELECT * FROM book WHERE startDate >= DATE_SUB(NOW(),INTERVAL 1 MONTH); --> 23 <select id="ReadingDateQuery1" resultType="Books"> 24 SELECT * FROM book 25 <where> 26 <![CDATA[startDate >= DATE_SUB(NOW(),INTERVAL 1 MONTH) ]]> 27 </where> 28 </select> 29 30 <!-- 38 书籍据时间段查询 31 public void ReadingDateQuery( 32 @Param("startDateQuery") Date startDateQuery, 33 @Param("endDateQuery") Date endDateQuery); --> 34 <select id="ReadingDateQuery" resultType="Books"> 35 SELECT * FROM book 36 <where> 37 startDate BETWEEN #{startDateQuery} and #{endDateQuery} 38 </where> 39 </select> 40 41 <select id="selectTrap2" resultType="magic_trapCard"> 42 SELECT * FROM trap_card2 43 </select> 44 45 <select id="selectTrap1" resultType="magic_trapCard"> 46 SELECT * FROM trap_card1 47 </select> 48 49 <select id="selectMagic2" resultType="magic_trapCard"> 50 SELECT * FROM magic_card2 51 </select> 52 53 <!-- 36 为了显示出操作后的页面效果,所以在这里利用str查询db --> 54 <select id="selectMagic1" resultType="magic_trapCard"> 55 SELECT * FROM magic_card1 56 </select> 57 58 <delete id="deletesTrap2" parameterType="java.lang.Integer"> 59 delete from trap_card2 where magicTrapId in 60 <foreach item="ids" collection="array" index="no" open="(" separator="," close=")"> 61 #{ids} 62 </foreach> 63 </delete> 64 65 <delete id="deletesTrap1" parameterType="java.lang.Integer"> 66 delete from trap_card1 where magicTrapId in 67 <foreach item="ids" collection="array" index="no" open="(" separator="," close=")"> 68 #{ids} 69 </foreach> 70 </delete> 71 72 <delete id="deletesMagic2" parameterType="java.lang.Integer"> 73 delete from magic_card2 where magicTrapId in 74 <foreach item="ids" collection="array" index="no" open="(" separator="," close=")"> 75 #{ids} 76 </foreach> 77 </delete> 78 79 <!-- 35 批量删除 --> 80 <delete id="deletesMagic1" parameterType="java.lang.Integer"> 81 delete from magic_card1 where magicTrapId in 82 <foreach item="ids" collection="array" index="no" open="(" separator="," close=")"> 83 #{ids} 84 </foreach> 85 </delete> 86 87 <delete id="deleteTrap2" parameterType="java.lang.Integer"> 88 DELETE FROM trap_card2 89 <where> magicTrapId=#{magicTrapId} </where> 90 </delete> 91 92 <delete id="deleteTrap1" parameterType="java.lang.Integer"> 93 DELETE FROM trap_card1 94 <where> magicTrapId=#{magicTrapId} </where> 95 </delete> 96 97 <delete id="deleteMagic2" parameterType="java.lang.Integer"> 98 DELETE FROM magic_card2 99 <where> magicTrapId=#{magicTrapId} </where> 100 </delete> 101 102 <!-- 34单次删除--> 103 <delete id="deleteMagic1" parameterType="java.lang.Integer"> 104 DELETE FROM magic_card1 105 <where> magicTrapId=#{magicTrapId} </where> 106 </delete> 107 108 <update id="updateSubmitTrap2" parameterType="magic_trapCard"> 109 UPDATE trap_card2 110 <set> cardName=#{cardName},cardType=#{cardType},deckMatch=#{deckMatch}, 111 effect=#{effect} 112 </set> 113 <where> magicTrapId=#{magicTrapId} </where> 114 </update> 115 116 <update id="updateSubmitTrap1" parameterType="magic_trapCard"> 117 UPDATE trap_card1 118 <set> cardName=#{cardName},cardType=#{cardType},deckMatch=#{deckMatch}, 119 effect=#{effect} 120 </set> 121 <where> magicTrapId=#{magicTrapId} </where> 122 </update> 123 124 <update id="updateSubmitMagic2" parameterType="magic_trapCard"> 125 UPDATE magic_card2 126 <set> cardName=#{cardName},cardType=#{cardType},deckMatch=#{deckMatch}, 127 effect=#{effect} 128 </set> 129 <where> magicTrapId=#{magicTrapId} </where> 130 </update> 131 132 <!-- 33 模态框修改魔陷 提交的修改的值 --> 133 <update id="updateSubmitMagic1" parameterType="magic_trapCard"> 134 UPDATE magic_card1 135 <set> cardName=#{cardName},cardType=#{cardType},deckMatch=#{deckMatch}, 136 effect=#{effect} 137 </set> 138 <where> magicTrapId=#{magicTrapId} </where> 139 </update> 140 141 142 <select id="showFormTrap2" parameterType="java.lang.Integer" resultType="magic_trapCard"> 143 SELECT * FROM trap_card2 144 <where> magicTrapId = #{magicTrapId}</where> 145 </select> 146 147 <select id="showFormTrap1" parameterType="java.lang.Integer" resultType="magic_trapCard"> 148 SELECT * FROM trap_card1 149 <where> magicTrapId = #{magicTrapId}</where> 150 </select> 151 152 <select id="showFormMagic2" parameterType="java.lang.Integer" resultType="magic_trapCard"> 153 SELECT * FROM magic_card2 154 <where> magicTrapId = #{magicTrapId}</where> 155 </select> 156 157 <!-- 32 魔陷 模态框显示魔陷卡信息,查询魔法卡1的列表中的ID --> 158 <select id="showFormMagic1" parameterType="java.lang.Integer" resultType="magic_trapCard"> 159 SELECT * FROM magic_card1 160 <where> magicTrapId = #{magicTrapId}</where> 161 </select> 162 163 <insert id="addTrap_card2" parameterType="magic_trapCard"> 164 INSERT INTO trap_card2 (magicTrapId,cardName,cardType,deckMatch,effect) 165 VALUES(#{magicTrapId},#{cardName},#{cardType},#{deckMatch},#{effect}) 166 </insert> 167 168 <insert id="addTrap_card1" parameterType="magic_trapCard"> 169 INSERT INTO trap_card1 (magicTrapId,cardName,cardType,deckMatch,effect) 170 VALUES(#{magicTrapId},#{cardName},#{cardType},#{deckMatch},#{effect}) 171 </insert> 172 173 <insert id="addMagic_card2" parameterType="magic_trapCard"> 174 INSERT INTO magic_card2 (magicTrapId,cardName,cardType,deckMatch,effect) 175 VALUES(#{magicTrapId},#{cardName},#{cardType},#{deckMatch},#{effect}) 176 </insert> 177 178 <!-- 31 添加魔陷 --> 179 <insert id="addMagic_card1" parameterType="magic_trapCard"> 180 INSERT INTO magic_card1 (magicTrapId,cardName,cardType,deckMatch,effect) 181 VALUES(#{magicTrapId},#{cardName},#{cardType},#{deckMatch},#{effect}) 182 </insert> 183 184 <!-- 27 批量删除书籍 public void deletesBook(Integer[] ids); --> 185 <delete id="deletesBook" parameterType="java.lang.Integer"> 186 delete from book where id in 187 <foreach item="ids" collection="array" index="no" open="(" separator="," close=")"> 188 #{ids} 189 </foreach> 190 </delete> 191 192 <!-- 26 删除书籍 --> 193 <delete id="deleteBook" parameterType="int"> 194 DELETE FROM book 195 <where> id = #{id} </where> 196 </delete> 197 198 <!-- 25 修改书籍--> 199 <update id="updateSubmitBook" parameterType="Books"> 200 UPDATE book 201 <set> bookTitle=#{bookTitle},progress=#{progress},unreadChapters=#{unreadChapters}, 202 subject=#{subject},note=#{note},demo=#{demo},bookUse=#{bookUse},format=#{format}, 203 startDate=#{startDate},endDate=#{endDate}</set> 204 <where> id=#{id} </where> 205 </update> 206 207 <!-- 25 模态框显示书籍信息,查询 --> 208 <select id="showFormBook" parameterType="int" resultType="Books"> 209 SELECT * FROM book 210 <where> id = #{id}</where> 211 </select> 212 213 <!-- 24 添加书籍 public void addBook(Books books); --> 214 <!-- 添加数据,无返回结果 --> 215 <select id="addBook" parameterType="Books"> 216 INSERT INTO book (bookTitle,progress,unreadChapters,subject,note,demo,bookUse,format, 217 startDate,endDate) 218 VALUES(#{bookTitle},#{progress},#{unreadChapters},#{subject},#{note},#{demo}, 219 #{bookUse},#{format},#{startDate},#{endDate}) 220 </select> 221 222 <!-- 23 书架列表查询 --> 223 <select id="BookList" resultType="Books"> 224 SELECT * FROM book 225 </select> 226 227 <!-- 22 查询 反击陷阱卡 --> 228 <select id="trap2" resultType="magic_trapCard"> 229 SELECT * FROM trap_card2 230 </select> 231 232 <!-- 22 查询 普通魔法卡 --> 233 <select id="magic2" resultType="magic_trapCard"> 234 SELECT * FROM magic_card2 235 </select> 236 237 <!-- 22 查询 普通陷阱卡 --> 238 <select id="trap1" resultType="magic_trapCard"> 239 SELECT * FROM trap_card1 240 </select> 241 242 <!-- 22 查询 场地魔法卡 --> 243 <select id="magic1" resultType="magic_trapCard"> 244 SELECT * FROM magic_card1 245 </select> 246 247 <!-- 21 新增 自然木龙兽卡组信息 --> 248 <select id="selectDeckInfo6" resultType="String"> 249 SELECT Info FROM deckinfo WHERE deckId ='6' 250 </select> 251 252 <!-- 21 新增 自然木龙兽卡组 --> 253 <select id="deckId6" resultType="Card"> 254 SELECT * FROM deck6 255 </select> 256 257 <select id="selectDeckInfo5" resultType="String"> 258 SELECT Info FROM deckinfo WHERE deckId ='5' 259 </select> 260 261 <select id="selectDeckInfo4" resultType="String"> 262 SELECT Info FROM deckinfo WHERE deckId ='4' 263 </select> 264 265 <select id="selectDeckInfo3" resultType="String"> 266 SELECT Info FROM deckinfo WHERE deckId ='3' 267 </select> 268 269 <!-- 19 卡组信息 --> 270 <!-- SELECT Info FROM deckinfo WHERE deckId='2'; --> 271 <select id="selectDeckInfo2" resultType="String"> 272 SELECT Info FROM deckinfo WHERE deckId ='2' 273 </select> 274 275 <!-- 17卡组联动 改为自然木龙兽卡组 --> 276 <select id="deckId5" resultType="Card"> 277 SELECT * FROM deck5 278 </select> 279 280 <!-- 17 卡组联动 改为自然竹笋卡组 --> 281 <select id="deckId4" resultType="Card"> 282 SELECT * FROM deck4 283 </select> 284 285 <!-- 17 卡组联动 改为黑魔导少女卡组 --> 286 <select id="deckId3" resultType="Card"> 287 SELECT * FROM deck3 288 </select> 289 290 <!-- 17卡组联动 由13选择卡组更改而成 --> 291 <select id="deckId2" resultType="Card"> 292 SELECT * FROM deck2 293 </select> 294 295 296 <!-- 13 选择卡组 选择从db中查询deck3表中的卡组 --> 297 <!-- <select id="deckId3" resultType="Card"> 298 SELECT * FROM deck3 299 </select> --> 300 301 <!-- 13 选择卡组 选择从db中查询deck2表中的卡组 --> 302 <!-- <select id="deckId2" resultType="Card"> 303 SELECT * FROM deck2 304 </select> --> 305 306 307 </mapper>

1 package shanhai.mapper; 2 3 import java.util.List; 4 import shanhai.pojo.Picture; 5 6 public interface PictureDao { 7 public void addPicName(String picName); // 在数据表中保存图片的名称 8 public List<Picture> queryAll(); // 查询图片列表 9 10 }

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <mapper namespace="shanhai.mapper.PictureDao"> <!-- 命名空间,包名可能会变 --> 4 5 <!-- 在数据表中保存图片的名称 public void addPicName(String picName); --> 6 <insert id="addPicName" parameterType="String"> 7 INSERT INTO picture (picName) VALUES(#{picName}) 8 </insert> 9 10 <!-- 查询图片列表 public List<String> queryAll(); --> 11 <!-- java.lang.String --> 12 <select id="queryAll" resultType="Picture"> 13 SELECT * FROM picture 14 </select> 15 16 </mapper>
WEB-INF下jsp包中的jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <%@ taglib prefix="itheima" uri="http://itcast.cn/common/"%> 5 <% 6 String path = request.getContextPath(); 7 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 8 + path + "/"; 9 %> 10 <!DOCTYPE html> 11 <html xmlns="http://www.w3.org/1999/xhtml"> 12 <head> 13 <meta charset="utf-8"> 14 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 15 <meta name="viewport" content="width=device-width, initial-scale=1"> 16 <meta name="description" content=""> 17 <meta name="author" content=""> 18 <title>书架</title> 19 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 23 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 24 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 25 </head> 26 <body> 27 28 <jsp:include page="head.jsp" flush="true"/> 29 <div class="col-sm-10"> 30 <div id="mainContent"> 31 <div class="panel panel-info"> 32 <div class="panel-heading"> 33 <h3 class="panel-title">自学时,阅读的编程相关的书籍,记录进度</h3> 34 </div> 35 <div class="panel-body"> 36 37 <!-- 38 查询当前月份的数据--> 38 <%-- <form action="${pageContext.request.contextPath }/deck/BookReadingDateQuery136"> 39 <select name="Query136"> 40 <option>--请选择时间段--</option> 41 <option value="1">当前月份内</option> 42 <option value="3">3个月内</option> 43 <option value="6">6个月内</option> 44 </select> 45 <input type="submit" class="btn btn-default" value="查询" name="submit" > 46 </form> --%> 47 48 <!-- 39 历史时间查询,分别为一,三,六个月内 --> 49 <nav class="navbar navbar-default" role="navigation"> 50 <div class="container-fluid"> 51 <div class="navbar-header"> 52 <a class="navbar-brand" href="#">时间</a> 53 <ul class="nav navbar-nav"> 54 <li class="dropdown"> 55 <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 56 历史 57 <b class="caret"></b> 58 </a> 59 <ul class="dropdown-menu"> 60 <li><a href="${pageContext.request.contextPath }/readingDateQuery.html?Query136=1">本月</a></li> 61 <li><a href="${pageContext.request.contextPath }/readingDateQuery.html?Query136=3">三个月内</a></li> 62 <li><a href="${pageContext.request.contextPath }/readingDateQuery.html?Query136=6">六个月内</a></li> 63 </ul> 64 </li> 65 </ul> 66 </div> 67 </div> 68 </nav> 69 70 <!-- 38 据时间段查询 --> 71 <form action="${pageContext.request.contextPath }/deck/BookReadingDateQuery"> 72 <label>起始时间: </label> 73 <input type="date" class="date_info" name="startDateQuery">- 74 <input type="date" class="date_info" name="endDateQuery"> 75 <input type="submit" class="btn btn-default" value="查询" name="submit" > 76 </form> 77 78 79 <!-- 29 批量删除 使用的form --> 80 <form id="form1" action="${pageContext.request.contextPath }/deck/deletesBook.action" method="post"> 81 82 <!-- </form> --> 83 84 <table class="table table-hover table-striped table-bordered"> 85 <thead> 86 <tr> 87 <th><input type="checkbox" onclick="checkBox()" id="ids" name="ids" value="" form="form1"></th> 88 <th>id</th> 89 <th>bookTitle</th> 90 <th>progress</th> 91 <th>unreadChapters</th> 92 <th>subject</th> 93 <th>note</th> 94 <th>demo</th> 95 <th>bookUse</th> 96 <th>format</th> 97 <th>startDate</th> 98 <th>endDate</th> 99 100 <th> <!-- 24 书籍添加--> 101 <button type="button" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#bookAdd">添加</button> 102 <input type="submit" value="删除" form="form1" class="btn btn-danger btn-xs"> 103 </th> 104 </tr> 105 </thead> 106 107 <tbody> 108 <c:forEach items="${BookList}" var="list"> 109 <tr> 110 <!-- name由ids改成checkOne --> 111 <td><input type="checkbox" name="ids" value="${list.id}"></td> 112 <td>${list.id}</td> 113 <td>${list.bookTitle}</td> 114 <td>${list.progress}</td> 115 <td>${list.unreadChapters}</td> 116 <td>${list.subject}</td> 117 <td>${list.note}</td> 118 <td>${list.demo}</td> 119 <td>${list.bookUse}</td> 120 <td>${list.format}</td> 121 <td>${list.startDate}</td> 122 <td>${list.endDate}</td> 123 124 <td> 125 <button type="button" class="btn btn-primary btn-xs" data-toggle="modal" 126 data-target="#bookUpdateModal" onclick="showFormBook(${list.id})">修改</button> 127 <button type="button" class="btn btn-danger btn-xs" onclick="ajaxDelBook(${list.id})">删除</button> 128 </td> 129 130 </tr> 131 </c:forEach> 132 </tbody> 133 </table> 134 135 </form> 136 137 138 </div> 139 </div> 140 141 <div class="modal fade" id="bookAdd" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 142 <div class="modal-dialog"> 143 <div class="modal-content"> 144 <div class="modal-header"> 145 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 146 × 147 </button> 148 <h4 class="modal-title" id="myModalLabel"> 149 添加书籍 150 </h4> 151 </div> 152 153 <div class="modal-body"> 154 <!-- 【添加】 模态框中的表单form --> 155 <form class="form-horizontal" id="modaladdBook"> 156 <div> 157 <label>bookTitle:</label> 158 <input type="text" id="bookTitle" name="bookTitle" autocomplete="off"> 159 </div> 160 <div> 161 <label>progress: </label> 162 <select id="progress" name="progress" required> 163 <option>--请选择--</option> 164 <option value="已读">已读</option> 165 <option value="正在读">正在读</option> 166 <option value="放弃">放弃</option> 167 </select> 168 </div> 169 <div> 170 <label>unread:</label> 171 <input type="text" id="unreadChapters" name="unreadChapters" autocomplete="off"> 172 </div> 173 <div> 174 <label>subject:</label> 175 <input type="text" id="subject" name="subject" autocomplete="off"> 176 </div> 177 <div> 178 <label>note: </label> 179 <select id="note" name="note" required> 180 <option>--请选择--</option> 181 <option value="无">无</option> 182 <option value="Word">Word</option> 183 <option value="Excel">Excel</option> 184 </select> 185 </div> 186 <div> 187 <label>demo: </label> 188 <select id="demo" name="demo" required> 189 <option>--请选择--</option> 190 <option value="未练习">未练习</option> 191 <option value="练习">练习</option> 192 </select> 193 </div> 194 <div> 195 <label>bookUse: </label> 196 <select id="bookUse" name="bookUse" required> 197 <option>--请选择--</option> 198 <option value="未使用">未使用</option> 199 <option value="应用">应用</option> 200 </select> 201 </div> 202 <div> 203 <label>format: </label> 204 <select id="format" name="format" required> 205 <option>--请选择--</option> 206 <option value="PDF">PDF</option> 207 <option value="实体书">实体书</option> 208 </select> 209 </div> 210 <div> 211 <label>startDate</label> 212 <input type="date" id="startDate2" name="startDate"> 213 </div> 214 <div> 215 <label>endDate:</label> 216 <input type="date" id="endDate2" name="endDate"> 217 </div> 218 <!-- <div> 219 <label>startDate:</label> 220 <input type="text" id="startDate" name="startDate" autocomplete="off"> 221 </div> 222 <div> 223 <label>endDate:</label> 224 <input type="text" id="endDate" name="endDate" autocomplete="off"> 225 </div> --> 226 </form> 227 </div> 228 <div class="modal-footer"> 229 <button type="button" class="btn btn-primary" onclick="modalAddBook()">添加</button> 230 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 231 </div> 232 </div> 233 </div> 234 </div> <!-- 【添加】 模态框的结束div,包含form --> 235 236 237 <div class="modal fade" id="bookUpdateModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel2" aria-hidden="true"> 238 <div class="modal-dialog"> 239 <div class="modal-content"> 240 <div class="modal-header"> 241 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 242 × 243 </button> 244 <h4 class="modal-title" id="myModalLabel2"> 245 修改书籍信息 246 </h4> 247 </div> 248 <div class="modal-body"> 249 <!-- 【修改】 模态框中的表单form --> 250 <form class="form-horizontal" id="modalUpdate_formBook"> 251 <div> 252 <label>id:</label> 253 <input type="text" id="id2" name="id" autocomplete="off"> 254 </div> 255 <div> 256 <label>bookTitle:</label> 257 <input type="text" id="bookTitle2" name="bookTitle" autocomplete="off"> 258 </div> 259 <div> 260 <label>progress:</label> 261 <input type="text" id="progress2" name="progress" autocomplete="off"> 262 </div> 263 <div> 264 <label>unread:</label> 265 <input type="text" id="unreadChapters2" name="unreadChapters" autocomplete="off"> 266 </div> 267 <div> 268 <label>subject:</label> 269 <input type="text" id="subject2" name="subject" autocomplete="off"> 270 </div> 271 272 <div> 273 <label>note:</label> 274 <input type="text" id="note2" name="note" autocomplete="off"> 275 </div> 276 <div> 277 <label>demo:</label> 278 <input type="text" id="demo2" name="demo" autocomplete="off"> 279 </div> 280 <div> 281 <label>bookUse:</label> 282 <input type="text" id="bookUse2" name="bookUse" autocomplete="off"> 283 </div> 284 <div> 285 <label>format:</label> 286 <input type="text" id="format2" name="format" autocomplete="off"> 287 </div> 288 <div> 289 <label>startDate</label> 290 <input type="date" id="startDate2" name="startDate"> 291 </div> 292 <div> 293 <label>endDate:</label> 294 <input type="date" id="endDate2" name="endDate"> 295 </div> 296 <!-- <div> 297 <label>startDate:</label> 298 <input type="text" id="startDate2" name="startDate" autocomplete="off"> 299 </div> 300 <div> 301 <label>endDate:</label> 302 <input type="text" id="endDate2" name="endDate" autocomplete="off"> 303 </div> --> 304 305 </form> 306 </div> 307 <div class="modal-footer"> 308 <button type="button" class="btn btn-primary" onclick="modalUpdateSubmitBook()">修改</button> 309 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 310 </div> 311 </div> 312 </div> 313 </div> <!--【修改】 的结束div --> 314 315 316 </div> 317 </div> 318 319 <script type="text/javascript"> 320 321 function modalAddBook() { // 24添加 获得添加的模态框的表单中填写的数据 322 $.ajax({ 323 type:"POST", 324 url:"<%=basePath%>deck/addBook.action", 325 data:$("#modaladdBook").serialize(), // 添加的模态框中的form的id 326 success:function() { 327 alert("添加书籍成功"); 328 $("#bookAdd").modal("hide"); // 通过模态框的id,隐藏模态框 329 $(".modal-backdrop").remove(); // 去除,模态框添加后,灰屏 330 history.go(0); // 去除灰屏后,无法打开模态框,so刷新一下 331 } 332 }); 333 } 334 335 function showFormBook(id) { // 【修改】 打开模态框时显示"准备修改的内容" 336 $.ajax({ 337 type:"POST", 338 url:"<%=basePath%>deck/showFormBook.action", 339 data:{"id":id}, 340 success:function(data) { // 返回通过bookTitle查询 341 // alert(data); 342 343 $("#id2").val(data.id); // 将返回的数据,设置给form 344 $("#bookTitle2").val(data.bookTitle); 345 $("#progress2").val(data.progress); 346 $("#unreadChapters2").val(data.unreadChapters); 347 $("#subject2").val(data.subject); 348 $("#note2").val(data.note); 349 $("#demo2").val(data.demo); 350 $("#bookUse2").val(data.bookUse); 351 $("#format2").val(data.format); 352 $("#startDate2").val(data.startDate); 353 $("#endDate2").val(data.endDate); 354 }, 355 dataType:"json" 356 }); 357 } 358 359 function modalUpdateSubmitBook() { // 【修改】 将从修改的模太框中的表单获得的数据提交 360 $.ajax({ 361 type:"POST", 362 url:"<%=basePath%>deck/modalUpdateSubmitBook.action", 363 data:$("#modalUpdate_formBook").serialize(), // 获得修改的模态框中的表单 364 success:function() { 365 alert("修改书籍成功"); 366 $("#bookUpdateModal").modal("hide"); 367 $(".modal-backdrop").remove(); // 去除,模态框修改数据后,灰屏 368 history.go(0); // 去除灰屏后,无法打开模态框,so刷新一下 369 } 370 }); 371 } 372 373 function ajaxDelBook(id) { // 【删除】使用AJAX提交id到服务器 374 $.ajax({ 375 type:"POST", 376 url:"<%=basePath%>deck/deleteBook.action", 377 data:{"id":id}, // 准备接收的是id 378 success:function() { // 返回通过id查询到的卡片的数据 379 alert("删除成功"); 380 history.go(0); 381 } 382 }); 383 } 384 385 /* function todelect(){ 386 var Checkbox = false; //默认复选框为空 387 $("input[name='id']").each(function(){ //获取复选框节点id 388 if (this.checked==true) { 389 Checkbox=true; //已勾选 390 } 391 }); 392 393 if (Checkbox){ //boolean值为true 394 var t=confirm("您确认要删除选中的内容吗?"); //弹出对话进行警告 395 if (t==false) return false; //不勾选不处理 396 obj = document.getElementsByName("id"); //将复选框定义成一个jquery对象 397 heck_val = []; //定义一个数组 398 for(k in obj){ //k相当于i,往这个jquery对象添加勾选的id; 399 if(obj[k].checked) //选中的都放进 数组里 400 check_val.push(obj[k].value); 401 } */ 402 403 404 <%-- function deletsBook(ids) { // 29 批量删除 修改版 405 alert("准备批量删除") 406 alert(ids); 407 408 $.ajax({ 409 type:"POST", 410 url:"<%=basePath%>deck/deletesBook.action", 411 data:{"ids":ids}, 412 success:function() { 413 alert("批量删除成功"); 414 history.go(0); 415 } 416 }); 417 } --%> 418 419 function checkBox(){ // 29 全选 当全选的复选框勾选时,设置主体中的复选框的值为勾选,为false。 420 var checkAllEle = document.getElementById("ids"); 421 if(checkAllEle.checked==true){ 422 var checkOnes = document.getElementsByName("ids"); 423 for(var i=0;i<checkOnes.length;i++){ 424 checkOnes[i].checked=true; 425 } 426 }else{ // 否则,即全不选,主体中的复选框的值什么都不传,并不是false。 427 var checkOnes = document.getElementsByName("ids"); 428 for(var i=0;i<checkOnes.length;i++){ 429 checkOnes[i].checked=false; // 由于手动设置为false,最终才为false 430 } 431 } 432 } 433 434 $(document).ready(function () { 435 var time = new Date(); 436 var day = ("0" + time.getDate()).slice(-2); 437 var month = ("0" + (time.getMonth() + 1)).slice(-2); 438 var today = time.getFullYear() + "-" + (month) + "-" + (day); 439 $('.date_info').val(today); 440 }) 441 442 </script> 443 444 445 </body> 446 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <%@ taglib prefix="itheima" uri="http://itcast.cn/common/"%> 5 <% 6 String path = request.getContextPath(); 7 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 8 + path + "/"; 9 %> 10 <!DOCTYPE html> 11 <html xmlns="http://www.w3.org/1999/xhtml"> 12 <head> 13 <meta charset="utf-8"> 14 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 15 <meta name="viewport" content="width=device-width, initial-scale=1"> 16 <meta name="description" content=""> 17 <meta name="author" content=""> 18 <title>管理系统的主页面</title> 19 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 23 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 24 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 25 </head> 26 <body> 27 28 <%-- 您使用的账户的用户名为: ${loginUserName } </br> <!-- 显示用户信息 --> --%> 29 <div class="text-right"> 30 <c:if test="${empty loginUserName }"> <!-- 【用户名显示】 --> 31 <a href="<%=basePath%>/user/login.action">登录</a> <!-- 【用户登录】 --> 32 <a href="<%=basePath%>/user/toRegister.action">注册</a> <!-- 【用户注册】 --> 33 </c:if> 34 <c:if test="${!empty loginUserName }"> 35 欢迎您,${loginUserName } 36 <a href="<%=basePath%>/user/myProfile.action">我的资料</a> 37 <a href="<%=basePath%>/user/logOut.action">退出</a> 38 </c:if> 39 </div> 40 41 <jsp:include page="head.jsp" flush="true"/> 42 43 <div class="col-sm-10"> 44 <div id="mainContent"> 45 <div class="panel panel-success"> 46 <div class="panel-heading"> 47 <h3 class="panel-title">卡片页面</h3> 48 </div> 49 <div class="panel-body"> 50 51 52 <form class="form-inline" action="${pageContext.request.contextPath }/card/list" method="post"> 53 <div class="form-group"> 54 <label for="Name">名称</label> 55 <input type="text" class="form-control" id="Name" 56 value="${Name }" name="Name" > 57 </div> 58 59 <div class="form-group"> 60 <label for="raceFrom">种族</label> 61 <select class="form-control" id="raceFrom" placeholder="种族" name="race" > 62 <option value="">${Race }</option> 63 <option value="">默认为空</option> 64 <option value ="兽族">兽族</option> 65 <option value ="岩石族">岩石族</option> 66 <option value="龙族">龙族</option> 67 <option value="植物族">植物族</option> 68 <option value="昆虫族">昆虫族</option> 69 <option value="魔法师族">魔法师族</option> 70 </select> 71 </div> 72 73 <div class="form-group"> 74 <label>攻击力范围</label> 75 <input id="atk1" name="atk1" /> - 76 <input id="atk2" name="atk2" /> 77 </div> 78 79 <button type="submit" class="btn btn-default">查询</button> 80 </form> 81 </div> 82 </div> 83 84 <table class="table table-hover table-striped table-bordered"> 85 <thead> 86 <tr> 87 <th>ID</th> 88 <th>名称</th> 89 <th>属性</th> 90 <th>种族</th> 91 <th>攻击力</th> 92 <th>守备力</th> 93 <th> <!-- 【添加】--> 94 <button class="btn btn-primary btn-xs" data-toggle="modal" data-target="#AddModal">添加</button> 95 <button class="btn btn-primary btn-xs" >全选</button> 96 </th> 97 98 </tr> 99 </thead> 100 101 <tbody> <!-- 使用分页查询后,由list改为了page.rows --> 102 <c:forEach items="${page.rows}" var="list"> 103 <tr> 104 <td>${list.id}</td> 105 <td>${list.name}</td> 106 <td>${list.attribute}</td> 107 <td>${list.race}</td> 108 <td>${list.atk}</td> 109 <td>${list.def}</td> 110 <td> 111 <button class="btn btn-primary btn-xs" data-toggle="modal" 112 data-target="#cardUpdateModal" onclick="showFormCard(${list.id})">修改</button> 113 <button class="btn btn-danger btn-xs" onclick="ajaxDelCard(${list.id})">删除</button> 114 </td> 115 </tr> 116 </c:forEach> 117 </tbody> 118 </table> 119 120 总记录数: ${Total_number } <br> 121 总页数: ${totalPage_number } <br> 122 当前页数: ${currentPage_number } <br> 123 每页显示条数: ${Size_number } <br> 124 125 <!-- 分页按钮跳转 --> 126 <div class="col-md-12 text-center"> 127 <itheima:page url="${pageContext.request.contextPath }/card/list.action" /> 128 </div> 129 130 131 <!--【添加】 通过id可以打开 --> 132 <div class="modal fade" id="AddModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 133 <div class="modal-dialog"> 134 <div class="modal-content"> 135 <div class="modal-header"> 136 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 137 × 138 </button> 139 <h4 class="modal-title" id="myModalLabel"> 140 添加数据 141 </h4> 142 </div> 143 <div class="modal-body"> 144 <!-- 【添加】 模态框中的表单form --> 145 <form class="form-horizontal" id="modaladdform"> 146 <div> 147 <label>id:</label> 148 <input type="text" id="id" name="id" autocomplete="off"> 149 </div> 150 <div> 151 <label>name:</label> 152 <input type="text" id="name" name="name" autocomplete="off"> 153 </div> 154 <div> 155 <label>attribute:</label> 156 <input type="text" id="attribute" name="attribute" autocomplete="off"> 157 </div> 158 <div> 159 <label>race:</label> 160 <input type="text" id="race" name="race" autocomplete="off"> 161 </div> 162 <div> 163 <label>atk:</label> 164 <input type="text" id="atk" name="atk" autocomplete="off"> 165 </div> 166 <div> 167 <label>card_def:</label> 168 <input type="text" id="def" name="def" autocomplete="off"> 169 </div> 170 </form> 171 </div> 172 <div class="modal-footer"> 173 <button type="button" class="btn btn-primary" onclick="modalAddCard()">添加</button> 174 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 175 </div> 176 </div> 177 </div> 178 </div> <!-- 【添加】 模态框的结束div,包含form --> 179 180 <!-- 【修改】 在模态框中修改表单、提交表单。需要表单有id才可能通过id进行操作 --> 181 <div class="modal fade" id="cardUpdateModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel2" aria-hidden="true"> 182 <div class="modal-dialog"> 183 <div class="modal-content"> 184 <div class="modal-header"> 185 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 186 × 187 </button> 188 <h4 class="modal-title" id="myModalLabel2"> 189 模态框标题:修改 190 </h4> 191 </div> 192 <div class="modal-body"> 193 <!-- 【修改】 模态框中的表单form --> 194 <form class="form-horizontal" id="modalUpdate_form"> 195 <div> 196 <label>id:</label> 197 <input type="text" id="id2" name="id" autocomplete="off"> 198 </div> 199 <div> 200 <label>name:</label> 201 <input type="text" id="name2" name="name" autocomplete="off"> 202 </div> 203 <div> 204 <label>attribute:</label> 205 <input type="text" id="attribute2" name="attribute" autocomplete="off"> 206 </div> 207 <div> 208 <label>race:</label> 209 <input type="text" id="race2" name="race" autocomplete="off"> 210 </div> 211 <div> 212 <label>atk:</label> 213 <input type="text" id="modalatk2" name="atk" autocomplete="off"> 214 </div> 215 <div> 216 <label>def:</label> 217 <input type="text" id="def2" name="def" autocomplete="off"> 218 </div> 219 </form> 220 </div> 221 <div class="modal-footer"> 222 <button type="button" class="btn btn-primary" onclick="modalUpdateSubmit()">修改</button> 223 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 224 </div> 225 </div> 226 </div> 227 </div> <!--【修改】 的结束div --> 228 229 </div> 230 </div> 231 232 <script src="<%=basePath%>js/jquery.min.js"></script> 233 <script src="<%=basePath%>js/bootstrap.min.js"></script> 234 <script src="<%=basePath%>js/metisMenu.min.js"></script> 235 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 236 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 237 <script src="<%=basePath%>js/sb-admin-2.js"></script> 238 239 <script type="text/javascript"> 240 241 function modalAddCard() { // 【添加】 获得添加的模态框的表单中填写的数据 242 $.ajax({ 243 type:"POST", 244 url:"<%=basePath%>card/add.action", 245 data:$("#modaladdform").serialize(), // 添加的模态框中的form的id 246 success:function() { 247 alert("添加数据成功"); 248 $("#AddModal").modal("hide"); // 通过模态框的id,隐藏模态框 249 $(".modal-backdrop").remove(); // 去除,模态框添加后,灰屏 250 history.go(0); // 去除灰屏后,无法打开模态框,so刷新一下 251 } 252 }); 253 } 254 255 function showFormCard(id) { // 【修改】 打开模态框时显示"准备修改的内容" 256 $.ajax({ 257 type:"POST", 258 url:"<%=basePath%>card/showFormCard.action", 259 data:{"id":id}, 260 success:function(data) { // 返回通过id查询到的卡片数据 261 $("#id2").val(data.id); // 将返回的数据,设置给form 262 $("#name2").val(data.name); 263 $("#attribute2").val(data.attribute); 264 $("#race2").val(data.race); 265 $("#modalatk2").val(data.atk); 266 $("#def2").val(data.def); 267 }, 268 dataType:"json" 269 }); 270 } 271 272 function modalUpdateSubmit() { // 【修改】 将从修改的模太框中的表单获得的数据提交 273 $.ajax({ 274 type:"POST", 275 url:"<%=basePath%>card/modalUpdateSubmit.action", 276 data:$("#modalUpdate_form").serialize(), // 获得修改的模态框中的表单 277 success:function() { 278 alert("修改数据并提交成功"); 279 $("#cardUpdateModal").modal("hide"); 280 $(".modal-backdrop").remove(); // 去除,模态框修改数据后,灰屏 281 history.go(0); // 去除灰屏后,无法打开模态框,so刷新一下 282 } 283 }); 284 } 285 286 function ajaxDelCard(id) { // 【删除】使用AJAX提交id到服务器 287 $.ajax({ 288 type:"POST", 289 url:"<%=basePath%>card/delete.action", 290 data:{"id":id}, // 准备接收的是id 291 success:function() { // 返回通过id查询到的卡片的数据 292 alert("删除成功"); 293 history.go(0); 294 } 295 }); 296 } 297 298 </script> 299 300 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <%@ taglib prefix="itheima" uri="http://itcast.cn/common/"%> 5 <% 6 String path = request.getContextPath(); 7 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 8 + path + "/"; 9 %> 10 <!DOCTYPE html> 11 <html xmlns="http://www.w3.org/1999/xhtml"> 12 <head> 13 <meta charset="utf-8"> 14 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 15 <meta name="viewport" content="width=device-width, initial-scale=1"> 16 <meta name="description" content=""> 17 <meta name="author" content=""> 18 <title>查看卡组</title> 19 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 23 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 24 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 25 26 <script src="<%=basePath%>js/jquery.min.js"></script> 27 <script src="<%=basePath%>js/bootstrap.min.js"></script> 28 <script src="<%=basePath%>js/metisMenu.min.js"></script> 29 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 30 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 31 <script src="<%=basePath%>js/sb-admin-2.js"></script> 32 </head> 33 <body> 34 35 <jsp:include page="head.jsp" flush="true"/> 36 37 <div class="col-sm-10"> 38 <div id="mainContent"> 39 40 <div class="panel panel-info"> 41 <div class="panel-heading"> 42 <h3 class="panel-title">卡组页面</h3> 43 </div> 44 <div class="panel-body"> 45 46 47 <!-- 13 选择卡组 --> 48 <form class="form-inline" action="${pageContext.request.contextPath }/deck/list" method="post"> 49 50 <!-- <select name="deckId"> 原13选择卡组时,使用的单个列表,后改为列表联动,即17卡组联动 51 <option value="1">自然竹笋</option> 52 <option value="2">黑魔导少女</option> 53 </select> --> 54 55 <div class="form-group"> 56 <label for="province">种类</label> 57 <select id="deckOne" name="deckOne" required> 58 <option>--请先选择--</option> 59 <option value="0">黑魔导</option> 60 <option value="1">自然</option> 61 </select> 62 <select id="deckTwo" name="deckTwo"> 63 <option>--请再选择--</option> 64 65 </select> 66 </div> 67 <button type="submit" class="btn btn-default">查询</button> 68 </form> 69 70 71 <!-- 19 卡组信息 --> 72 <div> 73 <label>卡组信息</label> 74 <textarea name="deckInfo" maxlength="20" 75 placeholder="请在列表中,选择不同种类和流派的卡组">${deckInfo}</textarea> 76 </div> 77 78 <table class="table table-hover table-striped table-bordered"> 79 <thead> 80 <tr> 81 <th>ID</th> 82 <th>名称</th> 83 <th>属性</th> 84 <th>种族</th> 85 <th>攻击力</th> 86 <th>守备力</th> 87 </tr> 88 </thead> 89 90 <tbody> <!-- 使用分页查询后,由list改为了page.rows --> 91 <c:forEach items="${deckIdList}" var="list"> 92 <tr> 93 <td>${list.id}</td> 94 <td>${list.name}</td> 95 <td>${list.attribute}</td> 96 <td>${list.race}</td> 97 <td>${list.atk}</td> 98 <td>${list.def}</td> 99 </tr> 100 </c:forEach> 101 </tbody> 102 </table> 103 104 </div> 105 </div> 106 107 </div> 108 </div> 109 110 <script type="text/javascript"> 111 112 $(function(){ // 17 卡组联动 113 var cities = new Array(2); 114 cities[0] = new Array("黑魔术师","黑魔导少女"); 115 cities[1] = new Array("自然竹笋","自然木鳞龙","自然木龙兽"); 116 117 $("#deckOne").change(function(){ 118 $("#deckTwo").empty(); 119 120 var val = this.value; 121 $.each(cities,function(i,n){ 122 if(val==i){ 123 $.each(cities[i], function(j,m) { 124 var textNode = document.createTextNode(m); 125 var opEle = document.createElement("option"); 126 $(opEle).append(textNode); 127 $(opEle).appendTo($("#deckTwo")); 128 }); 129 } 130 }); 131 132 }); 133 }); 134 135 </script> 136 137 </body> 138 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 <!DOCTYPE html> 10 <html xmlns="http://www.w3.org/1999/xhtml"> 11 <head> 12 <meta charset="utf-8"> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta name="viewport" content="width=device-width, initial-scale=1"> 15 <meta name="description" content=""> 16 <meta name="author" content=""> 17 <title>左侧导航栏</title> 18 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 19 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 23 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 24 <meta name="viewport" content="width=device-width, initial-scale=1"> 25 <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.css"> 26 27 </head> 28 <body> 29 <div class="col-sm-2"> 30 <div class="panel-body"> 31 <h4><i class="fa fa-pencil"></i> 所有菜单</h4> 32 <ul class="nav nav-pills nav-stacked mail-nav" > 33 <li><a href="<%=basePath%>/card/list" style="font-size:16px;">卡片</a></li> 34 <li><a href="<%=basePath%>/deck/list" style="font-size:16px;">卡组</a></li> 35 <li><a href="<%=basePath%>/deck/magic_trapList" style="font-size:16px;">魔陷</a></li> 36 <li><a href="<%=basePath%>/book/list" style="font-size:16px;">书籍</a></li> 37 <li><a href="<%=basePath%>/picture/list" style="font-size:16px;">图片</a></li> 38 <li><a href="<%=basePath%>/test/into" style="font-size:16px;">测试</a></li> 39 </ul> 40 </div> 41 </div> 42 43 <script src="<%=basePath%>js/jquery.min.js"></script> 44 <script src="<%=basePath%>js/bootstrap.min.js"></script> 45 <script src="<%=basePath%>js/metisMenu.min.js"></script> 46 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 47 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 48 <script src="<%=basePath%>js/sb-admin-2.js"></script> 49 </body> 50 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 <!DOCTYPE html> 10 <html> 11 <head> 12 <meta charset="utf-8"> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta name="viewport" content="width=device-width, initial-scale=1"> 15 <meta name="description" content=""> 16 <meta name="author" content=""> 17 <title>用户登录</title> 18 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 19 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 23 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 24 25 <script src="<%=basePath%>js/jquery.min.js"></script> 26 <script src="<%=basePath%>js/bootstrap.min.js"></script> 27 <script src="<%=basePath%>js/metisMenu.min.js"></script> 28 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 29 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 30 <script src="<%=basePath%>js/sb-admin-2.js"></script> 31 </head> 32 <body> 33 34 <!-- 7 用户名正确,密码密码时,重新进入登录页面 UsePasswordError --> 35 <div> 36 <c:if test="${!empty UsePasswordError }"> <!--当提示信息不为空时,才进入提示--> 37 <font color="red" size="5" >${UsePasswordError }</font> 38 </c:if> 39 </div> 40 41 <!-- 【用户登录】使用form表格提交,后续会在form中加入其它功能--> 42 <form action="${pageContext.request.contextPath }/user/userLogin.action" method="post"> 43 <div> 44 <label>用户名:</label> 45 <input id="username" type="text" name="username" autocomplete="off" 46 value="${cookie.remembermeCookie.value}"> 47 </div> 48 <div> 49 <label>密码: </label> 50 <input id="password" type="password" name="password" 51 value="${cookie.remembermeCookiePassword.value}"> 52 </div> 53 54 <div class="checkbox"> 55 <label> 56 <!-- 14 记住用户名 --> 57 <%-- <input type="checkbox" name="rememberme" value="1" 58 ${not empty cookie.remembermeCookie? "checked='checked'" : ""}> 59 记住用户名 --%> 60 61 <!-- 16 记住用户名和密码 --> 62 <input type="checkbox" name="remembermePassword" value="1" 63 ${not empty cookie.remembermeCookiePassword? "checked='checked'" : ""}> 64 记住用户名和密码 65 66 </label> 67 </div> 68 69 <div> 70 <input id="login" class="btn btn-default" type="submit" value="登录" > 71 <input type="reset" class="btn btn-default" value="重置"> 72 </div> 73 </form> 74 75 <!-- 3 登录页面,添加注册链接 --> 76 <div class="btn btn-default"> 77 <a href="<%=basePath%>/user/toRegister.action">注册</a> 78 </div> 79 80 <!-- 9 忘记密码 --> 81 <div class="btn btn-default"> 82 <a href="<%=basePath%>/user/toForGet.action">忘记密码</a> 83 </div> 84 85 </body> 86 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 <!DOCTYPE html> 10 <html> 11 <head> 12 <meta charset="utf-8"> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta name="viewport" content="width=device-width, initial-scale=1"> 15 <meta name="description" content=""> 16 <meta name="author" content=""> 17 <title>登录成功的页面</title> 18 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 19 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 23 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 24 25 <script src="<%=basePath%>js/jquery.min.js"></script> 26 <script src="<%=basePath%>js/bootstrap.min.js"></script> 27 <script src="<%=basePath%>js/metisMenu.min.js"></script> 28 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 29 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 30 <script src="<%=basePath%>js/sb-admin-2.js"></script> 31 </head> 32 <body> 33 34 <div>恭喜您登录成功</div> 35 <%-- 您使用的账户的用户名为: ${loginSuccessUserName } </br> <!-- 显示用户信息 --> --%> 36 37 <!-- 2 上次登录时间 --> 38 <div>您上次登录时间为: ${logintime }</div> 39 40 <!-- 12 历史登录次数 --> 41 <div>您总共登录次数(算本次)为: ${loginNumber} </div> 42 43 <!-- 从session中取出 --> 44 <div>您使用的账户的用户名为: ${loginUserName }</div> 45 46 <a href="<%=basePath%>/user/myProfile.action">我的资料</a> <br> 47 <a href="<%=basePath%>user/homepage.action">进入主页面</a> 48 49 50 </body> 51 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <%@ taglib prefix="itheima" uri="http://itcast.cn/common/"%> 5 <% 6 String path = request.getContextPath(); 7 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 8 + path + "/"; 9 %> 10 <!DOCTYPE html> 11 <html xmlns="http://www.w3.org/1999/xhtml"> 12 <head> 13 <meta charset="utf-8"> 14 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 15 <meta name="viewport" content="width=device-width, initial-scale=1"> 16 <meta name="description" content=""> 17 <meta name="author" content=""> 18 <title>查看魔法卡和陷阱卡列表</title> 19 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 23 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 24 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 25 26 <script src="<%=basePath%>js/jquery.min.js"></script> 27 <script src="<%=basePath%>js/bootstrap.min.js"></script> 28 <script src="<%=basePath%>js/metisMenu.min.js"></script> 29 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 30 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 31 <script src="<%=basePath%>js/sb-admin-2.js"></script> 32 </head> 33 <body> 34 35 <jsp:include page="head.jsp" flush="true"/> 36 37 <div class="col-sm-10"> 38 <div id="mainContent"> 39 40 <div class="panel panel-primary"> 41 <div class="panel-heading"> 42 <h3 class="panel-title">魔法卡和陷阱卡展示的页面</h3> 43 </div> 44 <div class="panel-body"> 45 46 <!-- 22 魔陷卡组新增 --> 47 <form class="form-inline" action="${pageContext.request.contextPath }/deck/magic_trapOption" method="post"> 48 <div class="form-group"> 49 <label for="province">种类</label> 50 <select id="magic_trapOne" name="magic_trapOne" required> 51 <option>--请先选择--</option> 52 <option value="0">魔法卡</option> 53 <option value="1">陷阱卡</option> 54 </select> 55 <select id="magic_trapTwo" name="magic_trapTwo"> 56 <option>--请再选择--</option> 57 58 </select> 59 </div> 60 <button type="submit" class="btn btn-default">查询</button> 61 </form> 62 63 64 <form id="form2" action="${pageContext.request.contextPath }/deck/deletesMagicTrap" method="post"> 65 66 <table class="table table-hover table-striped table-bordered"> 67 <thead> 68 <tr> 69 <th><input type="checkbox" onclick="checkBox()" id="ids" name="ids" value="" form="form2"></th> 70 <th>卡片ID</th> 71 <th>卡片名称</th> 72 <th>卡片类型</th> 73 <th>搭配卡组</th> 74 <th>效果</th> 75 <th> <!-- 31 魔陷卡添加--> 76 <button type="button" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#magicTrapAdd">添加</button> 77 <input type="submit" value="删除" form="form2" class="btn btn-danger btn-xs"> 78 </th> 79 </tr> 80 </thead> 81 82 <tbody> <!-- 使用分页查询后,由list改为了page.rows --> 83 <c:forEach items="${magic_trapList}" var="list"> 84 <tr> 85 <td> 86 <input type="checkbox" name="ids" value="${list.magicTrapId}"> 87 <input type="hidden" name="deletesCardId" value="${list.cardType}"> 88 </td> 89 <td>${list.magicTrapId}</td> 90 <td>${list.cardName}</td> 91 <td>${list.cardType}</td> 92 <td>${list.deckMatch}</td> 93 <td>${list.effect}</td> 94 <td> 95 <%-- <button type="button" class="btn btn-primary btn-xs" 96 data-toggle="modal" data-target="#magicTrapUpdateModal" 97 onclick="showFormMagicTrap(${list.magicTrapId},${list.cardType})">修改</button> --%> 98 99 <button type="button" class="btn btn-primary btn-xs" 100 data-toggle="modal" data-target="#magicTrapUpdateModal" 101 onclick="showFormMagicTrap('${list.magicTrapId}','${list.cardType}')">修改</button> 102 103 <button type="button" class="btn btn-danger btn-xs" 104 onclick="ajaxDelMagicTrap('${list.magicTrapId}','${list.cardType}')">删除</button> 105 </td> 106 </tr> 107 </c:forEach> 108 </tbody> 109 </table> 110 </form> <!-- 批量删除时用到的form --> 111 112 </div> 113 </div> 114 115 116 </div> 117 </div> 118 119 <div class="modal fade" id="magicTrapAdd" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 120 <div class="modal-dialog"> 121 <div class="modal-content"> 122 <div class="modal-header"> 123 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 124 × 125 </button> 126 <h4 class="modal-title" id="myModalLabel"> 127 添加魔陷卡 128 </h4> 129 </div> 130 131 <div class="modal-body"> 132 <!-- 【添加】 模态框中的表单form --> 133 <form class="form-horizontal" id="modaladdMagic_trap"> 134 <div> 135 <label>卡片ID:</label> 136 <input type="text" id="magicTrapId" name="magicTrapId" autocomplete="off"> 137 </div> 138 <div> 139 <label>卡片名称:</label> 140 <input type="text" id="cardName" name="cardName" autocomplete="off"> 141 </div> 142 <div> 143 <label>卡片类型: </label> 144 <select id="cardType" name="cardType" required> 145 <option>--请选择--</option> 146 <option value="场地魔法卡">场地魔法卡</option> 147 <option value="普通魔法卡">普通魔法卡</option> 148 <option value="普通陷阱卡">普通陷阱卡</option> 149 <option value="反击陷阱卡">反击陷阱卡</option> 150 </select> 151 </div> 152 <div> 153 <label>搭配卡组:</label> 154 <input type="text" id="deckMatch" name="deckMatch" autocomplete="off"> 155 </div> 156 <div> 157 <label>效果:</label> 158 <input type="text" id="effect" name="effect" autocomplete="off"> 159 </div> 160 </form> 161 </div> 162 <div class="modal-footer"> 163 <button type="button" class="btn btn-primary" onclick="modalAddMagic_trap()">添加</button> 164 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 165 </div> 166 </div> 167 </div> 168 </div> <!-- 【添加】 模态框的结束div,包含form --> 169 170 <!-- 魔陷的模态框修改 --> 171 <div class="modal fade" id="magicTrapUpdateModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel2" aria-hidden="true"> 172 <div class="modal-dialog"> 173 <div class="modal-content"> 174 <div class="modal-header"> 175 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 176 × 177 </button> 178 <h4 class="modal-title" id="myModalLabel2"> 179 修改魔陷卡 180 </h4> 181 </div> 182 <div class="modal-body"> 183 184 <!-- 【修改】 模态框中的表单form --> 185 <form class="form-horizontal" id="modalUpdate_formMagicTrap"> 186 <div> 187 <label>卡片ID:</label> 188 <input type="text" id="magicTrapId2" name="magicTrapId" readonly="readonly"> 189 目前禁止修改 190 </div> 191 <div> 192 <label>卡片名称:</label> 193 <input type="text" id="cardName2" name="cardName" autocomplete="off"> 194 </div> 195 <div> 196 <label>卡片类型: </label> 197 <input type="text" id="cardType2" name="cardType" autocomplete="off"> 198 </div> 199 <div> 200 <label>搭配卡组:</label> 201 <input type="text" id="deckMatch2" name="deckMatch" autocomplete="off"> 202 </div> 203 <div> 204 <label>效果:</label> 205 <input type="text" id="effect2" name="effect" autocomplete="off"> 206 </div> 207 </form> 208 </div> 209 <div class="modal-footer"> 210 <button type="button" class="btn btn-primary" onclick="modalUpdateSubmitMagicTrap()">修改</button> 211 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> 212 </div> 213 </div> 214 </div> 215 </div> <!--【修改】 的结束div --> 216 217 218 <script type="text/javascript"> 219 220 $(function(){ // 17 卡组联动 221 var cities = new Array(2); 222 cities[0] = new Array("场地魔法卡","普通魔法卡"); 223 cities[1] = new Array("普通陷阱卡","反击陷阱卡"); 224 225 $("#magic_trapOne").change(function(){ 226 $("#magic_trapTwo").empty(); 227 228 var val = this.value; 229 $.each(cities,function(i,n){ 230 if(val==i){ 231 $.each(cities[i], function(j,m) { 232 var textNode = document.createTextNode(m); 233 var opEle = document.createElement("option"); 234 $(opEle).append(textNode); 235 $(opEle).appendTo($("#magic_trapTwo")); 236 }); 237 } 238 }); 239 240 }); 241 }); 242 243 function modalAddMagic_trap() { // 31添加 添加功能的模态框调用 244 $.ajax({ 245 type:"POST", 246 url:"<%=basePath%>deck/addMagic_trap", 247 data:$("#modaladdMagic_trap").serialize(), // 添加的模态框中的form的id 248 success:function() { 249 alert("添加魔陷卡成功"); 250 $("#magicTrapAdd").modal("hide"); // 通过模态框的id,隐藏模态框 251 $(".modal-backdrop").remove(); // 去除,模态框添加后,灰屏 252 history.go(0); // 去灰屏后,无法打开模态框,so刷新 253 } 254 }); 255 } 256 257 // 32 显示查询 打开模态框时显示"准备修改的内容" 258 function showFormMagicTrap(magicTrapId,cardType) { 259 // alert("可以"); 260 // alert(magicTrapId); 261 // alert(cardType); 262 263 $.ajax({ 264 type:"POST", 265 url:"<%=basePath%>deck/showFormMagicTrap", 266 data:{"magicTrapId":magicTrapId, "cardType":cardType}, 267 success:function(data) { // 返回通过bookTitle查询 268 $("#magicTrapId2").val(data.magicTrapId); // 将返回的数据,设置给form 269 $("#cardName2").val(data.cardName); 270 $("#cardType2").val(data.cardType); 271 $("#deckMatch2").val(data.deckMatch); 272 $("#effect2").val(data.effect); 273 }, 274 dataType:"json" 275 }); 276 } 277 278 function modalUpdateSubmitMagicTrap() { // 32修改 将从修改的模太框中的表单获得的数据提交 279 $.ajax({ 280 type:"POST", 281 url:"<%=basePath%>deck/modalUpdateSubmitMagicTrap", 282 data:$("#modalUpdate_formMagicTrap").serialize(), // 获得修改的模态框中的表单 283 success:function() { 284 alert("修改魔陷卡信息并提交成功"); 285 $("#magicTrapUpdateModal").modal("hide"); 286 $(".modal-backdrop").remove(); // 去除,模态框修改数据后,灰屏 287 history.go(0); // 去除灰屏后,无法打开模态框,so刷新一下 288 } 289 }); 290 } 291 292 function ajaxDelMagicTrap(magicTrapId,cardType) { // 34单次删除 使用AJAX提交id到服务器 293 $.ajax({ 294 type:"POST", 295 url:"<%=basePath%>deck/deleteMagicTrap", 296 data:{"magicTrapId":magicTrapId, "cardType":cardType}, // 准备接收的是id 297 success:function() { 298 alert("删除成功"); 299 history.go(0); 300 } 301 }); 302 } 303 304 function checkBox(){ // 35 全选 当全选的复选框勾选时,设置主体中的复选框的值为勾选,为false。 305 var checkAllEle = document.getElementById("ids"); 306 if(checkAllEle.checked==true){ 307 var checkOnes = document.getElementsByName("ids"); 308 for(var i=0;i<checkOnes.length;i++){ 309 checkOnes[i].checked=true; 310 } 311 }else{ // 否则,即全不选,主体中的复选框的值什么都不传,并不是false。 312 var checkOnes = document.getElementsByName("ids"); 313 for(var i=0;i<checkOnes.length;i++){ 314 checkOnes[i].checked=false; // 由于手动设置为false,最终才为false 315 } 316 } 317 } 318 319 </script> 320 321 </body> 322 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 <!DOCTYPE html> 10 <html> 11 <head> 12 <meta charset="utf-8"> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta name="viewport" content="width=device-width, initial-scale=1"> 15 <meta name="description" content=""> 16 <meta name="author" content=""> 17 <title>我的资料</title> 18 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 19 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 23 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 24 25 <script src="<%=basePath%>js/jquery.min.js"></script> 26 <script src="<%=basePath%>js/bootstrap.min.js"></script> 27 <script src="<%=basePath%>js/metisMenu.min.js"></script> 28 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 29 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 30 <script src="<%=basePath%>js/sb-admin-2.js"></script> 31 </head> 32 <body> 33 34 <a href="<%=basePath%>user/homepage.action" >进入主页面</a> <br> 35 36 <%-- ${loginUserName } (目前用户名设置为不可以修改) </br> --%> 37 <%-- 2 我的名称是:${myProfileUser.getName() } --%> 38 39 <!-- 28 修改我的资料 --> 40 <form action="<%=basePath%>user/updateMyProfile.action" method="post"> 41 <div> 42 <label>用户名:</label> 43 <!-- 禁止修改输入框中的数值,因为用户名要保证唯一性,方便查询数据表 --> 44 <!-- 这里禁用修改,form也就不会提交,controller也就接收不到了 disabled="disabled" --> 45 <input type="text" value="${loginUserName }" name="loginUserName"> 46 </div> 47 48 <div> 49 <!-- 如果newUpdate不为空,则显示,否则显示 --> 50 <!-- ${not empty cookie.remembermeCookie? "checked='checked'" : ""} --> 51 <label>名称:</label> 52 <%-- <input type="text" value="${myProfileUser.getName() }" name="myProfileName" > --%> 53 <input type="text" value="${empty newUpdate?myProfileUser.getName() : newUpdate }" 54 name="myProfileName" > 55 </div> 56 57 <div> 58 <label>个性签名</label> 59 <input type="text" value="${newMy }" name="my"> 60 </div> 61 62 <!-- 18 长文本框 个人信息,最多20字 --> 63 <div> 64 <label>用户信息</label> 65 <textarea name="userInfo" maxlength="20" 66 placeholder="请在此输入,最多20字">${newUserInfo }</textarea> 67 </div> 68 69 <div> 70 <input type="submit" class="btn btn-default" value="修改" > 71 <input type="reset" class="btn btn-default" value="重置"> 72 </div> 73 </form> 74 75 <!-- 8 设置密保问题 --> 76 <br> 77 <div> 设置密保问题,修改密码</div> 78 <form action="<%=basePath%>/user/securityQuestion.action" method="post"> 79 <div>当前账户的用户名为: ${loginUserName }</div> 80 81 <div> 82 <label>用户名: </label> 83 <input type="text" name="username" 84 value="${loginUserName }" readonly="true"> 85 </div> 86 <div> 87 <label>密保问题1: 最喜欢的颜色 </label> 88 <input type="text" name="securityQuestion1" > 89 </div> 90 <div> 91 <label>密保问题2: 最喜欢的事情 </label> 92 <input type="text" name="securityQuestion2" > 93 </div> 94 <div> 95 <label>密保问题3: 最喜欢的游戏</label> 96 <input type="text" name="securityQuestion3" > 97 </div> 98 99 <div> 100 <input type="submit" class="btn btn-default" value="修改" > 101 <input type="reset" class="btn btn-default" value="重置"> 102 </div> 103 </form> 104 105 <br> 106 <!-- 使用修改功能时,要注意,目前已经使用了 事务管理 107 如果两次输入的密码,错误(哪怕错一次),也是修改不成功的 108 目前没有想出办法,怎么在这里获得用户名(主键),所以使用是模拟的用户名 1 --> 109 110 <form action="<%=basePath%>user/UpdatePassword.action" method="post"> 111 <div>使用事务,修改密码</div> 112 <!-- 4-2 获得当前的用户名 --> 113 <div>当前账户的用户名为: ${loginUserName }</div> 114 115 <div> 116 <label>用户名: </label> 117 <input type="text" name="usernameUpdatePassword" 118 value="${loginUserName }" readonly="true"> 119 </div> 120 121 <div> 122 <label>第一次输入密码: </label> 123 <input type="password" name="password1" > 124 </div> 125 126 <div> 127 <label>第二次输入密码: </label> 128 <input type="password" name="password2" > 129 </div> 130 131 <div> 132 <label>想要修改的密码: </label> 133 <input type="password" name="updatePassword" > 134 </div> 135 136 <div> 137 <input type="submit" class="btn btn-default" value="修改" > 138 <input type="reset" class="btn btn-default" value="重置"> 139 </div> 140 </form> 141 142 <br> 143 144 </body> 145 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 <!DOCTYPE html> 10 <html> 11 <head> 12 <meta charset="utf-8"> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta name="viewport" content="width=device-width, initial-scale=1"> 15 <meta name="description" content=""> 16 <meta name="author" content=""> 17 <title>图片</title> 18 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 19 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 23 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 24 25 <script src="<%=basePath%>js/jquery.min.js"></script> 26 <script src="<%=basePath%>js/bootstrap.min.js"></script> 27 <script src="<%=basePath%>js/metisMenu.min.js"></script> 28 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 29 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 30 <script src="<%=basePath%>js/sb-admin-2.js"></script> 31 </head> 32 <body> 33 <jsp:include page="head.jsp" flush="true"/> 34 35 <div class="col-sm-10"> 36 <div id="mainContent"> 37 38 <div class="panel panel-info"> 39 <div class="panel-heading"> 40 <h3 class="panel-title">图片页面</h3> 41 </div> 42 <div class="panel-body"> 43 44 45 显示图片 <br> 46 <a href="#"> 47 <img src="${pageContext.request.contextPath}/img/1.jpg" 48 width="144" height="108"/> 49 </a> 50 51 <br> 52 <br> 53 54 <!-- 上传图片是需要指定form的属性 enctype="multipart/form-data" --> 55 <!-- <form id="itemForm" action="" method="post" enctype="multipart/form-data"> --> 56 <!-- src="/pic/1.jpg"可以直接显示本地的图片--> 57 <form id="itemForm" action="<%=basePath%>/picture/picture2" method="post" enctype="multipart/form-data"> 58 <table width="100%" border=1> 59 <tr> 60 <td> 61 <c:if test="${picName == null}">准备上传图片</c:if> 62 <c:if test="${picName != null}">预览(点击左侧图片菜单,重新进入后,可查看图片列表)</c:if> 63 </td> 64 <td> 65 <c:if test="${picName !=null}"> 66 <img src="/pic/${picName}" width=100 height=100/> 67 <br/> 68 </c:if> 69 <input type="file" name="pictureFile"/> 70 </td> 71 </tr> 72 73 <tr> 74 <td><input type="submit" value="上传图片" /> </td> 75 </tr> 76 </table> 77 78 </form> 79 80 81 <table width="100%" class="table table-hover table-striped table-bordered"> 82 <thead> 83 <tr> 84 <th>图片</th> 85 </tr> 86 </thead> 87 88 <tbody> 89 <tr> 90 <c:forEach items="${pictureList }" var="list"> 91 <tr> 92 <td> 93 <img src="/pic/${list.picName} " width=100 height=100/> 94 </td> 95 </tr> 96 </c:forEach> 97 </tr> 98 </tbody> 99 </table> 100 101 </div> <!-- 左侧导航栏2,右侧侧内容10的结束div --> 102 103 </div> 104 </div> 105 </div> 106 107 </body> 108 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 <!DOCTYPE html> 10 <html> 11 <head> 12 <meta charset="utf-8"> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta name="viewport" content="width=device-width, initial-scale=1"> 15 <meta name="description" content=""> 16 <meta name="author" content=""> 17 <title>注册的页面</title> 18 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 19 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 23 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 24 25 <script src="<%=basePath%>js/jquery-1.8.3.js"></script> 26 27 <script src="<%=basePath%>js/jquery.min.js"></script> 28 <script src="<%=basePath%>js/bootstrap.min.js"></script> 29 <script src="<%=basePath%>js/metisMenu.min.js"></script> 30 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 31 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 32 <script src="<%=basePath%>js/sb-admin-2.js"></script> 33 34 <script src="<%=basePath%>js/jquery.validate.min.js"></script> 35 <script src="<%=basePath%>js/messages_zh.js"></script> 36 <script src="<%=basePath%>js/demo1.js"></script> 37 </head> 38 <body> 39 40 <!-- 6 用户登录失败,提示信息 loginFailure 这里的失败,实际上就是db中查询不到有这个对象 --> 41 <!-- ${loginFailure } == 用户登录失败,请注册 --> 42 <div> 43 <!--当提示信息不为空时,才进行提示--> 44 <c:if test="${!empty loginFailure }"> 45 <font color="red" size="5" >${loginFailure }</font> 46 </c:if> 47 </div> 48 49 <!-- 11【用户注册】 --> 50 <form id="registerForm" action="${pageContext.request.contextPath }/user/register.action" method="post" > 51 <div> 52 <label>用户名</label> 53 <input id="username" type="text" name="username"> 54 <span id="usernameInfo"></span> <!-- 【异步校验-注册用户名】 --> 55 </div> 56 57 <div> 58 <label>密码</label> 59 <input id="password1" type="password" name="password"> 60 </div> 61 62 <div> 63 <label>确认密码</label> 64 <input id="password2" type="password" name="password2" onkeyup="validate()"> 65 <span id="passwordVerify"></span> <!-- 19 【密码不同】 提示信息 --> 66 </div> 67 68 <div> <!-- 53 【完善表单】 新增邮箱、姓名、性别、出生日期。让注册时填写的信息更全面。 --> 69 <label>Email</label> 70 <input type="text" name="email" id="email"> 71 </div> 72 73 <div> 74 <label>姓名</label> 75 <input type="text" name="name"> 76 </div> 77 78 <!-- 1 省市联动 --> 79 <div class="form-group"> 80 <label for="province">籍贯</label> 81 <select id="province" name="provinces"> 82 <option>--请选择--</option> 83 <option value="0">河北省</option> 84 <option value="1">四川省</option> 85 <option value="2">广东省</option> 86 <option value="3">江西省</option> 87 </select> 88 <select id="city" name="provinceCity"> 89 <!-- <option value="0"></option> 90 <option value="1"></option> 91 <option value="2"></option> --> 92 </select> 93 </div> 94 95 96 <div> 97 <label>性别</label> 98 <input type="radio" name="sex" value="男"/>男 99 <input type="radio" name="sex" value="女"/>女 100 <label for="sex" style="display: none;"></label> <!-- class="error"作用是? --> 101 </div> 102 103 <div> 104 <label>出生日期</label> 105 <input type="text" name="birthday"> 106 </div> 107 108 <div> 109 <input type="submit" class="btn btn-default" value="注册" name="submit" > 110 <input type="reset" class="btn btn-default" value="重置"> 111 </div> 112 113 </form> 114 115 <%-- <script src="<%=basePath%>js/jquery-1.8.3.js"></script> 116 117 <script src="<%=basePath%>js/jquery.min.js"></script> 118 <script src="<%=basePath%>js/bootstrap.min.js"></script> 119 <script src="<%=basePath%>js/metisMenu.min.js"></script> 120 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 121 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 122 <script src="<%=basePath%>js/sb-admin-2.js"></script> 123 124 <script src="<%=basePath%>js/jquery.validate.min.js"></script> 125 <script src="<%=basePath%>js/messages_zh.js"></script> 126 <script src="<%=basePath%>js/demo1.js"></script> --%> 127 128 <!-- <script src="js/jquery-1.11.3.min.js"></script> --> 129 <!-- 54 【表单校验】 引入的文件,共3个。在填写注册的表单时,填写错误时会有提示。防止填写错误的格式 --> 130 <!-- <script type="text/javascript" src="js/jquery-1.8.3.js"></script> --> 131 <!-- validate.js是建立在jquery之上的,所以得先导入jquery的类库--> 132 <!-- <script type="text/javascript" src="js/jquery.validate.min.js"></script> --> 133 <!-- 引入国际化js文件--> 134 <!-- <script type="text/javascript" src="js/messages_zh.js"></script> --> 135 <!-- 引入自定义的js文件 --> 136 <!-- <script src="js/demo1.js"></script> --> 137 138 <script type="text/javascript"> 139 140 $(function(){ 141 $("#registerForm").validate({ // 54 【表单校验】 142 rules:{ // 规则 143 username:{ 144 required:true, // 必须 145 minlength:2 // 最小2位 146 }, 147 password:{ 148 required:true, // 必须 149 digits:true, // 数字 150 minlength:1 // 最小1位 151 }, 152 // password2 // 不能为空 153 password2:{ 154 required:true, // 必须 155 }, 156 email:{ // 邮箱格式 157 required:false, 158 email:true 159 }, 160 name:{ // 姓名 161 required:true, 162 maxlength:12 163 }, 164 sex:{ // 性别 165 required:true 166 }, 167 birthday:{ // 请输入有效的日期 新增 168 required:true, // 必须 169 date:true 170 } 171 }, 172 messages:{ // 消息 173 username:{ 174 required:"用户名不能为空!", 175 minlength:"用户名不得少于2位!" 176 }, 177 password:{ 178 required:"密码不能为空!", 179 digits:"密码必须是整数!", 180 minlength:"密码不得少于1位!" 181 }, 182 password2:{ 183 required:"密码不能为空!", 184 }, 185 email:{ 186 required:"邮箱不能为空!", 187 email:"邮箱格式不正确!" 188 }, 189 name:{ 190 required:"姓名不能为空!", 191 maxlength:"姓名不得多于12位!" 192 }, 193 sex:{ 194 required:"性别必须勾选!" 195 }, 196 birthday:{ 197 required:"日期必须存在,日期格式(YYYY-MM-DD)", 198 date:"请输入有效的日期,日期格式(YYYY-MM-DD)" //不写这一行,则为:请输入有效的日期 199 } 200 } 201 }); 202 }); // 54 【表单校验】 的函数的结束括号 203 204 205 $(function(){ 206 $("#username").blur(function(){ // 【异步校验-注册用户名】 207 var usernameInput = $(this).val(); 208 $.post( 209 "<%=basePath%>user/ajaxUserName.action", 210 {"username":usernameInput}, 211 function(data){ // 服务器返回的json格式的数据 212 var isExist = data.isExist; 213 // alert(isExist); // resultMap这种方式的测试 214 215 var usernameInfo = ""; 216 if(isExist){ 217 usernameInfo = "该用户名已经存在"; 218 $("#usernameInfo").css("color","red"); 219 }else{ 220 usernameInfo = "该用户名不存在,当符合校验规则时,可以使用√" 221 $("#usernameInfo").css("color","green"); 222 } 223 $("#usernameInfo").html(usernameInfo); 224 }, 225 "json" 226 ); //pose方法的结束括号 227 }); // 获取username的值的方法的结束括号 228 }); // 【异步校验-注册用户名】的结束括号 229 230 231 // 【密码不同】 用户注册时,在表单中填写的两次密码,对两次的值进行判断,并提示相关信息 232 // 获得两次输入的值、进行判断、根据结果显示相关的信息。不一样时,禁用使用注册按钮。 233 function validate() { 234 var password1 = document.getElementById("password1").value; 235 var password2 = document.getElementById("password2").value; 236 if(password1 == password2) { 237 document.getElementById("passwordVerify").innerHTML="<font color='green'>两次密码相同</font>"; 238 document.getElementById("submit").disabled = false; 239 //disabled 禁用submit元素,由于设置的是false,即不能点击注册按钮 240 } 241 else { 242 document.getElementById("passwordVerify").innerHTML="<font color='red'>两次密码不相同</font>"; 243 document.getElementById("submit").disabled = true; 244 //disable 禁用submit元素,由于设置的是true,所以可以使用。 245 } 246 } 247 248 /* 省市联动 */ 249 $(function(){ 250 var cities = new Array(1); 251 cities[0] = new Array("河北省","石家庄市","唐山市","沧州市"); 252 cities[1] = new Array("四川省","成都市","乐山市","雅安市"); 253 cities[2] = new Array("广州省","汕头市","深圳市","潮州市"); 254 cities[3] = new Array("江西省","南昌市","九江市","赣州市"); 255 256 $("#province").change(function(){ 257 $("#city").empty(); 258 259 var val = this.value; 260 $.each(cities,function(i,n){ 261 if(val==i){ 262 $.each(cities[i], function(j,m) { 263 var textNode = document.createTextNode(m); 264 var opEle = document.createElement("option"); 265 $(opEle).append(textNode); 266 $(opEle).appendTo($("#city")); 267 }); 268 } 269 }); 270 271 }); 272 }); 273 274 </script> 275 276 277 </body> 278 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 <!DOCTYPE html> 10 <html> 11 <head> 12 <meta charset="utf-8"> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta name="viewport" content="width=device-width, initial-scale=1"> 15 <meta name="description" content=""> 16 <meta name="author" content=""> 17 <title>忘记密码时,重新设置密码的页面</title> 18 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 19 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 23 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 24 25 <script src="<%=basePath%>js/jquery.min.js"></script> 26 <script src="<%=basePath%>js/bootstrap.min.js"></script> 27 <script src="<%=basePath%>js/metisMenu.min.js"></script> 28 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 29 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 30 <script src="<%=basePath%>js/sb-admin-2.js"></script> 31 </head> 32 <body> 33 34 <div> 输入用户名,验证3个密保问题,然后可以修改密码</div> 35 <form action="<%=basePath%>/user/toSQ.action" method="post"> 36 <div> 37 <label>用户名: </label> 38 <input type="text" name="username"> 39 </div> 40 <div> 41 <label>密保问题1: 最喜欢的颜色 </label> 42 <input type="text" name="securityQuestion1" > 43 </div> 44 <div> 45 <label>密保问题2: 最喜欢的事情 </label> 46 <input type="text" name="securityQuestion2" > 47 </div> 48 <div> 49 <label>密保问题3: 最喜欢的游戏</label> 50 <input type="text" name="securityQuestion3" > 51 </div> 52 53 <div> 54 <input type="submit" class="btn btn-default" value="验证" > 55 <input type="reset" class="btn btn-default" value="重置"> 56 </div> 57 </form> 58 59 60 </body> 61 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 <!DOCTYPE html> 10 <html> 11 <head> 12 <meta charset="utf-8"> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta name="viewport" content="width=device-width, initial-scale=1"> 15 <meta name="description" content=""> 16 <meta name="author" content=""> 17 <title>通过密保问题验证后,修改密码的页面</title> 18 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 19 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 23 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 24 25 <script src="<%=basePath%>js/jquery.min.js"></script> 26 <script src="<%=basePath%>js/bootstrap.min.js"></script> 27 <script src="<%=basePath%>js/metisMenu.min.js"></script> 28 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 29 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 30 <script src="<%=basePath%>js/sb-admin-2.js"></script> 31 </head> 32 <body> 33 34 <!-- 在通过密保问题验证后,需要重新设置密码 --> 35 <form action="<%=basePath%>user/sQUpdatePassword.action" method="post"> 36 <div> 37 <label>用户名: </label> 38 <input type="text" value="${sQusername} " 39 name="sQusername" readonly="true"> 40 </div> 41 42 <div> 43 <label>想要修改的密码:</label> 44 <input type="password" name="sQupdatePassword" > 45 </div> 46 <div> 47 修改成功后,会自动进入登录页面 48 </div> 49 <div> 50 <input type="submit" class="btn btn-default" value="修改" > 51 <input type="reset" class="btn btn-default" value="重置"> 52 </div> 53 </form> 54 </body> 55 </html>

1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <%@ taglib prefix="itheima" uri="http://itcast.cn/common/"%> 5 <% 6 String path = request.getContextPath(); 7 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() 8 + path + "/"; 9 %> 10 <!DOCTYPE html> 11 <html xmlns="http://www.w3.org/1999/xhtml"> 12 <head> 13 <meta charset="utf-8"> 14 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 15 <meta name="viewport" content="width=device-width, initial-scale=1"> 16 <meta name="description" content=""> 17 <meta name="author" content=""> 18 <title>测试SSM项目专用的页面</title> 19 <link href="<%=basePath%>css/bootstrap.min.css" rel="stylesheet"> 20 <link href="<%=basePath%>css/metisMenu.min.css" rel="stylesheet"> 21 <link href="<%=basePath%>css/dataTables.bootstrap.css" rel="stylesheet"> 22 <link href="<%=basePath%>css/sb-admin-2.css" rel="stylesheet"> 23 <link href="<%=basePath%>css/font-awesome.min.css" rel="stylesheet" type="text/css"> 24 <link href="<%=basePath%>css/boot-crm.css" rel="stylesheet" type="text/css"> 25 26 <script src="<%=basePath%>js/jquery.min.js"></script> 27 <script src="<%=basePath%>js/bootstrap.min.js"></script> 28 <script src="<%=basePath%>js/metisMenu.min.js"></script> 29 <script src="<%=basePath%>js/jquery.dataTables.min.js"></script> 30 <script src="<%=basePath%>js/dataTables.bootstrap.min.js"></script> 31 <script src="<%=basePath%>js/sb-admin-2.js"></script> 32 33 </head> 34 <body> 35 36 <ol> 37 <li> 38 <a href="${pageContext.request.contextPath }/test/session">获取session中的值</a> 39 </li> 40 <li> 41 <a href="${pageContext.request.contextPath }/test/getSession">获取session中的值,映射多请求</a> 42 </li> 43 <li> 44 <a href="${pageContext.request.contextPath }/test/params/626">只提交数值,@PathVariable</a> 45 </li> 46 <li> 47 <a href="${pageContext.request.contextPath }/test/requestParam.html?name=shanhai"> 48 提交名称+数值,@RequestParam</a> 49 </li> 50 <li> 51 <button class="btn btn-primary btn-xs" onclick="requestBody48()">@RequestBody</button> 52 </li> 53 <li> 54 <input type="button" onclick="requestBody49()" value="测试49,传list到c层"> 55 </li> 56 <li> 57 <input type="button" onclick="requestBody50()" value="测试50,c层传java对象到ajax"> 58 </li> 59 <li> 60 <input type="button" onclick="requestBody51()" value="测试51,c层传list到ajax"> 61 </li> 62 <li> 63 <input type="button" onclick="requestBody52()" value="测试52,ajax传对象+list"> 64 </li> 65 <li> 66 <input type="button" onclick="requestBody53()" value="测试53,ajax注释"> 67 </li> 68 </ol> 69 70 <script type="text/javascript"> 71 72 function requestBody53() { // 写好注释 73 var saveDataAry=[]; // 声明一个js数组,用来保存数据 74 var data1={"userName":"山海","passWord":"123"}; // 声明一个对象,准备存入数组中 75 var data2={"userName":"大地","passWord":"456"}; 76 var data3={"userName":"海洋","passWord":"789","name":"海"}; 77 // var data4={"userName":"海洋","Test54":{[test54{"10", "11"},{"20", "21"}]}}; 78 saveDataAry.push(data1); // 向数组存入对象 79 saveDataAry.push(data2); 80 saveDataAry.push(data3); // 新增对象3,且对象3新增属性 81 // saveDataAry.push(data4); // 新增对象4,且对象3新增数组 82 83 $.ajax({ 84 type:"POST", // 必须POST,因为get无请求体 85 url:"<%=basePath%>test/Test53", 86 dataType:"json", // 设置收到fu数据的格式 87 contentType:"application/json", // 设置发送给fu数据的格式 88 data:JSON.stringify(saveDataAry), // 将js值转为json字符串 89 success:function(data){ // 接收c层传递的java对象 90 // alert("c层传递java对象到ajax"); 91 // alert(data); // 直接data则会[object Object] 92 $.each(data,function(k,v){ // 遍历收到的对象中的属性 93 alert(k +":"+ v); 94 }); 95 } 96 }); 97 } 98 99 100 101 function requestBody52() { 102 $.ajax({ 103 type:"POST", 104 url:"<%=basePath%>test/requestBodyTest52.action", 105 dataType:"json", 106 contentType:"application/json", 107 data:{id:1, 108 address:[{ 109 name:'贵州', 110 areaCode:'564432' 111 }, 112 { 113 name:'西安', 114 areaCode:'512344' 115 }], 116 }, 117 success:function(data){ 118 alert("成功"); 119 } 120 }); 121 } 122 123 124 function requestBody51() { // 51 c层传递list类型的对象 未解决 125 var saveDataAry=[]; 126 var data1={"userName":"山海","passWord":"123"}; 127 var data2={"userName":"大地","passWord":"456"}; 128 saveDataAry.push(data1); 129 saveDataAry.push(data2); 130 131 $.ajax({ 132 type:"POST", 133 url:"<%=basePath%>test/requestBodyTest51.action", 134 dataType:"json", 135 contentType:"application/json", 136 data:JSON.stringify(saveDataAry), 137 success:function(data){ 138 alert("controller层传递java对象到ajax中"); 139 $.each(data,function(k,v){ 140 alert(k +":"+ v); 141 }); 142 } 143 }); 144 } 145 146 147 function requestBody50() { // 50 c层传递一个java对象给ajax 148 var saveDataAry=[]; 149 var data1={"userName":"山海","passWord":"123"}; 150 var data2={"userName":"大地","passWord":"456"}; 151 saveDataAry.push(data1); 152 saveDataAry.push(data2); 153 154 $.ajax({ 155 type:"POST", 156 url:"<%=basePath%>test/requestBodyTest50.action", 157 dataType:"json", 158 contentType:"application/json", 159 data:JSON.stringify(saveDataAry), 160 success:function(data){ 161 alert("controller层传递java对象到ajax中"); 162 $.each(data,function(k,v){ // 遍历 163 alert(k +":"+ v); 164 }); 165 166 // alert(data); // [object Object] 167 // alert(data.username); // undefined 168 // alert("成功"); 169 } 170 }); 171 } 172 173 function requestBody49() { // 49 ajax提交List类型的对象 174 var saveDataAry=[]; 175 var data1={"userName":"山海","passWord":"123"}; 176 var data2={"userName":"大地","passWord":"456"}; 177 saveDataAry.push(data1); 178 saveDataAry.push(data2); 179 180 $.ajax({ 181 type:"POST", 182 url:"<%=basePath%>test/requestBodyTest49.action", 183 dataType:"json", 184 contentType:"application/json", 185 data:JSON.stringify(saveDataAry), 186 success:function(data){ 187 alert(data); // [object Object] 188 alert(data.username); // undefined 189 alert("成功"); 190 } 191 }); 192 } 193 194 195 function requestBody48() { // 测试RequestBody,但未能收到数据 196 $.ajax({ 197 url:"<%=basePath%>test/requestBodyTest48.action", 198 dataType:"json", 199 contentType:"application/json", 200 data:'{"userName":"admin","passWord","123"}', 201 type:"post", 202 success:function(data) { 203 alert(data); 204 },error:function(error){ 205 alert(error); 206 } 207 }); 208 } 209 210 </script> 211 212 </body> 213 </html>
SSM框架配置

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>yugioh6</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 <context-param> 13 <param-name>contextConfigLocation</param-name> 14 <param-value>classpath:spring/applicationContext-*.xml</param-value> 15 </context-param> 16 <listener> 17 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 18 </listener> 19 <filter> 20 <filter-name>encoding</filter-name> 21 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 22 <init-param> 23 <param-name>encoding</param-name> 24 <param-value>UTF-8</param-value> 25 </init-param> 26 </filter> 27 <filter-mapping> 28 <filter-name>encoding</filter-name> 29 <url-pattern>/*</url-pattern> 30 </filter-mapping> 31 <servlet> 32 <servlet-name>springmvc</servlet-name> 33 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 34 <init-param> 35 <param-name>contextConfigLocation</param-name> 36 <param-value>classpath:spring/springmvc.xml</param-value> 37 </init-param> 38 <load-on-startup>1</load-on-startup> 39 </servlet> 40 <servlet-mapping> 41 <servlet-name>springmvc</servlet-name> 42 <url-pattern>/</url-pattern> 43 </servlet-mapping> 44 </web-app>
src/spring包下

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 3 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> 4 <!-- 以上为Spring的头文件,是Service层的 --> 5 6 <!-- 配置Service扫描,包名可能会变 --> 7 <context:component-scan base-package="shanhai.service" /> 8 9 10 </beans>

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 3 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> 4 <!-- 以上为Spring的头文件,是Dao层的 --> 5 6 <!-- 读取配置文件,文件名为jdbc.properties --> 7 <context:property-placeholder location="classpath:spring/jdbc.properties" /> 8 9 <!-- 配置 数据源 --> 10 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> 11 <property name="driverClassName" value="${jdbc.driver}" /> 12 <property name="url" value="${jdbc.url}" /> 13 <property name="username" value="${jdbc.username}" /> 14 <property name="password" value="${jdbc.password}" /> 15 </bean> 16 17 <!-- 配置SqlSessionFactory --> 18 <bean class="org.mybatis.spring.SqlSessionFactoryBean"> 19 <!-- 设置MyBatis核心配置文件,实际路径可能会变 --> 20 <property name="configLocation" value="classpath:spring/SqlMapConfig.xml" /> 21 <!-- 设置数据源 --> 22 <property name="dataSource" ref="dataSource" /> 23 </bean> 24 25 <!-- 配置Mapper扫描 --> 26 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 27 <!-- 设置Mapper扫描包,包名可能会变 --> 28 <property name="basePackage" value="shanhai.mapper" /> 29 </bean> 30 31 <!-- 注解事务 --> 32 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 33 <property name="dataSource" ref="dataSource"/> 34 </bean> 35 36 <!-- 开启注解 --> 37 <tx:annotation-driven transaction-manager="transactionManager"/> 38 </beans>

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 3 4 <configuration> 5 6 <!-- 别名,包名可能会变 --> 7 <typeAliases> 8 <package name="shanhai.pojo"/> 9 </typeAliases> 10 11 </configuration>

1 jdbc.driver=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/yugioh7?characterEncoding=utf-8 3 jdbc.username=真实名称 4 jdbc.password=真实密码

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 3 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> 4 <!-- 以上为Spriv MVC的头文件,是Controller层的 --> 5 6 <!-- 配置Controller扫描,包名可能会变 --> 7 <context:component-scan base-package="shanhai.controller" /> 8 9 <!-- 配置注解驱动 --> 10 <mvc:annotation-driven /> 11 12 <!-- 对静态资源放行 --> 13 <mvc:resources location="/css/" mapping="/css/**"/> 14 <mvc:resources location="/js/" mapping="/js/**"/> 15 <mvc:resources location="/fonts/" mapping="/fonts/**"/> 16 <mvc:resources location="/img/" mapping="/img/**"/> 17 18 <!-- 上传图片配置实现类 --> 19 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 20 <!-- 上传图片的大小 B 5M 1*1024*1024*5--> 21 <property name="maxUploadSize" value="5000000"/> 22 </bean> 23 24 <!-- 配置视图解析器,jsp文件夹的位置改到了WEB-INF下,和lib文件夹同级 --> 25 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 26 <!-- 前缀 --> 27 <property name="prefix" value="/WEB-INF/jsp/" /> 28 <!-- 后缀 --> 29 <property name="suffix" value=".jsp" /> 30 </bean> 31 32 </beans>
pojo

1 package shanhai.pojo; 2 3 import java.io.Serializable; 4 import java.sql.Date; 5 6 public class Books implements Serializable{ 7 private static final long serialVersionUID = 1L; 8 9 private int id; // ID 10 private String bookTitle; // 书名 11 private String progress; // 进度 12 private String unreadChapters; // 未读章节 13 private String subject; // 科目 14 private String note; // 笔记 15 private String demo; // 阅读时的示例 16 private String bookUse; // 使用 17 private String format; // 书籍格式 18 private Date startDate; // 起始阅读日期 19 private Date endDate; // 结束阅读日期 20 21 public Books() { 22 super(); 23 } 24 25 public Books(int id, String bookTitle, String progress, String unreadChapters, String subject, String note, 26 String demo, String bookUse, String format, Date startDate, Date endDate) { 27 super(); 28 this.id = id; 29 this.bookTitle = bookTitle; 30 this.progress = progress; 31 this.unreadChapters = unreadChapters; 32 this.subject = subject; 33 this.note = note; 34 this.demo = demo; 35 this.bookUse = bookUse; 36 this.format = format; 37 this.startDate = startDate; 38 this.endDate = endDate; 39 } 40 41 public Date getStartDate() { 42 return startDate; 43 } 44 45 public void setStartDate(Date startDate) { 46 this.startDate = startDate; 47 } 48 49 public Date getEndDate() { 50 return endDate; 51 } 52 53 public void setEndDate(Date endDate) { 54 this.endDate = endDate; 55 } 56 57 58 public int getId() { 59 return id; 60 } 61 62 public void setId(int id) { 63 this.id = id; 64 } 65 66 public String getBookTitle() { 67 return bookTitle; 68 } 69 70 public void setBookTitle(String bookTitle) { 71 this.bookTitle = bookTitle; 72 } 73 74 public String getProgress() { 75 return progress; 76 } 77 78 public void setProgress(String progress) { 79 this.progress = progress; 80 } 81 82 public String getUnreadChapters() { 83 return unreadChapters; 84 } 85 86 public void setUnreadChapters(String unreadChapters) { 87 this.unreadChapters = unreadChapters; 88 } 89 90 public String getSubject() { 91 return subject; 92 } 93 94 public void setSubject(String subject) { 95 this.subject = subject; 96 } 97 98 public String getNote() { 99 return note; 100 } 101 102 public void setNote(String note) { 103 this.note = note; 104 } 105 106 public String getDemo() { 107 return demo; 108 } 109 110 public void setDemo(String demo) { 111 this.demo = demo; 112 } 113 114 public String getBookUse() { 115 return bookUse; 116 } 117 118 public void setBookUse(String bookUse) { 119 this.bookUse = bookUse; 120 } 121 122 public String getFormat() { 123 return format; 124 } 125 126 public void setFormat(String format) { 127 this.format = format; 128 } 129 130 @Override 131 public String toString() { 132 return "Books [id=" + id + ", bookTitle=" + bookTitle + ", progress=" + progress + ", unreadChapters=" 133 + unreadChapters + ", subject=" + subject + ", note=" + note + ", demo=" + demo + ", bookUse=" + bookUse 134 + ", format=" + format + ", startDate=" + startDate + ", endDate=" 135 + endDate + "]"; 136 } 137 }

1 package shanhai.pojo; 2 3 import java.io.Serializable; 4 5 // 目前只有一个空参,一个全参,全部的get/set方法,toString方法 6 // 在创建需要返回不同参数的Card对象时,需要留意是否有相应的构造方法 7 // 这是不会报异常的,到时出了问题后找不到原因,留个记录 8 // 接收注册的对象只会输出2个属性值,原来toString只设置了两个属性 9 public class Card implements Serializable{ 10 private static final long serialVersionUID = 1L; 11 12 private int id; 13 private String name; 14 private String attribute; 15 private String race; 16 private int atk; 17 private int def; 18 19 public Card() { 20 super(); 21 } 22 23 public Card(int id, String name, String attribute, String race, int atk, int def) { 24 super(); 25 this.id = id; 26 this.name = name; 27 this.attribute = attribute; 28 this.race = race; 29 this.atk = atk; 30 this.def = def; 31 } 32 33 public int getId() { 34 return id; 35 } 36 public void setId(int id) { 37 this.id = id; 38 } 39 public String getName() { 40 return name; 41 } 42 public void setName(String name) { 43 this.name = name; 44 } 45 public String getAttribute() { 46 return attribute; 47 } 48 public void setAttribute(String attribute) { 49 this.attribute = attribute; 50 } 51 public String getRace() { 52 return race; 53 } 54 public void setRace(String race) { 55 this.race = race; 56 } 57 public int getAtk() { 58 return atk; 59 } 60 public void setAtk(int atk) { 61 this.atk = atk; 62 } 63 public int getDef() { 64 return def; 65 } 66 public void setDef(int def) { 67 this.def = def; 68 } 69 70 @Override 71 public String toString() { 72 return "Card [id=" + id + ", name=" + name + ", attribute=" + attribute + ", race=" + race + ", atk=" + atk 73 + ", def=" + def + "]"; 74 } 75 76 }

1 package shanhai.pojo; 2 3 public class Logininfo { // 表 logininfo 登录信息相关的内容 4 private String username; // 用户名 5 private String logintime; // 上次登录时间 6 private String securityQuestion1; // 密保问题1 7 private String securityQuestion2; // 密保问题2 8 private String securityQuestion3; // 密保问题3 9 private int loginNumber; // 历史登录次数 10 11 public Logininfo() { 12 super(); 13 } 14 15 public Logininfo(String username, String logintime, String securityQuestion1, String securityQuestion2, 16 String securityQuestion3, int loginNumber) { 17 super(); 18 this.username = username; 19 this.logintime = logintime; 20 this.securityQuestion1 = securityQuestion1; 21 this.securityQuestion2 = securityQuestion2; 22 this.securityQuestion3 = securityQuestion3; 23 this.loginNumber = loginNumber; 24 } 25 26 public int getLoginNumber() { // 12 历史登录次数 的 get/set() 27 return loginNumber; 28 } 29 30 public void setLoginNumber(int loginNumber) { 31 this.loginNumber = loginNumber; 32 } 33 34 public String getSecurityQuestion1() { 35 return securityQuestion1; 36 } 37 38 public void setSecurityQuestion1(String securityQuestion1) { 39 this.securityQuestion1 = securityQuestion1; 40 } 41 42 public String getSecurityQuestion2() { 43 return securityQuestion2; 44 } 45 46 public void setSecurityQuestion2(String securityQuestion2) { 47 this.securityQuestion2 = securityQuestion2; 48 } 49 50 public String getSecurityQuestion3() { 51 return securityQuestion3; 52 } 53 54 public void setSecurityQuestion3(String securityQuestion3) { 55 this.securityQuestion3 = securityQuestion3; 56 } 57 58 public String getUsername() { 59 return username; 60 } 61 62 public void setUsername(String username) { 63 this.username = username; 64 } 65 66 public String getLogintime() { 67 return logintime; 68 } 69 70 public void setLogintime(String logintime) { 71 this.logintime = logintime; 72 } 73 74 }

1 package shanhai.pojo; 2 3 import java.io.Serializable; 4 5 public class magic_trapCard implements Serializable{ // 魔法卡和陷阱卡 6 private static final long serialVersionUID = 1L; 7 private int magicTrapId; // 魔陷卡ID 8 private String cardName; // 卡片名称 9 private String cardType; // 卡片类型 10 private String deckMatch; // 搭配的卡组 11 private String effect; // 效果 12 13 public magic_trapCard() { 14 super(); 15 } 16 17 public magic_trapCard(int magicTrapId,String cardName, String cardType, String deckMatch, 18 String effect) { 19 super(); 20 this.magicTrapId = magicTrapId; 21 this.cardName = cardName; 22 this.cardType = cardType; 23 this.deckMatch = deckMatch; 24 this.effect = effect; 25 } 26 27 public int getMagicTrapId() { 28 return magicTrapId; 29 } 30 31 public void setMagicTrapId(int magicTrapId) { 32 this.magicTrapId = magicTrapId; 33 } 34 35 36 public String getEffect() { 37 return effect; 38 } 39 40 41 public void setEffect(String effect) { 42 this.effect = effect; 43 } 44 45 public String getDeckMatch() { 46 return deckMatch; 47 } 48 49 public void setDeckMatch(String deckMatch) { 50 this.deckMatch = deckMatch; 51 } 52 53 public String getCardName() { 54 return cardName; 55 } 56 57 public void setCardName(String cardName) { 58 this.cardName = cardName; 59 } 60 61 public String getCardType() { 62 return cardType; 63 } 64 65 public void setCardType(String cardType) { 66 this.cardType = cardType; 67 } 68 69 public String toString() { 70 return "magic_trapCard [magicTrapId=" + magicTrapId + ", cardName=" + cardName + ", cardType=" + cardType 71 + ", deckMatch=" + deckMatch + ", effect=" + effect + "]"; 72 } 73 }

1 package shanhai.pojo; 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 private int index; // ServiceImpl根据(当前页面数-1)/总条数计算出来的分页查询条件 15 16 public int getIndex() { 17 return index; 18 } 19 public void setIndex(int index) { 20 this.index = index; 21 } 22 public String getLikename() { 23 return likename; 24 } 25 public String setLikename(String likename) { 26 return this.likename = likename; 27 } 28 public int getCurrentPage() { 29 return currentPage; 30 } 31 public void setCurrentPage(int currentPage) { 32 this.currentPage = currentPage; 33 } 34 public int getCurrentCount() { 35 return currentCount; 36 } 37 public void setCurrentCount(int currentCount) { 38 this.currentCount = currentCount; 39 } 40 public int getTotalCount() { 41 return totalCount; 42 } 43 public void setTotalCount(int totalCount) { 44 this.totalCount = totalCount; 45 } 46 public int getTotalPage() { 47 return totalPage; 48 } 49 public void setTotalPage(int totalPage) { 50 this.totalPage = totalPage; 51 } 52 public List<T> getCardList() { 53 return cardList; 54 } 55 public void setCardList(List<T> cardList) { 56 this.cardList = cardList; 57 } 58 }

1 package shanhai.pojo; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class PageBean2<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 private Integer size = 10; //每页数 15 private Integer startRow = 0; //开始行 16 17 public String getLikename() { 18 return likename; 19 } 20 public String setLikename(String likename) { 21 return this.likename = likename; 22 } 23 public int getCurrentPage() { 24 return currentPage; 25 } 26 public void setCurrentPage(int currentPage) { 27 this.currentPage = currentPage; 28 } 29 public int getCurrentCount() { 30 return currentCount; 31 } 32 public void setCurrentCount(int currentCount) { 33 this.currentCount = currentCount; 34 } 35 public int getTotalCount() { 36 return totalCount; 37 } 38 public void setTotalCount(int totalCount) { 39 this.totalCount = totalCount; 40 } 41 public int getTotalPage() { 42 return totalPage; 43 } 44 public void setTotalPage(int totalPage) { 45 this.totalPage = totalPage; 46 } 47 public List<T> getCardList() { 48 return cardList; 49 } 50 public void setCardList(List<T> cardList) { 51 this.cardList = cardList; 52 } 53 }

1 package shanhai.pojo; 2 3 public class Picture { 4 private String picName; // 图片的名称 5 6 public Picture() { 7 super(); 8 } 9 10 public Picture(String picName) { 11 super(); 12 this.picName = picName; 13 } 14 15 public String getPicName() { 16 return picName; 17 } 18 19 public void setPicName(String picName) { 20 this.picName = picName; 21 } 22 23 @Override 24 public String toString() { 25 return "Picture [picName=" + picName + "]"; 26 } 27 28 }

1 package shanhai.pojo; 2 3 public class QueryVo { 4 // 每新增一个属性就要同时添加相应的get/set方法 5 String name; // 条件查询时使用的查询条件关键字 6 String race; // 下拉列表时使用的种族 7 8 Integer atk; 9 Integer atk1; // 根据攻击力范围进行查询,使用的两个参数 10 Integer atk2; 11 12 private Integer page; // 当前页 13 private Integer size = 10; // 每页数 14 private Integer startRow = 0; // 开始行 15 16 public Integer getAtk() { 17 return atk; 18 } 19 public void setAtk(Integer atk) { 20 this.atk = atk; 21 } 22 public Integer getAtk1() { 23 return atk1; 24 } 25 public void setAtk1(Integer atk1) { 26 this.atk1 = atk1; 27 } 28 public Integer getAtk2() { 29 return atk2; 30 } 31 public void setAtk2(Integer atk2) { 32 this.atk2 = atk2; 33 } 34 35 public String getRace() { 36 return race; 37 } 38 public void setRace(String race) { 39 this.race = race; 40 } 41 42 public String getName() { 43 return name; 44 } 45 public void setName(String name) { 46 this.name = name; 47 } 48 49 public Integer getPage() { 50 return page; 51 } 52 public void setPage(Integer page) { 53 this.page = page; 54 } 55 public Integer getSize() { 56 return size; 57 } 58 public void setSize(Integer size) { 59 this.size = size; 60 } 61 public Integer getStartRow() { 62 return startRow; 63 } 64 public void setStartRow(Integer startRow) { 65 this.startRow = startRow; 66 } 67 68 }

1 package shanhai.pojo; 2 3 public class User { // yugioh7中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 provinces; // 省市 新增 11 private String provinceCity; 12 13 private String birthday; // 出生日期 新增 14 private int state; // 激活状态 15 private String code; // 激活码 由于要传入null只能使用String? 16 private String my; // 个性签名 17 private String userInfo; // 用户信息 18 19 // 新增属性后,要记得生成get/set方法,全参构造也要及时更新 20 21 public User(String username, String password) { 22 this.username = username; 23 this.password = password; 24 } 25 26 public User( String uid, String username, String password) { // 新增uid 27 this.uid = uid; 28 this.username = username; 29 this.password = password; 30 } 31 32 public User() { 33 } 34 35 // 全参构造,增加属性后要及时更新 ****** 36 public User(String uid, String username, String password, String email, 37 String name, String sex, String provinces,String provinceCity, 38 String birthday, int state, String code, String my, String userInfo) { 39 super(); 40 this.uid = uid; 41 this.username = username; 42 this.password = password; 43 this.email = email; 44 this.name = name; 45 this.sex = sex; 46 this.provinces = provinces; 47 this.provinceCity = provinceCity; 48 this.birthday = birthday; 49 this.state = state; 50 this.code = code; 51 this.my = my; 52 this.userInfo = userInfo; 53 } 54 55 public String getUserInfo() { 56 return userInfo; 57 } 58 59 public void setUserInfo(String userInfo) { 60 this.userInfo = userInfo; 61 } 62 63 public String getProvinces() { // 省市的get/set 64 return provinces; 65 } 66 67 public void setProvinces(String provinces) { 68 this.provinces = provinces; 69 } 70 71 public String getProvinceCity() { 72 return provinceCity; 73 } 74 75 public void setProvinceCity(String provinceCity) { 76 this.provinceCity = provinceCity; 77 } 78 79 public String getMy() { // 个性签名的get和set方法 80 return my; 81 } 82 83 public void setMy(String my) { 84 this.my = my; 85 } 86 87 public String getCode() { // 激活码 的get和set方法 88 return code; 89 } 90 91 public void setCode(String code) { 92 this.code = code; 93 } 94 95 public int getState() { // 激活状态 的get和set方法 96 return state; 97 } 98 99 public void setState(int i) { 100 this.state = i; 101 } 102 103 public String getSex() { // 性别 的get和set方法 104 return sex; 105 } 106 107 public void setSex(String sex) { 108 this.sex = sex; 109 } 110 111 public String getBirthday() { // 出生日期 的get和set方法 112 return birthday; 113 } 114 115 public void setBirthday(String birthday) { 116 this.birthday = birthday; 117 } 118 119 public String getEmail() { // 邮箱 的get和Set方法 120 return email; 121 } 122 123 public void setEmail(String email) { 124 this.email = email; 125 } 126 127 public String getName() { // 姓名 的get和Set方法 128 return name; 129 } 130 131 public void setName(String name) { 132 this.name = name; 133 } 134 135 public String getUid() { 136 return uid; 137 } 138 139 public void setUid(String uid) { 140 this.uid = uid; 141 } 142 143 public String getUsername() { 144 return username; 145 } 146 public void setUsername(String username) { 147 this.username = username; 148 } 149 public String getPassword() { 150 return password; 151 } 152 public void setPassword(String password) { 153 this.password = password; 154 } 155 156 @Override 157 public String toString() { 158 return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", email=" + email + ", name=" 159 + name + ", sex=" + sex + ", birthday=" + birthday + ", state=" + state + ", code=" + code + ", my=" 160 + my + "]"; 161 } 162 163 }

1 package shanhai.pojo; 2 3 public class UserTest { 4 private String userName; 5 private String passWord; 6 private String name; 7 8 public UserTest() { 9 super(); 10 } 11 12 public UserTest(String userName, String passWord, String name) { 13 super(); 14 this.userName = userName; 15 this.passWord = passWord; 16 this.name = name; 17 } 18 19 public String getName() { 20 return name; 21 } 22 23 public void setName(String name) { 24 this.name = name; 25 } 26 27 public String getUserName() { 28 return userName; 29 } 30 31 public void setUserName(String userName) { 32 this.userName = userName; 33 } 34 35 public String getPassWord() { 36 return passWord; 37 } 38 39 public void setPassWord(String passWord) { 40 this.passWord = passWord; 41 } 42 43 @Override 44 public String toString() { 45 return "UserTest [userName=" + userName + ", passWord=" + passWord + ", name=" + name + "]"; 46 } 47 }
utils包下的工具类

1 package utils; 2 3 import java.io.IOException; 4 import java.util.Map; 5 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.jsp.JspException; 8 import javax.servlet.jsp.JspWriter; 9 import javax.servlet.jsp.tagext.TagSupport; 10 11 /** 12 * 显示格式 上一页 1 2 3 4 5 下一页 13 */ 14 public class NavigationTag extends TagSupport { //只要继承这个类,就可以自定义 15 16 17 static final long serialVersionUID = 2372405317744358833L; 18 19 /** 20 * request 中用于保存Page<E> 对象的变量名,默认为“page” 21 */ 22 private String bean = "page"; 23 24 /** 25 * 分页跳转的url地址,此属性必须 26 */ 27 private String url = null; 28 29 /** 30 * 显示页码数量 31 */ 32 private int number = 5; 33 34 @Override 35 public int doStartTag() throws JspException { 36 JspWriter writer = pageContext.getOut(); 37 HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); 38 Page page = (Page)request.getAttribute(bean); 39 if (page == null) 40 return SKIP_BODY; 41 url = resolveUrl(url, pageContext); 42 try { 43 //计算总页数 44 int pageCount = page.getTotal() / page.getSize(); 45 if (page.getTotal() % page.getSize() > 0) { 46 pageCount++; 47 } 48 writer.print("<nav><ul class=\"pagination\">"); 49 //显示“上一页”按钮 50 if (page.getPage() > 1) { 51 String preUrl = append(url, "page", page.getPage() - 1); 52 preUrl = append(preUrl, "rows", page.getSize()); 53 writer.print("<li><a href=\"" + preUrl + "\">上一页</a></li>"); 54 } else { 55 writer.print("<li class=\"disabled\"><a href=\"#\">上一页</a></li>"); 56 } 57 //显示当前页码的前2页码和后两页码 58 //若1 则 1 2 3 4 5, 若2 则 1 2 3 4 5, 若3 则1 2 3 4 5, 59 //若4 则 2 3 4 5 6 ,若10 则 8 9 10 11 12 60 int indexPage = (page.getPage() - 2 > 0)? page.getPage() - 2 : 1; 61 for(int i=1; i <= number && indexPage <= pageCount; indexPage++, i++) { 62 if(indexPage == page.getPage()) { 63 writer.print( "<li class=\"active\"><a href=\"#\">"+indexPage+"<span class=\"sr-only\">(current)</span></a></li>"); 64 continue; 65 } 66 String pageUrl = append(url, "page", indexPage); 67 pageUrl = append(pageUrl, "rows", page.getSize()); 68 writer.print("<li><a href=\"" + pageUrl + "\">"+ indexPage +"</a></li>"); 69 } 70 //显示“下一页”按钮 71 if (page.getPage() < pageCount) { 72 String nextUrl = append(url, "page", page.getPage() + 1); 73 nextUrl = append(nextUrl, "rows", page.getSize()); 74 writer.print("<li><a href=\"" + nextUrl + "\">下一页</a></li>"); 75 } else { 76 writer.print("<li class=\"disabled\"><a href=\"#\">下一页</a></li>"); 77 } 78 writer.print("</nav>"); 79 } catch (IOException e) { 80 e.printStackTrace(); 81 } 82 return SKIP_BODY; 83 } 84 85 private String append(String url, String key, int value) { 86 87 return append(url, key, String.valueOf(value)); 88 } 89 90 /** 91 * 为url 参加参数对儿 92 * 93 * @param url 94 * @param key 95 * @param value 96 * @return 97 */ 98 private String append(String url, String key, String value) { 99 if (url == null || url.trim().length() == 0) { 100 return ""; 101 } 102 103 if (url.indexOf("?") == -1) { 104 url = url + "?" + key + "=" + value; 105 } else { 106 if(url.endsWith("?")) { 107 url = url + key + "=" + value; 108 } else { 109 url = url + "&" + key + "=" + value; 110 } 111 } 112 113 return url; 114 } 115 116 /** 117 * 为url 添加翻页请求参数 118 * 119 * @param url 120 * @param pageContext 121 * @return 122 * @throws javax.servlet.jsp.JspException 123 */ 124 private String resolveUrl(String url, javax.servlet.jsp.PageContext pageContext) throws JspException{ 125 //UrlSupport.resolveUrl(url, context, pageContext) 126 Map params = pageContext.getRequest().getParameterMap(); 127 for (Object key:params.keySet()) { 128 if ("page".equals(key) || "rows".equals(key)) continue; 129 Object value = params.get(key); 130 if (value == null) continue; 131 if (value.getClass().isArray()) { 132 url = append(url, key.toString(), ((String[])value)[0]); 133 } else if (value instanceof String) { 134 url = append(url, key.toString(), value.toString()); 135 } 136 } 137 return url; 138 } 139 140 141 142 /** 143 * @return the bean 144 */ 145 public String getBean() { 146 return bean; 147 } 148 149 /** 150 * @param bean the bean to set 151 */ 152 public void setBean(String bean) { 153 this.bean = bean; 154 } 155 156 /** 157 * @return the url 158 */ 159 public String getUrl() { 160 return url; 161 } 162 163 /** 164 * @param url the url to set 165 */ 166 public void setUrl(String url) { 167 this.url = url; 168 } 169 170 public void setNumber(int number) { 171 this.number = number; 172 } 173 174 }

1 package utils; 2 3 import java.util.List; 4 5 public class Page<T> { 6 7 private int total; // 总记录数,就是数据表中的总条数 8 private int page; // 当前页数,代表当前是第几页 9 private int size; // 每页显示的条数大小 10 private List<T> rows; 11 public int getTotal() { 12 return total; 13 } 14 public void setTotal(int total) { 15 this.total = total; 16 } 17 public int getPage() { 18 return page; 19 } 20 public void setPage(int page) { 21 this.page = page; 22 } 23 public int getSize() { 24 return size; 25 } 26 public void setSize(int size) { 27 this.size = size; 28 } 29 public List<T> getRows() { 30 return rows; 31 } 32 public void setRows(List<T> rows) { 33 this.rows = rows; 34 } 35 36 37 38 }
Web-INF下的tld

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE taglib 3 PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" 4 "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> 5 <taglib> 6 <tlib-version>2.0</tlib-version> 7 <jsp-version>1.2</jsp-version> 8 <short-name>common</short-name> 9 <uri>http://itcast.cn/common/</uri> 10 <display-name>Common Tag</display-name> 11 <description>Common Tag library</description> 12 13 <tag> 14 <name>page</name> 15 <tag-class>utils.NavigationTag</tag-class> 16 <body-content>JSP</body-content> 17 <description>create navigation for paging</description> 18 <attribute> 19 <name>bean</name> 20 <rtexprvalue>true</rtexprvalue> 21 </attribute> 22 <attribute> 23 <name>number</name> 24 <rtexprvalue>true</rtexprvalue> 25 </attribute> 26 <attribute> 27 <name>url</name> 28 <required>true</required> 29 <rtexprvalue>true</rtexprvalue> 30 </attribute> 31 </tag> 32 </taglib>
Linux部署Web项目, VMware + SSH Secure
Web项目部署
MySQL数据库列表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」