日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

书城项目第三阶段及其源码

發布時間:2023/12/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 书城项目第三阶段及其源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

書城項目第三階段

  • 1.第三階段:
    • 頁面樣式
      • 首頁
      • 登錄
      • 登錄成功
      • 注冊
      • 注冊成功
    • a) 頁面jsp動態化
      • 所有需要的jar包
  • index.jsp
  • 源碼pages目錄下
    • user
      • login.jsp
      • login_success.jsp
      • regist.jsp
      • regist_success.jsp
    • cart包
      • cart.jsp
      • checkout.jsp
    • manager包
      • book_edit.jsp
      • book_manager.jsp
      • manager.jsp
      • order_manager.jsp
    • order
      • order.jsp
    • b)抽取頁面中相同的內容
      • common包 在pages下新建
        • i. head 中css、 jquery、base標簽
          • head.jsp
        • ii.每個頁面的頁腳
          • footer.jsp
        • iii.登錄成功后的菜單
          • login_sucess_menu.jsp
        • iv. manager模塊的菜單
          • manager_menu.jsp
    • c)登錄,注冊錯誤提示,及表單回顯
    • d) BaseServlet的抽取
      • 代碼優化一:合并LoginServlet和RegistServlet程序為UserServlet
      • 代碼優化二:使用反射優化到了else if 代碼
      • UserServletTest test包下測試類
      • 抽取BaseServlet程序
        • BaseServlet
    • e)數據的封裝和抽取BeanUtis的使用
      • WebUtils 在Utils包下
      • UserServlet 在web包下

1.第三階段:

頁面樣式

首頁

登錄

登錄成功

注冊

注冊成功

a) 頁面jsp動態化

注意導jsp和EL表達式有關的jar包,以及配置

所有需要的jar包

注意collections要用3.x的,不能是4.x的

1、在html頁面頂行添加page指令
2、修改文件后綴名為.jsp
3、使用IDEA搜索替換.html為.jsp(快捷鍵Ctrl+Shift+R)

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>書城首頁</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%></head> <body><div id="header"><img class="logo_ing" alt="" src="static/img/logo.gif"><span class= "wel_word">網上書城</span><div><a href="pages/user/login.jsp">登錄</a><a href="pages/user/regist.jsp">注冊</a><a href="pages/cart/cart.jsp">購物車</a><a href="pages/manager/manager.jsp">后臺管理</a></div><div id="main"><div id="book"><div class="book_cond"><form action="" method="get">價格:<input id="min" type="text" name="min" valuen="">元-<input id="max" type="text" name="max" value=""><input type="submit" value="查詢"/></form></div><div style="..."><span>您的購物車中有3件商品</span><div>您剛剛將<span style="...">時間簡史</span>加入到了購物車中</div></div><div class="b_list"><div class="img_div"><img class="book_img" alt="static/img/default.jpg"/></div><div class="book_info"><div class="book_name"><span class="sp1">書名:</span><span class="sp2">時間簡史</span></div><div class="book_author"><span class="sp1">作者:</span><span class="sp2">霍金</span></div><div class= "book_price"><span class="sp1">價格:</span><span class="sp2">¥30.00</span></div><div class="book_sales"><span class="sp1">銷量:</span><span class="sp2">230</span></div><div class="book_amount"><span class="sp1">庫存:</span><span class="sp2">1000</span></div><div class="book_add"><button>加入購物車:</button></div></div></div></div><div id="page_nav"><a href="#">首頁</a><a href="#">上一頁</a><a href="">3</a>【4】<a href="#">5</a><a href="#">下一頁</a><a href="#">末頁</a>共10頁,30條記錄 到第<input value="4" name="pn" id="pn_input"/><input type="button" value="確定"></div></div></div><%--靜態包含頁腳內容--%><%@include file="/pages/common/footer.jsp"%></body> </html>

源碼pages目錄下

user

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>尚硅谷會員登錄頁面</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%></head> <body><div id="login_header"><img class="logo_img" alt="" src="static/img/logo.gif" ></div><div class="login banner"><div id="l_content"><span class="login_word">歡迎登錄</span></div><div id="content"><div class="login_form"><div class="login_box"><div class="tit"><h1>尚硅谷會員</h1><a href="pages/user/regist.jsp">立即注冊</a></div><div class="msg_cont"><b></b><span class="errorMsg"><%=request.getAttribute("msg")==null?"請輸入用戶名和密碼":request.getAttribute("msg")%><%-- 請輸入用戶名和密碼--%></span></div><div class="form"><form action="userServlet" method="post"><input type="hidden" name="action" value="login"/><label>用戶名稱:</label><input class="itxt" type="text" placeholder="請輸入用戶名"autocomplete="off" tabindex="1" name="username"value="<%=request.getAttribute("username")==null?"":request.getAttribute("username")%>"/><br/><br/><label>用戶密碼:</label><input class="itxt" type="password" placeholder="請輸入密碼" autocomplete="off" tabindex="1" name="password"/><br/><br/><input type="submit" value="登錄" id="sub_btn"/></form></div></div></div></div></div><%--靜態包含頁腳內容--%><%@ include file="/pages/common/footer.jsp" %></body> </html>

