├── README.md └── books ├── .gitignore ├── WebContent ├── META-INF │ └── MANIFEST.MF ├── WEB-INF │ ├── lib │ │ ├── jstl.jar │ │ ├── mysql-connector-java-5.1.8-bin.jar │ │ └── standard.jar │ └── web.xml ├── css │ └── style.css ├── image │ ├── bg01.jpg │ ├── book │ │ ├── book_01.gif │ │ ├── book_02.gif │ │ ├── book_03.gif │ │ ├── book_04.gif │ │ ├── book_05.gif │ │ ├── book_06.gif │ │ ├── book_07.gif │ │ ├── book_08.gif │ │ ├── book_09.gif │ │ └── book_10.gif │ ├── button_chart.png │ ├── button_gray_bg.gif │ ├── button_login.gif │ ├── button_login副本.gif │ ├── button_reg.gif │ ├── button_register.gif │ ├── button_search.gif │ ├── button_shop.gif │ ├── login_lock.gif │ ├── logo.gif │ ├── logo01.jpg │ ├── logo_ps03.png │ ├── step_arrow.gif │ ├── step_arrow_past.gif │ └── success_ico.gif ├── index.jsp ├── js │ └── valiadate.js ├── login.jsp ├── logout.jsp ├── main.jsp ├── main_head.jsp ├── orderlist.jsp ├── register.jsp ├── register_success.jsp ├── shopping.jsp └── shopping_success.jsp ├── bookstore.sql ├── image ├── img01.png ├── img02.png ├── img03.png ├── img04.png ├── img05.png ├── img06.png ├── img07.png ├── img08.png ├── img09.png ├── img10.png ├── img11.png ├── img12.png ├── img13.png ├── img14.png ├── img15.png ├── phone01.jpg ├── phone01.png ├── phone02.jpg └── phone03.jpg └── src └── com ├── biz ├── BookBiz.java ├── ItemBiz.java ├── OrderBiz.java ├── UserBiz.java └── impl │ ├── BookBizImpl.java │ ├── ItemBizImpl.java │ ├── OrderBizImpl.java │ └── UserBizImpl.java ├── dao ├── BaseDao.java ├── BookDao.java ├── ItemDao.java ├── OrderDao.java ├── UserDao.java └── impl │ ├── BookDaoImpl.java │ ├── ItemDaoImpl.java │ ├── OrderDaoImpl.java │ └── UserDaoImpl.java ├── entity ├── Book.java ├── Item.java ├── Order.java └── UserInfo.java └── servlet ├── AddOrderServlet.java ├── CartServlet.java ├── LoginServlet.java ├── ModifyCartServlet.java ├── RegisterServlet.java ├── SearchServlet.java └── ShowOrderServlet.java /README.md: -------------------------------------------------------------------------------- 1 | # 网上书城项目答辩 2 | 3 | [TOC] 4 | 5 | 6 | 7 | ## 主要技术 8 | 9 | **关键字**:JSP、servlet、Ajax、jstl、JavaScript、注册登录、分页、购物车、增删改查 10 | 11 | 开发环境:Eclipse、MySQL 5.7、Tomcat 8.0 12 | 13 | ## 数据库表结构设计 14 | 15 |  16 | 17 | **books表结构:** 18 | 19 |  20 | 21 | **items表结构:** 22 | 23 |  24 | 25 | **orders表结构:** 26 | 27 |  28 | 29 | **userinfo表结构:** 30 | 31 |  32 | 33 | 34 | 35 | ## 项目包结构 36 | 37 |  38 | 39 | 40 | 41 | ## MVC设计模式 42 | 43 | ### M(model层) 44 | 45 | 1. biz包:业务处理。 46 | 2. dao包:数据访问,对数据库的一些封装操作。 47 | 3. entity包:实体类,javabean构建,View层和数据库之间的桥梁作用。 48 | 49 | ### V(view层) 50 | 51 | 1. Jsp页面:与用户进行交互的界面。 52 | 53 |  54 | 55 | ### C(controller 层) 56 | 57 | 1. servlet包:控制层,处理View层Jsp页面发来的请求。 58 | 59 | ## 注册登录模块 60 | 61 | ### Register 62 | 63 |  64 | 65 | **注册页面中form表单** 66 | 67 | 验证用户名、验证密码、验证邮箱 68 | 69 | ```jsp 70 |
84 | ``` 85 | 86 | **Ajax(异步 JavaScript 和 XML )**:验证用户名是否已被注册,页面部分数据刷新,而无需加载整个网页,提高网站的访问效率。 87 | 88 | ```javascript 89 | /** 90 | * Ajax检查用户是否已经被注册 91 | * 异步:发送请求时不等返回结果,由回调函数处理结果 92 | * @returns {Boolean} 93 | */ 94 | function isExists() { 95 | var xmlHttp; //定义 xmlHttp XmlHttpRequest对象从服务器异步获取数据后通过javascript修改页面局部信息 96 | try { 97 | //根据不同浏览器初始化不同的xmlHttp浏览器对象 98 | //IE6以上浏览器 99 | xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 100 | } catch (e) { 101 | try { 102 | //FireFox 103 | xmlHttp = new XMLHttpRequest(); 104 | } catch (e) { 105 | try { 106 | //IE5.5+ 107 | xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 108 | } catch (e) { 109 | alert("您的浏览器不支持Ajax"); 110 | return false; 111 | } 112 | } 113 | } 114 | var username = document.getElementById("username").value; //获取用户名 115 | /** 116 | * open(提交方式[get|post],url(servlet路径),同步或异步[false|true]) 117 | * RegisterServlet: servlet路径 118 | * 打开和后台服务器的链接 119 | */ 120 | xmlHttp.open("POST", "RegisterServlet?action=check&username="+username, true); //路径中不能有空格 121 | xmlHttp.send(null); //传送数据 122 | /** 123 | * onreadystatechange:调用回调函数 124 | * readyState:请求状态,代码是未初始化,1:初始化,2:发送请求,3:开始接受数据,4:接受结果完毕 125 | * status: http状态码 200成功,404路径错误,500后台代码错误, 126 | */ 127 | xmlHttp.onreadystatechange = function() { 128 | if(xmlHttp.readyState==4 && xmlHttp.status==200) { 129 | var usernull = document.getElementById("usernull"); 130 | var result = xmlHttp.responseText; //接受服务器端传过来的数据,写出来的数据都是String类型 131 | if(result == "true") { 132 | usernull.innerHTML = "当前用户名已被注册"; 133 | return false; 134 | } else if(result == "false") { 135 | usernull.innerHTML = "当前用户名可用"; 136 | return true; 137 | } 138 | } 139 | } 140 | } 141 | ``` 142 | 143 | 144 | 145 | ### Login 146 | 147 |  148 | 149 | **LoginServlet中doGet方法:** 150 | 151 | ```java 152 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 153 | String username = request.getParameter("username");//获取页面传过来的参数 154 | String password = request.getParameter("password"); 155 | //登录操作 156 | boolean flag = userBiz.checkLogin(username, password); 157 | 158 | if(flag) { 159 | request.getSession().setAttribute("loginuser", username); 160 | // response.sendRedirect("main.jsp"); 161 | response.sendRedirect("SearchServlet"); //首页直接显示 162 | } else {//登录失败 163 | response.setContentType("text/html;charset=utf-8"); 164 | // response.setCharacterEncoding("utf-8"); 165 | PrintWriter out = response.getWriter(); 166 | out.println(""); 170 | out.close(); 171 | } 172 | } 173 | ``` 174 | 175 | 176 | 177 | ## 网站首页及搜索图书模块 178 | 179 |  180 | 181 | 182 | 183 | ### **分页展示** 184 | 185 | Jstl标签库 c:forEach,循环遍历展示图书信息。 186 | 187 | ```jsp 188 |订单编号 | 34 |收货人 | 35 |下单时间 | 36 |总价 | 37 |订单商品 | 38 |商品名称 | 39 |商品单价 | 40 |商品数量 | 41 |
---|---|---|---|---|---|---|---|
${order.oid } | 45 |${order.username } | 46 |${order.createdate } | 47 |${order.total_price } | 48 |${order.bookname } | 50 |${order.b_price } | 51 |${order.total_price/order.b_price } | 52 |
恭喜:注册成功!
39 | 40 |恭喜:添加成功!
28 | 29 |