这是疫情期间跟着尚硅谷视频做的一个书城项目,昨天在整理SSM文档的时候,发现还在草稿箱里面,我闲着没事就发出去了,没想到还真有人看,但是文档根本就没写完(笑),因为当时也没考虑过给所有人看,主要是想着自己看的,不过项目所实现的功能还是都在文档里面写出来了,虽然写的也不全,但是配合着视频,还是能看懂的,今天看到有小伙伴想要源码,我就先把源码分享出来,后续的再慢慢补充。
IDEA2019
JDK1.8+MySQL5.6+Tomcat8.0
JSP+Servlet
Github:https://github.com/UnityAlvin/book 感觉本项目对你有所帮助的话,请在Github右上角点个Star,谢谢!
- 在 html 页面顶行添加 page 指令。
- 修改文件后缀名为:.jsp
- 使用 IDEA 搜索替换.html 为.jsp(快捷键:Ctrl+Shift+R)
- regist.jsp
- head.jsp、footer.jsp、login_success_menu.jsp、manager_menu.jsp
- 使用EL表达式设置需要保存数据的标签value值,动态获取Servlet中设置的返回信息
- regist.jsp、login.jsp、UserServlet.java
- 实际项目中,一个模块,一般只使用一个 Servlet 程序,所以使用反射提取
- UserServlet.java
- 使用反射优化大量 else if
- BaseServlet.java、UserServlet.java
BeanUtils 工具类,它可以一次性的把所有请求的参数注入到 JavaBean 中。 BeanUtils 工具类,经常用于把 Map 中的值注入到 JavaBean 中,或者是对象属性值的拷贝操作。 BeanUtils 它不是 Jdk 的类。而是第三方的工具类。所以需要导包。
1、导入需要的 jar 包:
- commons-beanutils-1.8.0.jar
- commons-logging-1.1.1.jar
2、编写 WebUtils 工具类使用
- WebUtils.java
- login.jsp
- book_manager.jsp、book_edit.jsp、
- bookServlet.java
- bookDao.java、bookDaoImpl.java、
- Book.java
- WebUtils.java
- Page.java
- BookDaoImpl.java
- BookService.java、BookServiceImpl.java
- BookServlet.java
- manager_menu.jsp、book_manager.jsp
- page_nav.jsp
- page_nav.jsp
- Page.java:setPageNo()
- BookService.java:page()
- 显示 5 个连续的页码,而且当前页码在中间。除了当前页码之外,每个页码都可以点击跳到指定页。
- page_nav.jsp
以修改图书为例:
- book_manager.jsp中,在修改请求地址上追加当前页码参数
- book_edit.jsp中,使用隐藏域记录下 pageNo 参数
- book_servlet.jsp中,在服务器重定向的时候,获取当前页码追加上进行跳转
- Page.java
- BookServlet.java
- nav_book.java
- ClientBookServlet.java、BookService.java、
- BookDao.java、BookDaoImpl.java
- index.jsp
- UserServlet 程序中保存用户登录的信息
- 修改 login_succuess_menu.jsp
- 修改Index.jsp
- 销毁 Session 中用户登录的信息(或者销毁 Session)
- 重定向到首页(或登录页面)。
- UserServlet.jsp、index.jsp
表单重复提交
- 提交完表单,服务器使用请求转发来进行页面跳转,此时,用户按下F5,就会发起最后一次的请求,造成表单重复提交问题,可使用重定向跳转解决。
- 用户正常提交服务器,但是由于网络延迟等原因,导致用户多次点击提交按钮,也会造成表单重复提交,可以采用验证码校验。
- 用户正常提交服务器,服务器也没有延迟,但是提交完成后,用户回退浏览器,重新提交,也会造成表单重复提交,可以采用验证码校验。
谷歌验证码 kaptcha 使用步骤如下:
- 导入谷歌验证码的 jar 包:kaptcha-2.3.2.jar
- 在 web.xml 中去配置用于生成验证码的 Servlet 程序
- 在页面表单中使用
- 在服务器比较谷歌生成的验证码和客户端发送过来的验证码
- 切换验证码
- regist.jsp、UserServlet.java、
- Cart.java、CartItem.java
- CartServlet .java
- index.jsp
- cart.jsp
- CartServlet.java
- cart.jsp
- CartServlet.java
- cart.jsp
- CartServlet.java
- cart.jsp
- 在添加商品到购物车的时候,保存最后一个添加的商品名称 CartServlet.java
- 在 index.jsp 页面中输出购物车信息
- 商品添加到购物车之后,点击去结账,会创建一个对应购物车的订单
- ClientOrderServlet.java、order.jsp
- 分页展示出所有用户的订单信息
- OrderServlet.java、order_manager.jsp
- 向未发货的用户发货
- OrderServlet.java、order_manager.jsp
- 根据订单查看订单详细信息
- OrderServlet.java、order_detail.jsp
- 根据用户id查询属于自己的订单信息
- ClientOrderServlet.java、order.jsp
- 用户可在我的订单内签收已发货的订单
- ClientOrderServlet.java、order.jsp
- 用户未登录时无法访问订单、管理员界面
- web.xml、ManagerFilter.java
- getConnection()、commitAndClose()、rollbackAndClose()-------JDBCUtils.java
- 抛出CRUD中try-catch的异常------BaseDao.java
- 抛出doPost()try-catch的异常------BaseServlet.java
- 统一管理所有的事务------TransactionFilter.java
- 添加TransactionFilter的配置------web.xml
- 创建异常界面------error500.jsp、error404.jsp
- 配置error标签------web.xml
- 在js中添加事件------user.jsp
- ajaxExistsUsername()------UserServlet.java
- 在js中添加事件------index.jsp
- ajaxAddItem()------CartServlet.jsp