login_success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>尚硅谷會員登錄</title><style type="text/css">h1{text-align: center;margin-top: 200px;}h1 a {color: red;}</style> </head> <body> <div id="header"><img class="logo_img" alt="" src="static/img/logo.gif"><%-- 靜態包含登錄成功之后的菜單--%><%@ include file="/pages/common/login_sucess_menu.jsp"%><div id="main"><h1>歡迎回來<a href="../../index.jsp">轉到主頁</a></h1></div> </div><%--靜態包含頁腳內容--%> <%@include file="/pages/common/footer.jsp"%></body> </html>

regist.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html><html><head><meta charset="UTF-8"><title>尚硅谷會員注冊頁面</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%><script type="text/javascript">//頁面加載完成之后$(function () {//給注冊綁定單擊事件$("#sub_btn").click(function () {//驗證用戶名:必須由字母,數字下劃線組成,并且長度為5到12位//1獲取用戶名輸入框里的內容var usernameText=$("#username").val();//2創建正則表達式對象var usernamePatt=/^\w{5,12}$/;//3使test方法驗證if(!usernamePatt.test(usernameText)){//4提示用戶結果$("span.errorMsg").text("用戶名不合法!");return false;}//驗證密碼:必須由字母,數字下劃線組成,并且長度為5到12位//1獲取用戶名輸入框里的內容var passwordText=$("#password").val();//2創建正則表達式對象var passwordPatt=/^\w{5,12}$/;//3使test方法驗證if(!passwordPatt.test(passwordText)){//4提示用戶結果$("span.errorMsg").text("密碼不合法!");return false;}//驗證確認密碼:和密碼相同//1獲取確認密碼內容var repwdText=$("#repwd").val();//2和密碼相比較if (repwdText!=passwordText){//3提示用戶$("span.errorMsg").text("確認密碼和密碼不一致!");return false;}//郵箱驗證:xxxxx@xxx.com//1獲取郵箱里的內容var emailText=$("#email").val();//2創建正則表達式對象var emailPatt=/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/;//3使test方法驗證if(!emailPatt.test(emailText)){//4提示用戶結果$("span.errorMsg").text("郵箱格式不合法!");return false;}//驗證碼現在只需要驗證用戶已輸入。因為還沒講到服務器。驗證碼生成。var codeText=$("#code").val();//去掉驗證碼前后空格alert("去空格前["+codeText+"]");codeText=$.trim(codeText);alert("去空格后["+codeText+"]");if (codeText==null||codeText==""){//提示用戶結果$("span.errorMsg").text("驗證碼不能為空");return false;}$("span.errorMsg").text("");});});</script><style type="text/css">.login_form {height: 420px;margin-top: 25px;}</style></head><body><div id="login_header"><img class="logo_img" alt="" src="static/img/logo.gif"> </div><div class="login_banner"><div id="l_content"><span class="login_word">歡迎注冊</span></div><div id="content"><div class="login_form"><div class="login_box"><div class="tit"><h1>注冊尚硅谷會員</h1><span class="errorMsg"><%=request.getAttribute("msg")==null?"":request.getAttribute("msg")%></span></div><div class="form"><form action="userServlet" method="post"><input type="hidden" name="action" value="regist"/><label>用戶名稱:</label><input class="itxt" type="text" placeholder="請輸入用戶名"value="<%=request.getAttribute("username")==null?"":request.getAttribute("username")%>"autocomplete="off" tabindex="1" name="username" id="username"/><br/><br/><label>用戶密碼:</label><input class="itxt" type="password" placeholder="請輸入密碼"autocomplete="off" tabindex="1" name="password" id="password"/><br/><br/><label>確認密碼:</label><input class="itxt" type="password" placeholder="確認密碼"autocomplete="off" tabindex="1" name="repwd" id="repwd"/><br/><br/><label>電子郵件:</label><input class="itxt" type="text" placeholder="請輸入郵箱地址"value="<%=request.getAttribute("email")==null?"":request.getAttribute("email")%>"autocomplete="off" tabindex="1" name="email" id="email"/><br/><br/><label>驗證碼:</label><input class="itxt" type="text" name="code" style="..." id="code"/><img alt="" src="static/img/code.bmp" style="..."><br/><br/><input type="submit" value="注冊" id="sub_btn"/></form></div></div></div></div> </div><%--靜態包含頁腳內容--%> <%@include file="/pages/common/footer.jsp"%></body></html>

