【JSP课程设计】实现动态网页及后台搭建--食味坊
课设要求:
自己的备忘录想法
部分预览图:
1、思维导图
2、表结构设计
2.1、User
2.2、w1200
2.3、bck5
2.4、order
3、核心代码
3.1、JSP中修改的代码
index.jsp :
1. <div class="w1200"> 2. <ul class="bck3_ul1"> 3. <% List<Dish> dlist = (List<Dish>)session.getAttribute("dList"); %> 4. <% 5. 6. Date d = new Date(); 7. SimpleDateFormat df = new SimpleDateFormat("d"); 8. String now = df.format(d); 9. int tang = Integer.valueOf(now); 10. int num = tang+3; 11. for(int i = tang ; i < dlist.size() ; i ++) { 12. if(i < num) { 13. %> 14. <li class="bck3_ul1_li1"> 15. <img class="dish" id="img1" src="<%=dlist.get(i+tang).getlSrc() %>"> 16. <div class="bck3_ul1_div"> 17. <p class="bck3_ul1_div_p1"><%=dlist.get(i+tang).getlName() %></p> 18. <p class="bck3_ul1_div_p2"><%=dlist.get(i+tang).getlContent() %></p> 19. <p class="bck3_ul1_div_p3"> 20. <span class="bck3_ul1_div_p3_span1">¥<%=dlist.get(i+tang).getlPrice1() %></span> 21. <span class="bck3_ul1_div_p3_span2">原价¥<%=dlist.get(i+tang).getlPrice2() %></span> 22. </p> 23. </div> 24. </li> 25. <% } 26. } %> 27. 28. <!-- 固定三个 --> 29. <%for(int i = 0 ; i < dlist.size() ; i ++) { 30. if(i < 3) { 31. 32. %> 33. <li class="bck3_ul1_li1"> 34. <img class="dish" id="img1" src="<%=dlist.get(i).getlSrc() %>"> 35. <div class="bck3_ul1_div"> 36. <p class="bck3_ul1_div_p1"><%=dlist.get(i).getlName() %></p> 37. <p class="bck3_ul1_div_p2"><%=dlist.get(i).getlContent() %></p> 38. <p class="bck3_ul1_div_p3"> 39. <span class="bck3_ul1_div_p3_span1"> ¥<%=dlist.get(i).getlPrice1() %></span> 40. <span class="bck3_ul1_div_p3_span2">原价¥<%=dlist.get(i).getlPrice2() %></span> 41. </p> 42. </div> 43. </li> 44. <% } 45. } %> 46. </ul> 47. </div> 48. <div class="w1200" style="overflow: hidden;"> 49. <div class="bck3_div1"><img src="../images/one_k.png"></div> 50. <a class="bck3_a" href="###" style="margin-top: -40px">查看优惠详情 ></a> 51. 52. <% List<Chef> clist = (List<Chef>)session.getAttribute("cList"); %> 53. <% 54. for(int i = 0 ; i < clist.size() ; i ++) { 55. if(i < 1) { 56. 57. %> 58. <div class="bck5_div1"> 59. <img src="<%=clist.get(0).getlSrc() %>"> 60. 61. <div class="bck5_div1_div"> 62. <p class="bck5_div1_div_p1"><%=clist.get(0).getlName() %> <%=clist.get(0).getlTitle() %></p> 63. <p class="bck5_div1_div_p2"><%=clist.get(0).getlContent() %></p> 64. </div> 65. </div> 66. 67. 68. <div class="bck5_div1" style="margin: 0 26px;"> 69. <img src="<%=clist.get(1).getlSrc() %>"> 70. <div class="bck5_div1_div"> 71. <p class="bck5_div1_div_p1"><%=clist.get(1).getlName() %> <%=clist.get(0).getlTitle() %></p> 72. <p class="bck5_div1_div_p2"><%=clist.get(1).getlContent() %></p> 73. </div> 74. </div> 75. <div class="bck5_div1"> 76. <img src="<%=clist.get(2).getlSrc() %>"> 77. <div class="bck5_div1_div"> 78. <p class="bck5_div1_div_p1"><%=clist.get(2).getlName() %> <%=clist.get(2).getlTitle() %></p> 79. <p class="bck5_div1_div_p2"><%=clist.get(2).getlContent() %></p> 80. </div> 81. </div> 82. <div class="bck5_div1" style="margin-left: 26px;"> 83. <img src="<%=clist.get(3).getlSrc() %>"> 84. <div class="bck5_div1_div"> 85. <p class="bck5_div1_div_p1"><%=clist.get(3).getlName() %> <%=clist.get(3).getlTitle() %></p> 86. <p class="bck5_div1_div_p2"><%=clist.get(3).getlContent() %></p> 87. </div> 88. </div> 89. <% } 90. } %>
fw.jsp :
1. <div class="seven_div1"> 2. <p>亲爱的顾客,如果您需要预订我们的服务,请仔细填写如下表单,我们整理和汇总信息后将尽快与您取得联系。</p> 3. <p>请尽量提前4小时预订并保持手机畅通,食味坊真诚期待为您服务。</p> 4. <form action="/Course_Design/OrderServlet" method="post"> 5. <div style="margin-top:23px;"> 6. <span>进店时间</span> 7. <input type="text" placeholder="2016年1月1日12点30分" name="otime" required/> 8. </div> 9. <div> 10. <span>联系人</span> 11. <input type="text" placeholder="小花" name="oname" required/> 12. </div> 13. <div> 14. <span>联系方式</span> 15. <input type="text" placeholder="13634575464" name="ophone" required/> 16. </div> 17. <div> 18. <span>预估人数</span> 19. <input type="text" placeholder="8人" name="onumber" required/> 20. </div> 21. <div style="line-height:14px"> 22. <span>备注</span> 23. <textarea rows="6" style="resize:none" name="omark" required> 24. </div> 25. <input class="input1" type="submit" value="提交" onclick="alert('已提交!');"> 26. </form> 27. </div> 28. 29.
Login.jsp:
30. <div class="col-md-4 col-md-push-2"> 31. <div class="fh5co-form animate-box" data-animate-effect="fadeInRight"> 32. <br> 33. <center><h2>LOGIN</h2></center> 34. <form action="${path }/loginServlet" method="post" > 35. <div class="form-group"> 36. <input type="text" class="form-control" id="username" name="username" placeholder="用户名" autocomplete="off"> 37. </div> 38. <div class="form-group"> 39. <input type="password" class="form-control" id="password" name="password" placeholder="密码" autocomplete="off"> 40. </div> 41. 42. <br> 43. 请输入验证码:<input type="text" id="code_input" name="valicode" value="" /> 44. <br> 45. <br> 46. <div id="v_container" style="width: 200px;height: 50px;margin-left:0px;"> 47. </div> 48. <input type="hidden" name="res" id="verifyCode" value=""/> 49. <div class="form-group"> 50. <br> 51. <input type="submit" id="my_button" value="登录" class="btn btn-primary"> 52. </div> 53. </form> 54. <div class="form-group "> 55. <p>没有注册用户? <a href="register.jsp">点击立即注册</a> </p> 56. </div> 57. </div> 58. </div> 59. 60. <div class="row" style="padding-top: 60px; clear: both;margin-top: 50px;"> 61. <div class="col-md-12 text-center"> 62. <p> 63. <small> 64. 版权所有-食味坊 ©2019 65. </small> 66. </p> 67. </div> 68. </div> 69. 70. <script src="../js/jquery.waypoints.min.js"></script> 71. <script src="../js/main.js"></script> 72. <script src="../js/gVerify.js"></script> 73. <script type="text/javascript" src="../js/jquery-3.3.1.js"></script> 74. <script> 75. 76. var verifyCode = new GVerify("v_container"); 77. document.getElementById("my_button").onclick = function(){ 78. var res = verifyCode.validate(document.getElementById("code_input").value); 79. document.getElementById("verifyCode").value=res; 80. } 81. </script>
Register.jsp:
1. <div class="col-md-4 col-md-push-2"> 2. 3. <div class="fh5co-form animate-box" data-animate-effect="fadeInRight"> 4. <center><h2>Register</h2></center> 5. <hr style="margin-top: -20px;" /> 6. <input id="display" type="text" value="" style="display: none"> 7. <form action="${pageContext.request.contextPath}/RegistServlet" id="RegistForm" method="post"> 8. <div class="form-group"> 9. <input type="text" class="form-control" id="username" name="username" placeholder="用户名" autocomplete="off" required> 10. </div> 11. <div class="form-group"> 12. <input type="password" class="form-control" id="password" name="password" placeholder="密码" autocomplete="off" required> 13. </div> 14. <div class="form-group"> 15. <input type="password" class="form-control" id="re-password" name="re-password" placeholder="重复密码" autocomplete="off" required> 16. </div> 17. <div class="form-group"> 18. <input type="email" class="form-control" id="email" name="email" placeholder="请填写邮箱地址..." required> 19. </div> 20. <div class="form-group"> 21. <input type="text" class="form-control" id="code" name="code" placeholder="验证码" style="float: left;width: 110px;" required /> 22. <input type="button" name="btn" id="btn" class="btn btn-primary" value="点击获取验证码" style="margin-left: 40px;"/> 23. </div> 24. <span id="notice" class="hide">请先完成邮箱验证</span><br /> 25. <label> 26. <input type="checkbox" id="check" name="check" required> 我已认真阅读并同意《<a href="agreement.html" target="_blank">食味坊会员协议</a>》 27. </label> 28. <br> 29. <br> 30. 31. <div class="form-group"> 32. <input value="注册" class="btn btn-primary" type="submit" id="submit" > 33. </div> 34. </form> 35. <div class="form-group"> 36. <p>是否存在账号? | 存在就登录啊-><a href="html/login.jsp">点我啊</a></p> 37. </div> 38. 39. </div> 40. 41. 42. </div> 43. </div> 44. <div class="row" style="padding-top: 60px; clear: both;margin-top: 50px;"> 45. <div class="col-md-12 text-center"> 46. <p> 47. <small> 48. 版权所有-食味坊 ©2019 49. </small> 50. </p> 51. </div> 52. </div> 53. </div> 54. <script src="js/jquery.waypoints.min.js"></script> 55. <script src="js/main.js"></script> 56. <script src="js/jquery-3.3.1.js"></script> 57. <script type="text/javascript"> 58. $(function(){ 59. $("#btn").click(function(){ 60. if($("#email").val()){ 61. $.ajax({ 62. type:"POST", 63. url :"SendEmailServlet?random"+Math.random(), 64. data:{ 65. email:$("#email").val(), 66. }, 67. success:function(data){ 68. alert("验证码发送成功,请注意查收。"); 69. }, 70. }) 71. }else{ 72. alert("邮箱发送失败"); 73. $("#notice").html("请填写邮箱"); 74. setTimeout(function(){ 75. $("#notice").hide(); 76. },1000); 77. } 78. } 79. ); 80. }); 81. </script>
usersManage.jsp :
1. <header> 2. <div class='navbar'> 3. <div class='navbar-inner'> 4. <div class='container-fluid'> 5. <a class='brand' href='index.jsp'> 6. <i class='icon-heart-empty'></i> 7. <span class='hidden-phone title'>食味坊</span> 8. </a> 9. <a class='toggle-nav btn pull-left' href='#'> 10. <i class='icon-reorder'></i> 11. </a> 12. <ul class='nav pull-right'> 13. <li class='dropdown dark user-menu'> 14. <a class='dropdown-toggle' data-toggle='dropdown' href='#'> 15. <img alt='Mila Kunis' height='23' src='assets/images/avatar.jpg' width='23' /> 16. <span class='user-name hidden-phone'>欢迎</span> 17. <b class='caret'></b> 18. </a> 19. <ul class='dropdown-menu'> 20. <li> 21. <a href='login.html'> 22. <i class='icon-signout'></i> 23. 退出登录 24. </a> 25. </li> 26. </ul> 27. </li> 28. </ul> 29. </div> 30. </div> 31. </div> 32. </header> 33. <div id='wrapper'> 34. <div id='main-nav-bg'></div> 35. <nav class='' id='main-nav'> 36. <div class='navigation'> 37. <ul class='nav nav-stacked'> 38. <li class='active'> 39. <a href='index.jsp'> 40. <i class='icon-dashboard'></i> 41. <span>后台首页</span> 42. </a> 43. </li> 44. <li class=''> 45. <a class='dropdown-collapse' href='#'> 46. <i class='icon-edit'></i> 47. <span>用户管理</span> 48. <i class='icon-angle-down angle-down'></i> 49. </a> 50. <ul class='nav nav-stacked'> 51. <li class=''> 52. <a href='/Course_Design/ShowManagerServlet'> 53. <i class='icon-caret-right'></i> 54. <span>管理员管理</span> 55. </a> 56. </li> 57. <li class=''> 58. <a href='/Course_Design/ShowUserServlet'> 59. <i class='icon-caret-right'></i> 60. <span>普通用户管理</span> 61. </a> 62. </li> 63. </ul> 64. </li> 65. <li> 66. <a class='dropdown-collapse ' href='#'> 67. <i class='icon-cogs'></i> 68. <span>后台操作</span> 69. <i class='icon-angle-down angle-down'></i> 70. </a> 71. <ul class='nav nav-stacked'> 72. <li class=''> 73. <a href='/Course_Design/ShowDishServlet'> 74. <i class='icon-pencil'></i> 75. <span>更新菜品</span> 76. </a> 77. </li> 78. <li class=''> 79. <a href='/Course_Design/ShowOrderServlet'> 80. <i class='icon-list-ul'></i> 81. <span>查看订单</span> 82. </a> 83. </li> 84. </ul> 85. </li> 86. </ul> 87. </div> 88. </nav> 89. <section id='content'> 90. <div class='container-fluid'> 91. <div class='row-fluid' id='content-wrapper'> 92. <div class='span12'> 93. <div class='row-fluid'> 94. <div class='span12'> 95. <div class='page-header'> 96. <h1 class='pull-left'> 97. <i class='icon-pencil'></i> 98. <span>用户管理</span> 99. </h1> 100. <div class="stangcontainer"> 101. <form action="/Course_Design/SelectUserServlet" method="post" class="stangparent"> 102. <input type="text" class="tangsearch" id="serach" name="search" placeholder="搜索" style=" border-radius:18px;"> 103. <input type="submit" name="" id="" class="stangbtn" value=""> 104. </form> 105. </div> 106. </div> 107. </div> 108. </div> 109. <div class='alert alert-info'> 110. <a class='close' data-dismiss='alert' href='#'>×</a> 111. 欢迎来到 112. <strong>食味坊</strong> 113. 用户管理页面,请进行合理操作。 114. </div> 115. <div class='row-fluid'> 116. <div class='clearfix'></div> 117. <table class='table table-bordered table-striped' id='inplaceediting-user' style='margin-top: 20px'> 118. <tbody id="alluser"> 119. <tr> 120. <td style='width:15%'>序号</td> 121. <td style='width:35%'>用户名</td> 122. <td style='width:25%'>密码</td> 123. <td>操作</td> 124. </tr> 125. <c:forEach items="${uList}" var="usr" varStatus="idx"> 126. <tr> 127. <td style='width:15%'>${idx.index+1}</td> 128. <td style='width:35%'>${usr.username}</td> 129. <td style='width:25%'>${usr.password}</td> 130. <td> 131. <a href="/Course_Design/UpGradeServlet?update_id=${usr.id}"> 132. <input type="button" value="授权" onclick="confirm('确定要对此用户进行授权吗?')"></a> 133. 134. <a href="/Course_Design/delUserServlet?delete_id=${usr.id}"> 135. <input type="button" value="删除" onclick="confirm('确定要删除此用户吗?')"></a> 136. 137. <a href="/Course_Design/html/personalCenter.jsp"> 138. <input type="button" value="个人资料" ></a> 139. </td> 140. </tr> 141. </c:forEach> 142. </tbody> 143. </table> 144. <hr class='hr-normal' /> 145. </div> 146. </div> 147. </div> 148. </div> 149. </section> 150. </div>
updateDish.jsp :
1. <div class='alert alert-info'> 2. <a class='close' data-dismiss='alert' href='#'>×</a> 3. 欢迎来到 4. <strong>食味坊</strong> 5. 菜单管理页面,请进行合理操作。 6. </div> 7. <div class='row-fluid'> 8. <div class='clearfix'></div> 9. <table class='table table-bordered table-striped' id='inplaceediting-user' style='margin-top: 20px'> 10. <tbody id="alladmin"> 11. <tr> 12. <td style='width:10%'>序号</td> 13. <td style='width:20%'>菜名</td> 14. <td style='width:25%'>菜品介绍</td> 15. <td style='width:15%'>折扣价</td> 16. <td style='width:15%'>原价</td> 17. <td>操作</td> 18. </tr> 19. <c:forEach items="${DList}" var="dis" varStatus="idx"> 20. <tr> 21. <td style='width:10%'>${idx.index+1}</td> 22. <td style='width:20%'><img class="dish" id="img1" src="${dis.lSrc}"> 23. ${dis.lName}</td> 24. <td style='width:25%'>${dis.lContent}</td> 25. <td style='width:15%'>${dis.lPrice1}</td> 26. <td style='width:15%'>${dis.lPrice2}</td> 27. <td> 28. <a href="/Course_Design/editDishServlet?update_id=${dis.id}"> 29. <input type="button" value="修改" onclick="confirm('确定要修改该菜品的信息吗?')"></a> 30. 31. <a href="/Course_Design/delDishServlet?delete_id=${dis.id}"> 32. <input type="button" value="删除" onclick="confirm('确定要删除此菜品吗?')"></a> 33. 34. </td> 35. </tr> 36. </c:forEach> 37. </tbody> 38. </table> 39. <hr class='hr-normal' /> 40. </div>
3.2、Servlet程序代码
LoginServlet :
1. public class LoginServlet extends HttpServlet { 2. private static UserService service = new UserService(); 3. 4. @Override 5. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 6. 7. response.setContentType("text/html,charset=GBK"); 8. response.setCharacterEncoding("GBK"); 9. 10. PrintWriter out = response.getWriter(); 11. 12. String uname = request.getParameter("username") == null ? "" : request.getParameter("username"); 13. String pw = request.getParameter("password") == null ? "" : request.getParameter("password"); 14. String valicode = request.getParameter("valicode") == null ? "" : request.getParameter("valicode"); 15. String res = request.getParameter("res"); 16. 17. if("".equals(uname) || "".equals(pw)) { 18. out.println("<script>alert('用户名/密码不得为空!');window.history.back(-1);</script>"); 19. 20. System.out.println("用户名/密码不得为空!"); 21. } else if("".equals(valicode)){ 22. out.println("<script>alert('验证码不得为空!');window.history.back(-1);</script>"); 23. }else{ 24. // 判断用户名、密码是否是正确的 25. // 可以通过页面输入的用户名及密码查询到某条数据就可以了。 26. // 检索数据库时有能查到多条记录。不允许登录。 27. // 给用户名添加唯一约束。unique 28. User user = new User(); 29. user.setUsername(uname); 30. user.setPassword(pw); 31. try { 32. List<User> uList = service.userCheck(user); 33. 34. if(uList.size() == 0){ 35. // 没有查到记录 36. out.write("<script>alert('用户名/密码错误!');window.history.back(-1);</script>"); 37. } else if (uList.size() == 1) { 38. // 正常处理,允许登录 39. if("true".equals(res)){ 40. user = uList.get(0); 41. HttpSession session = request.getSession(); 42. session.setAttribute("user", user); 43. if("admin".equals(uname)){ 44. out.write("<script>alert('管理员用户登录成功!')</script>"); 45. response.sendRedirect(request.getServletContext().getContextPath()+"/Backstage/index.jsp"); 46. }else{ 47. out.write("<script>alert('登录成功!')</script>"); 48. response.sendRedirect(request.getServletContext().getContextPath()+"/html/login_success.jsp"); 49. } 50. }else{ 51. out.write("<script>alert('验证码输入错误,请重新输入!');window.history.back(-1);</script>"); 52. } 53. } else { 54. // 查询到了多条记录 55. out.write("<script>alert('用户异常,请与管理员联系!');window.history.back(-1);"); 56. } 57. 58. }catch(Exception ex) { 59. ex.printStackTrace(); 60. } 61. 62. 63. } 64. out.flush(); 65. out.close(); 66. 67. }
IndexServlet:
1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2. List<Dish> dList = new ArrayList<Dish>(); 3. //1. Dish 查询数据库 4. try { 5. Class.forName(Const.MYSQL_DRIVER); 6. Const.CONN =DriverManager.getConnection( 7. Const.MYSQL_URL, 8. Const.MYSQL_USERNAME, 9. Const.MYSQL_PASSWORD 10. ); 11. 12. String sql = "select * from w1200"; 13. 14. Const.PS = Const.CONN.prepareStatement(sql); 15. Const.RS = Const.PS.executeQuery(); 16. 17. while(Const.RS.next()) { 18. Dish d = new Dish(); 19. d.setId(Const.RS.getInt("id")); 20. d.setlName(Const.RS.getString("lname")); 21. d.setlContent(Const.RS.getString("lcontent")); 22. d.setlPrice1(Const.RS.getDouble("lprice1")); 23. d.setlPrice2(Const.RS.getDouble("lprice2")); 24. d.setlSrc(Const.RS.getString("lsrc")); 25. d.setlType(Const.RS.getString("ltype")); 26. 27. dList.add(d); 28. } 29. 30. }catch( Exception ex) { 31. ex.printStackTrace(); 32. } finally { 33. Const.close(); 34. } 35. HttpSession session = request.getSession();//session存值,所有页面都可以获取,不用担心取不到值的问题 36. session.setAttribute("dList", dList); 37. 38. List<Chef> cList = new ArrayList<Chef>(); 39. //厨师 40. try { 41. Class.forName(Const.MYSQL_DRIVER); 42. Const.CONN =DriverManager.getConnection( 43. Const.MYSQL_URL, 44. Const.MYSQL_USERNAME, 45. Const.MYSQL_PASSWORD 46. ); 47. String sql = "select * from bck5"; 48. 49. Const.PS = Const.CONN.prepareStatement(sql); 50. Const.RS = Const.PS.executeQuery(); 51. 52. while(Const.RS.next()) { 53. Chef c = new Chef(); 54. c.setId(Const.RS.getInt("id")); 55. c.setlName(Const.RS.getString("lname")); 56. c.setlTitle(Const.RS.getString("ltitle")); 57. c.setlContent(Const.RS.getString("lcontent")); 58. c.setlSrc(Const.RS.getString("lsrc")); 59. 60. cList.add(c); 61. } 62. 63. 64. 65. }catch( Exception ex) { 66. ex.printStackTrace(); 67. } finally { 68. Const.close(); 69. } 70. HttpSession session1 = request.getSession();//session存值,所有页面都可以获取,不用担心取不到值的问题 71. session1.setAttribute("cList", cList); 72. 73. response.sendRedirect(request.getServletContext().getContextPath()+"/html/index.jsp"); 74. 75. }
RegisterServlet:
1. protected void doPost(HttpServletRequest request, HttpServletResponse response) 2. throws ServletException, IOException { 3. response.setContentType("text/html,charset=GBK"); 4. response.setCharacterEncoding("GBK"); 5. 6. PrintWriter out = response.getWriter(); 7. // 获取session中的验证码 8. String sessionCode = (String) request.getSession().getAttribute("code"); 9. System.out.println(sessionCode); 10. 11. String uname = request.getParameter("username"); 12. String pw = request.getParameter("password"); 13. String rpw = request.getParameter("re-password"); 14. String check = request.getParameter("check") == null ? "" : request.getParameter("check"); 15. 16. if(!pw.equals(rpw)){ 17. out.println("<script>alert('两次密码输入不一致,请及时更改!');window.history.back(-1);</script>"); 18. }else{ 19. 20. if(sessionCode != null) { 21. // 获取页面提交的验证码 22. String inputCode = request.getParameter("code"); 23. System.out.println("页面提交的验证码:" + inputCode); 24. 25. User user = new User(); 26. user.setUsername(uname); 27. user.setPassword(pw); 28. 29. if (sessionCode.toLowerCase().equals(inputCode.toLowerCase())) { 30. 31. try { 32. List<User> uList = service.userCheck1(user); 33. 34. if(uList.size() == 0){ 35. // 正常处理,允许注册 36. boolean addFlag = service.addUser(user); 37. // 验证成功,跳转成功页面 38. response.sendRedirect(request.getServletContext().getContextPath()+"/html/loading.jsp"); 39. 40. } else if (uList.size() > 0) { 41. out.write("<script>alert('该用户已被注册,请及时更换用户名!');window.history.back(-1);</script>"); 42. 43. } else { 44. // 查询到了多条记录 45. out.write("<script>alert('用户异常,请与管理员联系!');window.history.back(-1);"); 46. } 47. 48. }catch(Exception ex) { 49. ex.printStackTrace(); 50. } 51. }else { 52. // 验证失败 53. request.getRequestDispatcher("/html/fail.jsp").forward(request, response); 54. } 55. }else { 56. // 验证失败 57. request.getRequestDispatcher("/html/fail.jsp").forward(request, response); 58. } 59. // 移除session中的验证码 60. request.removeAttribute("code"); 61. } 62. }
AddDishServlet:
1. DishService service = new DishService(); 2. @Override 3. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 4. 5. response.setContentType("text/html,charset=GBK"); 6. response.setCharacterEncoding("GBK"); 7. request.setCharacterEncoding("utf-8"); 8. 9. PrintWriter out = response.getWriter(); 10. 11. // 1. 获取页面数据 12. String dname = request.getParameter("dname"); 13. String dcontent = request.getParameter("dcontent"); 14. Double dprice1 = Double.parseDouble(request.getParameter("dprice1")); 15. Double dprice2 = Double.parseDouble(request.getParameter("dprice2")); 16. String dsrc = request.getParameter("dsrc"); 17. 18. Dish dish = new Dish(dname,dcontent,dprice1,dprice2,dsrc); 19. 20. boolean addFlag = service.addDish(dish); 21. // 验证成功,跳转成功页面 22. if(addFlag){ 23. response.sendRedirect(request.getServletContext().getContextPath()+"/ShowDishServlet"); 24. }else{ 25. out.write("<script>alert('提交失败!');window.history.back(-1);</script>;"); 26. } 27. } DelDishServlet: 1. private DishService service = new DishService(); 2. 3. @Override 4. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 5. // 获取要删除学生ID主键 6. int did = Integer.parseInt(request.getParameter("delete_id").toString()); 7. boolean flag = service.delDish(did); 8. 9. HttpSession session = request.getSession(); 10. 11. response.sendRedirect(request.getServletContext().getContextPath() + "/ShowDishServlet"); 12. } EditDishPojoServlet: 1. private DishService service = new DishService(); 2. protected void doPost( 3. HttpServletRequest request, 4. HttpServletResponse response) 5. throws ServletException, IOException { 6. response.setContentType("text/html,charset=GBK"); 7. response.setCharacterEncoding("GBK"); 8. request.setCharacterEncoding("utf-8"); 9. 10. PrintWriter out = response.getWriter(); 11. // 1. 获取页面数据 12. String dname = request.getParameter("dname"); 13. String dcontent = request.getParameter("dcontent"); 14. Double dprice1 = Double.parseDouble(request.getParameter("dprice1")); 15. Double dprice2 = Double.parseDouble(request.getParameter("dprice2")); 16. String dsrc = request.getParameter("dsrc"); 17. Integer id = Integer.parseInt(request.getParameter("id")); 18. // 2. 封装对象 19. Dish dish = new Dish(id,dname,dcontent,dprice1,dprice2,dsrc); 20. // 3. 进行修改 21. boolean flag = service.updDish(dish); 22. if(flag){ 23. // 4. 重定向 24. response.sendRedirect(request.getServletContext().getContextPath() + "/ShowDishServlet"); 25. }else{ 26. out.write("<script>alert('修改失败!');window.history.back(-1);</script>;"); 27. } 28. }
SelectDishServlet:
1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2. 3. response.setContentType("text/html,charset=GBK"); 4. response.setCharacterEncoding("GBK"); 5. request.setCharacterEncoding("utf-8"); 6. 7. PrintWriter out = response.getWriter(); 8. String uname = request.getParameter("search") == null ? "" : request.getParameter("search"); 9. 10. if("".equals(uname)){ 11. response.sendRedirect(request.getServletContext().getContextPath()+"/ShowDishServlet"); 12. }else{ 13. List<Dish> DList = new ArrayList<Dish>(); 14. 15. try { 16. Class.forName(Const.MYSQL_DRIVER); 17. Const.CONN =DriverManager.getConnection( 18. Const.MYSQL_URL, 19. Const.MYSQL_USERNAME, 20. Const.MYSQL_PASSWORD 21. ); 22. 23. String sql = "select * from w1200 where lname like ? " ; 24. 25. Const.PS = Const.CONN.prepareStatement(sql); 26. 27. Const.PS.setString(1,"%"+uname+"%"); 28. Const.RS = Const.PS.executeQuery(); 29. 30. while(Const.RS.next()) { 31. Dish D = new Dish(); 32. D.setId(Const.RS.getInt("id")); 33. D.setlName(Const.RS.getString("lname")); 34. D.setlContent(Const.RS.getString("lcontent")); 35. D.setlPrice1(Const.RS.getDouble("lprice1")); 36. D.setlPrice2(Const.RS.getDouble("lprice2")); 37. D.setlSrc(Const.RS.getString("lsrc")); 38. D.setlType(Const.RS.getString("ltype")); 39. 40. DList.add(D); 41. } 42. 43. }catch( Exception ex) { 44. ex.printStackTrace(); 45. } finally { 46. Const.close(); 47. } 48. HttpSession session = request.getSession();//session存值,所有页面都可以获取,不用担心取不到值的问题 49. session.setAttribute("DList",DList); 50. response.sendRedirect(request.getServletContext().getContextPath()+"/Backstage/updateDish.jsp"); 51. 52. } 53. 54. }
SendEmailServlet:
1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2. // 收件人电子邮箱 3. String to = request.getParameter("email"); 4. // 发件人电子邮箱 5. String from = "771256102@qq.com"; 6. 7. // 指定发送邮件的主机为 smtp.qq.com 8. String host = "smtp.qq.com"; //QQ 邮件服务器 9. 10. // 获取系统属性 11. Properties properties = System.getProperties(); 12. 13. // 设置邮件服务器 14. properties.setProperty("mail.smtp.host", host); 15. 16. properties.put("mail.smtp.auth", "true"); 17. MailSSLSocketFactory sf = null; 18. try { 19. sf = new MailSSLSocketFactory(); 20. } catch (GeneralSecurityException e) { 21. e.printStackTrace(); 22. } 23. sf.setTrustAllHosts(true); 24. properties.put("mail.smtp.ssl.enable", "true"); 25. properties.put("mail.smtp.ssl.socketFactory", sf); 26. // 获取默认session对象 27. Session session = Session.getDefaultInstance(properties,new Authenticator(){ 28. public PasswordAuthentication getPasswordAuthentication() 29. { 30. return new PasswordAuthentication("771256102@qq.com", "ssznzndqynosbajj"); //发件人邮件用户名、密码 31. } 32. }); 33. 34. try{ 35. // 创建默认的 MimeMessage 对象 36. MimeMessage message = new MimeMessage(session); 37. 38. // Set From: 头部头字段 39. message.setFrom(new InternetAddress(from)); 40. 41. // Set To: 头部头字段 42. message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 43. 44. // Set Subject: 头部头字段 45. message.setSubject("请仔细查看验证码"); 46. 47. // 设置消息体 48. int intFlag = (int)(Math.random() * 1000000); 49. message.setText("验证码为"+intFlag); 50. 51. // 发送消息 52. Transport.send(message); 53. response.getWriter().print(intFlag); 54. }catch (MessagingException mex) { 55. mex.printStackTrace(); 56. } 57. }
ShowDishServlet:
1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2. List<Dish> DList = new ArrayList<Dish>(); 3. //1. User 查询数据库 4. try { 5. Class.forName(Const.MYSQL_DRIVER); 6. Const.CONN =DriverManager.getConnection( 7. Const.MYSQL_URL, 8. Const.MYSQL_USERNAME, 9. Const.MYSQL_PASSWORD 10. ); 11. 12. String sql = "select * from w1200"; 13. 14. Const.PS = Const.CONN.prepareStatement(sql); 15. Const.RS = Const.PS.executeQuery(); 16. 17. while(Const.RS.next()) { 18. Dish D = new Dish(); 19. D.setId(Const.RS.getInt("id")); 20. D.setlName(Const.RS.getString("lname")); 21. D.setlContent(Const.RS.getString("lcontent")); 22. D.setlPrice1(Const.RS.getDouble("lprice1")); 23. D.setlPrice2(Const.RS.getDouble("lprice2")); 24. D.setlSrc(Const.RS.getString("lsrc")); 25. D.setlType(Const.RS.getString("ltype")); 26. 27. DList.add(D); 28. } 29. 30. 31. }catch( Exception ex) { 32. ex.printStackTrace(); 33. } finally { 34. Const.close(); 35. } 36. HttpSession session = request.getSession();//session存值,所有页面都可以获取,不用担心取不到值的问题 37. session.setAttribute("DList", DList); 38. response.sendRedirect(request.getServletContext().getContextPath()+"/Backstage/updateDish.jsp"); 39. } UpGradeServlet: 1. private UserService service = new UserService(); 2. @Override 3. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 4. // 获取要授权学生ID主键 5. int uid = Integer.parseInt(request.getParameter("update_id").toString()); 6. boolean flag = service.upUser(uid); 7. 8. HttpSession session = request.getSession(); 9. 10. response.sendRedirect(request.getServletContext().getContextPath() + "/ShowManagerServlet"); 11. }
3.3、重要的配置文件代码
web.xml:
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_3_0.xsd" id="WebApp_ID" version="3.0"> 3. <display-name>Course_Design</display-name> 4. <servlet> 5. <servlet-name>addUserServlet</servlet-name> 6. <servlet-class>com.tang.action.AddUserServlet</servlet-class> 7. </servlet> 8. <servlet-mapping> 9. <servlet-name>addUserServlet</servlet-name> 10. <url-pattern>/addUserServlet</url-pattern> 11. </servlet-mapping> 12. <servlet> 13. <servlet-name>loginServlet</servlet-name> 14. <servlet-class>com.tang.action.LoginServlet</servlet-class> 15. </servlet> 16. <servlet-mapping> 17. <servlet-name>loginServlet</servlet-name> 18. <url-pattern>/loginServlet</url-pattern> 19. </servlet-mapping> 20. </web-app> 21. @WebServlet(urlPatterns ="/addDishServlet") 22. @WebServlet("/DeGradeServlet") 23. @WebServlet(urlPatterns ="/delDishServlet") 24. @WebServlet(urlPatterns ="/delOrderServlet") 25. @WebServlet(urlPatterns ="/delUserServlet") 26. @WebServlet(urlPatterns ="/editDishPojoServlet") 27. @WebServlet(urlPatterns ="/editDishServlet") 28. @WebServlet(urlPatterns ="/IndexServlet") 29. @WebServlet(urlPatterns ="/OrderServlet") 30. @WebServlet("/SelectDishServlet") 31. @WebServlet("/SelectManagerServlet") 32. @WebServlet("/SelectUserServlet") 33. @WebServlet(name = "SendEmailServlet",urlPatterns = "/email") 34. @WebServlet("/ShowDishServlet") 35. @WebServlet("/ShowManagerServlet") 36. @WebServlet("/ShowOrderServlet") 37. @WebServlet("/ShowUserServlet") 38. @WebServlet("/UpGradeServlet")
4、心得体会
JSP的全称Java Server Pages,它是一种动态网页技术。我们需要配置的环境有JDK,Tomcat,还需要用到一些网页编辑器,比如Dreamweaver,visual studio code。JSP是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态技术标准。我从大一加入软协开始首先接触了web前端,用HTML做出一个又一个页面,心里略微有些成就感,后来到了大二学做动态网站,学习JSP,掌握JSP内部对象以及内部对象所对应的一些方法,再就是JSP与数据库的联系,怎么样引用数据库。
经过了两个星期的努力,我终于完成了项目1中我一开始想要实现的功能,这个项目1基本上实现了一般网站的功能,但由于经验不足,很多地方没有做到最好,而是用了一些比较麻烦的办法来替代,这算是一个缺陷和遗憾了。不过我一定会继续努力,学会更多更好用的技术。总的来说,在做这个网页的过程中,我从csdn查阅大量的相关资料,也百度了大量的相关技术,利用思维导图,一步一步的实现自己想要的功能,从需求分析,到数据库设计,再到编码,调试运行等步骤进行,这些经验对我来说非常宝贵。
5、遇到的问题与思考
- 网页设计课程之《”信息中心”网站的搭建》-网站布局和实现(二)
- 运维笔记22 (apache的基本配置,静态网页,动态cgi,论坛搭建,squid实现正向,反向代理,简易cdn加速)
- jsp实现将动态网页转换成静态页面的方法
- jsp 实现动态网页开发 登录小例子
- Ajax调用后台action返回JSONArray(JSONObject)类型实现jsp中下拉列表的动态显示
- JSP+Servlet+JavaBean实现登录网页设计
- 在网页中利用javascript实现动态时间的设计
- JAVASCRIPT + PHP 应用二:网页设计中树形菜单的动态实现
- 网页设计课程之《”信息中心”网站的搭建》-心得分享(三)
- 使用jsp+servlet+mysql+tomcat实现登录网页设计
- java jsp+servlet实现登录网页设计
- JSP第九次课:网上商城后台--首页设计及管理员功能实现
- 用JSP+Servlet+JavaBean模式实现一个简单的登录网页设计(JSP+Tomcat+MySQL)
- 在LAMP环境下搭建JSP动态网页
- 在LAMP环境下搭建JSP动态网页
- java jsp+servlet+mysql实现登录网页设计
- JavaScript + PHP 应用二:网页设计中树形菜单的动态实现
- jsp 实现动态网页开发 登录小例子
- jsp实现将动态网页转换成静态页面的方法
- 【教程视频】HTML5与CSS3与JavaScript实现动态网页系列课程+项目实战