regist_success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>尚硅谷會員注冊頁面</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%><style type="text/css">h1{text-align: center;margin-top: 200px;}h1 a {color: red;}</style> </head> <body><div id="header"><img class="logo_img" alt="" src="static/img/logo.gif"><span class="wel_word"></span><%-- 靜態包含登錄成功之后的菜單--%><%@ include file="/pages/common/login_sucess_menu.jsp"%></div><div id="main"><h1>注冊成功!<a href="../../index.jsp">轉到主頁</a></h1></div><%--靜態包含頁腳內容--%><%@include file="/pages/common/footer.jsp"%></body> </html>

cart包

cart.jsp

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 02:49To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>購物車</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%></head> <body><div id="header"><img class="logo_img" alt="" src="static/img/logo.gif"><span class="wel_word">購物車</span><%-- 靜態包含登錄成功之后的菜單--%><%@ include file="/pages/common/login_sucess_menu.jsp"%></div><%--靜態包含頁腳內容--%><%@include file="/pages/common/footer.jsp"%> </body> </html>

checkout.jsp

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 02:49To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>結算頁面</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%><style type="text/css">h1 {text-align: center;margin-top: 200px;} </style> </head> <body><div id="header"><img class="logo_img" alt="" src="../../static/img/logo.gif"><span class="wel_word">結算</span><%-- 靜態包含登錄成功之后的菜單--%><%@ include file="/pages/common/login_sucess_menu.jsp"%></div><%--靜態包含頁腳內容--%><%@include file="/pages/common/footer.jsp"%> </body> </html>

manager包

book_edit.jsp

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 02:46To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>編輯圖書</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%><style type="text/css">h1 {text-align: center;margin-top: 200px;}h1 a{color:red;}input {text-align: center;}</style> <body><div id="header"><img class="logo_ing" alt="" arc="../../static/1mg/logo.gif"><span class="wel_word">編輯圖書</span><%-- 靜態包含manager 管理模塊的菜單 --%><%@ include file="/pages/common/manager_menu.jsp"%></div><div id="main"><form action="book_manager.jsp"><table><tr><td>名稱</td><td>價格</td><td>作者</td><td>銷量</td><td>庫存</td><td colspan="2">操作</td></tr><tr><td><input nane="book_name" type="text" value="時間簡史"/></td><td><input nane="book_price" type="text" value="30.00"/></td><td><input name="book_author" type="text" value="霍金"/></td><td><input name="book_sales" type="text" value="200"/></td><td><input name="book_stock" type="text" value="300"/></td><td><input type= "submit" value="提交"/></td></tr></table></form></div><%--靜態包含頁腳內容--%><%@include file="/pages/common/footer.jsp"%></body> </html>

book_manager.jsp

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 02:47To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><meta charset="UTF-8"><title>圖書管理</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%></head> <body><div id="header"><img class="logo_img" alt="" src="../../static/img/logo.gif"> <span class="wel_word">圖書管理系統</span><%-- 靜態包含manager 管理模塊的菜單 --%><%@ include file="/pages/common/manager_menu.jsp"%></div><div id="main"><table><tr><td>名稱</td><td>價格</td><td>作者</td><td>銷量</td><td>庫存</td><td colspan="2">操作</td></tr><tr><td>時間簡史</td><td>20.00</td><td>霍金</td><td>200</td><td>400</td><td><a href="book_edit.jsp">修改</a> </td><td><a href="#">刪除</a> </td></tr><tr><td>時間簡史</td><td>20.00</td><td>霍金</td><td>200</td><td>400</td><td><a href="book_edit.jsp">修改</a> </td><td><a href="#">刪除</a> </td></tr><tr><td>時間簡史</td><td>20.00</td><td>霍金</td><td>200</td><td>400</td><td><a href="book_edit.jsp">修改</a> </td><td><a href="#">刪除</a> </td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td><a href="book_edit.jsp">添加圖書</a> </td></tr></table></div><%--靜態包含頁腳內容--%><%@include file="/pages/common/footer.jsp"%></body> </html>

manager.jsp

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 02:47To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>后臺管理</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%><style type="text/css">h1{text-align: center;margin-top: 200px;}</style></head> <body><div id="header"><img class="logo_img" alt="" src="../../static/img/logo.gif"><span class="wel_word">后臺管理系統</span><%-- 靜態包含manager 管理模塊的菜單 --%><%@ include file="/pages/common/manager_menu.jsp"%></div><div><h1>歡迎管理員進入后臺管理系統</h1></div><%--靜態包含頁腳內容--%><%@include file="/pages/common/footer.jsp"%></body> </html>

order_manager.jsp

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 02:47To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head><title>訂單管理</title> </head> <body><div id="header"><img class="logo_img" alt="" src="../../static/img/logo.gif"><span class="wel_word">訂單管理系統</span><%-- 靜態包含manager 管理模塊的菜單 --%><%@ include file="/pages/common/manager_menu.jsp"%></div><div id="main"><table><tr><td>2015.04.20</td><td>20.00</td><td><a href="#">查看詳情</a></td><td>已發貨</td></tr><tr><td>2016.04.20</td><td>20.00</td><td><a href="#">查看詳情</a></td><td>已發貨</td></tr><tr><td>2015.04.20</td><td>20.00</td><td><a href="#">查看詳情</a></td><td>已發貨</td></tr><tr><td>2014.04.20</td><td>20.00</td><td><a href="#">查看詳情</a></td><td>已發貨</td></tr></table></div><%--靜態包含頁腳內容--%><%@include file="/pages/common/footer.jsp"%></body> </html>

order

order.jsp

<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 02:45To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>我的訂單</title><%--靜態包含 base標簽,css樣式,jquery文件 --%><%@ include file="/pages/common/head.jsp"%><style type="text/css">h1 {text-align: center;margin-top: 200px;} </style> </head> <body><div id="header"><img class="logo_img" alt="" src="../../static/img/logo.gif"><span class="wel_word">我的訂單</span><%-- 靜態包含登錄成功之后的菜單--%><%@ include file="/pages/common/login_sucess_menu.jsp"%></div><div id="main"><table></table></div><%--靜態包含頁腳內容--%><%@include file="/pages/common/footer.jsp"%></body> </html>

b)抽取頁面中相同的內容

common包 在pages下新建

i. head 中css、 jquery、base標簽

head.jsp
<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 03:59To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"; %><!--寫base標簽,永遠固定相對路徑跳轉的結果--> <base href="<%=basePath%>"> <link type="text/css" rel="stylesheet" href="static/css/style.css"><script type="text/javascript" src="static/script/jquery.js"></script>

ii.每個頁面的頁腳

footer.jsp
<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 04:37To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <div id="bottom"><span>尚硅谷書城.Copyright ?2015</span> </div>

iii.登錄成功后的菜單

login_sucess_menu.jsp
<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 03:51To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <div><span>歡迎<span class="um_span">韓總</span>光臨尚硅谷書城</span><a href="../order/order.jsp">我的訂單</a><a href="../../index.jsp">注銷</a><a href="../../index.jsp">返回</a> </div>

iv. manager模塊的菜單

manager_menu.jsp
<%--Created by IntelliJ IDEA.User: lenovoDate: 2021/8/21Time: 下午 05:38To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <div><a href="pages/manager/book_manager.jsp">圖書管理</a><a href="order_manager.jsp">訂單管理</a><a href="../../index.jsp">返回商城</a> </div>

c)登錄,注冊錯誤提示,及表單回顯

d) BaseServlet的抽取

代碼優化一:合并LoginServlet和RegistServlet程序為UserServlet

在實際的項目開發中,一個模塊,一般只使用一個Servlet程序。
給login.jsp頁面添加隱藏域action,和修改請求地址

給regist.jsp頁面添加隱藏域action,和修改請求地址

代碼優化二:使用反射優化到了else if 代碼

UserServletTest test包下測試類

package com.atguigu.test;import java.lang.reflect.Method;public class UserServletTest {public void login(){System.out.println("這是login()方法調用了");}public void regist(){System.out.println("這是regist()方法調用了");}public void updateUser(){System.out.println("這是updateUser()方法調用了");}public void updateUserPassword(){System.out.println("這是updateUserPassword()方法調用了");}public static void main(String[] args) {String action="regist";try {//獲取action業務鑒別字符串,獲取相應的業務方法 反射對象Method method = UserServletTest.class.getDeclaredMethod(action);System.out.println(method);//調用目標業務方法method.invoke(new UserServletTest());} catch (Exception e) {e.printStackTrace();}}}

抽取BaseServlet程序

其他xxxServlet繼承BaseServlet即可

BaseServlet

package com.atguigu.web;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Method;public abstract class BaseServlet extends HttpServlet {protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String action=req.getParameter("action"); // System.out.println(action);//action的value和調用的方法名是統一的 // if ("login".equals(action)){ System.out.println("處理登錄的需求"); // login(req,resp); // }else if ("regist".equals(action)){ System.out.println("處理注冊的需求"); // regist(req,resp); // }//反射try {//獲取action業務鑒別字符串,獲取相應的業務方法 反射對象Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class);//調用目標業務方法method.invoke(this,req,resp);} catch (Exception e) {e.printStackTrace();}}}

e)數據的封裝和抽取BeanUtis的使用

BeanUtils 工具類,它可以一次性把所有請求的參數注入到JavaBean中。

BeanUtils不是JDK的類。而是第三方的工具類。所以需要導包。
1、導入需要的jar包
commons-beanutils-1.9.4.jar 下載地址
commons-logging-1.2.jar BeanUtils依賴logging包

2、使用BeanUtils類方法實現注入。

BeanUtils.populate(user,req.getParameterMap());//出現NoClassDefFoundError錯誤導入commons-collections 3.x.jar,4.x不行

WebUtils 在Utils包下

package com.atguigu.utils;import org.apache.commons.beanutils.BeanUtils;import java.util.Map;public class WebUtils {/*** 把Map中的值注入到對應的JavaBean屬性中* @param value* @param bean** HttpServletRequest* Dao層* Service層* web層 耦合度高**/ // public static void copyParamToBean(HttpServletRequest req,Object bean ){public static <T> T copyParamToBean(Map value, T bean ){try {System.out.println("注入之前:"+bean);/*** 把所有請求的參數都注入到user對象中*/BeanUtils.populate(bean,value);//出現NoClassDefFoundError錯誤導入commons-collections3.x.jar,4.x不行System.out.println("注入之后:"+bean);} catch (Exception e) {e.printStackTrace();}return bean;}}

UserServlet 在web包下

package com.atguigu.web; import com.atguigu.pojo.User; import com.atguigu.service.UserService; import com.atguigu.service.impl.UserServiceImpl; import com.atguigu.utils.WebUtils;import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;public class UserServlet extends BaseServlet {private UserService userService = new UserServiceImpl();/*** 處理登錄的功能* @param req* @param resp* @throws ServletException* @throws IOException*/protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1、獲取請求的參數String username = req.getParameter("username");String password = req.getParameter("password");//2、調用XxxService.xxx()處理業務User loginUser = userService.login(new User(null, username, password, null));//如果等于null,說明登錄失敗if (loginUser==null){// 把錯誤信息,和回顯的表單項信息,保存到Request域中req.setAttribute("msg","用戶名或密碼錯誤!");req.setAttribute("username",username);// 跳回登錄頁面req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);}else {// 成功// 跳到成功頁面login_success.jspreq.getRequestDispatcher("/pages/user/login_success.jsp").forward(req,resp);}}/*** 處理注冊的功能* @param req* @param resp* @throws ServletException* @throws IOException*/protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1、獲取請求的參數String username = req.getParameter("username");String password = req.getParameter("password");String email = req.getParameter("email");String code = req.getParameter("code");// Map<String, String[]> parameterMap = req.getParameterMap(); // for (Map.Entry<String, String[]> entry:parameterMap.entrySet()) { // System.out.println(entry.getKey()+"="+ Arrays.asList(entry.getValue())); // }// User user=new User(); // WebUtils.copyParamToBean(req,user);//注入賦值,與User類中setXxx對應User user = WebUtils.copyParamToBean(req.getParameterMap(),new User());//注入賦值,與User類中setXxx對應// 2、檢查驗證碼是否正確 ===寫死,要求驗證碼為:abcdeif ("abcde".equalsIgnoreCase(code)){ // 3、檢查用戶名是否可用if (userService.existUsername(username)){System.out.println("用戶名["+username+"]已存在!");// 把回顯信息保存到Request域中req.setAttribute("msg","用戶名已存在!!");req.setAttribute("username",username);req.setAttribute("email",email); // 跳回注冊頁面req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);}else { // 可用 調用Service保存到數據庫userService.registUser(new User(null,username,password,email)); // 跳到注冊成功束面regist_success.jspreq.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req,resp);}}else {// 把回顯信息保存到Request域中req.setAttribute("msg","驗證碼錯誤!!");req.setAttribute("username",username);req.setAttribute("email",email);System.out.println("驗證碼["+code+"]錯誤,");req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);}}}

總結

以上是生活随笔為你收集整理的书城项目第三阶段及其源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。