图书借阅系统开发笔记

图书借阅系统开发介绍及心得

  • 项目已开源到 github https://github.com/Qiu-JW/books-manage-system
  • gitee https://gitee.com/qiu-jw/books-manage-system
技术栈
前端

HTML5、CSS、JS、jQuery、axios、bootstrap

后端

servlet、JSP、JDBC

数据库

MySQL

项目采用mvc模式构成

项目功能

项目主要有两大视角:管理员和用户两个视角

管理员表:登录校验

用户表:登录校验

图书表:查询全部图书数据、增加图书、删除图书、更新图书、根据字段值查询图书

借阅记录表:

项目技术小知识

  • 前端表单提交后,表单内输入框等东西要有name属性才能把数据发送到后端
  • ${pageContext.request.contextPath}方式xu’ni

## 遇到的bug

一:

<c:if test="${admin!=null}"></c:if>
这个标签会发疯一样,一样的判断条件会导致有的地方出来,有的地方代码中的内容不出现
  • 解决:发现可能是语法错误问题 <c:if test=“${admin!=null}}”> 多了个}

二:

<link href="css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">使用网络上的样式可以渲染页面,但本地的不行。再项目快完成时突然这样

项目开发

  • 管理员与用户界面不一致,要使用什么办法能增加代码的复用
  • 借阅图书要注意使用第三张表与事物

开发心路过程及经验总结

开发过程及心路

项目在2024年1月9日开始开发,开发动机是上的JavaWeb要结课了。

1月9日

​ 决定开发选题,开发一个图书借阅系统。一开始还不知道要开发哪些内容,数据表的设计也是一塌糊涂,很多东西都没有考虑到,导致后期修改表结构。

​ 同时也确定了使用什么技术。

​ 通过观察别人的前端,自己总结了所需要的功能

1月10日

​ 完成页面基本功能。查询与基本前端网页

1月11日

​ 完成大部分管理员功能

1月12日

​ 深入理解了所用技术,对网页的转发,数据解析,架构与写法有了更深刻的认识。寻找jar包下载,认识到了自己需要一定的英语水平

1月14日

​ 完成了用户的基本功能,编写开发心得

1月15日

​ 想要统一项目的命名,结果遇到各种bug。

​ 我尝试改变了controller为Controller,结果遇到了什么只读属性不能改变等问题。。接下来再进行登录等操作时,便不能进行了。明明代码没有进行任何报错。只能重建项目了。(我还尝试将controller层下的servlet按照表与页面细分。因此报错中是)

src
└── controller
└── LoginController.java
这里又体现了github的重要性,如果能在大改前上传一下,那情况会好很多。当然,也是个人没有意识到这点,不然可以提前备份准备啥的。

HTTP Status 500Internal Server Error
Type 异常报告消息 Error instantiating servlet class [Controller.Login.LoginController]描述 服务器遇到一个意外的情况,阻止它完成请求。Exceptionjavax.servlet.ServletException: Error instantiating servlet class [Controller.Login.LoginController]org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)java.base/java.lang.Thread.run(Thread.java:834)
Root Causejava.lang.ClassNotFoundException: Controller.Login.LoginControllerorg.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)java.base/java.lang.Thread.run(Thread.java:834)
Note 主要问题的全部 stack 信息可以在 server logs 里查看Apache Tomcat/9.0.27

经验总结

开发的经验

  • 没有使用github新建仓库上传代码,导致不清楚开始开发时间,对每天的工作也无法进行量化。以后开发项目应该在github上进行新建库来防止这件事

  • 没有统一项目的命名,导致一类操作有的有大写有的没有大写,这是万万不可的

  • 没有将项目的需求想的很健全,因此导致做的时候无从下手,比如删除功能和修改功能,我的做法是设计两个按钮,但一个做的会要求复杂一点,要弹出一个窗口来确认修改的值,却选择先做修改的。应先从简单的入手确认无误了再做难的。

  • 数据库设计的太差了,因为项目需求没有想的健全,导致数据库没有根据业务来设计。后面新增了属性。

  • 因为没有统一项目的命名,后期想统一命名时,便遇到各种的bug。。。

  • 做项目才是最快的学习方式

  • 没有maven进行依赖管理,真的很难受

项目重构

命名

1. 包名(Package Names):

  • 包名应该是小写,具有实际意义。
  • 使用逆域名(倒置的域名)格式来确保唯一性,例如:com.example.mywebapp.

2. 类名(Class Names):

  • 类名应该以大写字母开头,采用驼峰命名法。
  • 类名应该是名词,并描述其用途。

3. 接口名(Interface Names):

  • 接口名应该以大写字母开头,采用驼峰命名法。

  • 在类名前增加 I (i的大写)来表示这是一个接口

  • 接口名应该是名词,并描述其用途。

4. 方法名(Method Names):

  • 方法名应该以小写字母开头,采用驼峰命名法。
  • 方法名应该是动词或动词短语,并描述其执行的操作。

5. 变量名(Variable Names):

  • 变量名应该以小写字母开头,采用驼峰命名法。
  • 避免使用单个字符的变量名,除非是临时变量。

6. 常量名(Constant Names):

  • 常量名应该全部大写,使用下划线分隔单词。
  • 常量通常在类中声明为 public static final

7. 数据库表名和字段名:(该项目中没有遵循)

  • 数据库表名和字段名应该使用小写字母,采用下划线分隔单词。
  • 保持数据库命名规范和 Java 命名规范一致。

8. URL路径:

  • URL 路径应该使用小写字母,采用中划线或下划线分隔单词。
  • 避免在 URL 中使用空格和特殊字符。

9. 注释:

  • 使用规范的注释格式,包括类注释、方法注释等。
  • 注释应该清晰地描述代码的功能和目的。

10. 其它规范:

  • 遵循 SOLID 原则和设计模式。
  • 保持代码简洁、可读性高,避免过度复杂的逻辑。
  • 避免使用缩写,除非是广泛认知的缩写。

规范一致。

8. URL路径:

  • URL 路径应该使用小写字母,采用中划线或下划线分隔单词。
  • 避免在 URL 中使用空格和特殊字符。

9. 注释:

  • 使用规范的注释格式,包括类注释、方法注释等。
  • 注释应该清晰地描述代码的功能和目的。

10. 其它规范:

  • 遵循 SOLID 原则和设计模式。
  • 保持代码简洁、可读性高,避免过度复杂的逻辑。
  • 避免使用缩写,除非是广泛认知的缩写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java的数组定义和使用

目录 1.前言 2.数组的概念 3.在Java中的创建和初始化 3.1数组的创建 3.2数组的初始化 4.关于使用 4.1数组元素的访问 4.2数组的遍历 4.3length和length()的区别 5.数组其实是引用类型数据 5.1初始JVM的内存分布 5.2基本类型变量与引用类型变量的区别 5.3关于null的认识 5.4设计…

手眼标定(外参)

1. 传统使用张正友相机标定,角点检测 //张正友相机标定,角点检测 for(int i=1;i<=images_number;i++){Mat image=imread(images_path+to_string(i)+String("/color.jpg"));Mat output=image.clone();image_size.width=image.cols;image_size.height=image.…

(34)4.17 作业课

//弓箭型 int main() { int n 0; while (scanf("%d", &n) 1) { int i 0; for (i 0; i < n; i) { int j 0; for (j 0; j < n - i; j) { printf(" &q…

工作流JBPM画图与配置

文章目录 ☃️7.1 画图☃️7.2 配置7.2.1 配置任务办理人7.2.1.1 写死的方式配置任务办理人&#xff08;不推荐&#xff09;7.2.1.2 #{}方式配置任务办理人7.2.1.3 实现接口方式配置任务办理人7.2.1.4 方法指定方式分配任务办理人 7.2.2 配置节点属性7.2.2.1 判断节点(decision…

Sourcetree安装使用(补个笔记)

Sourcetree介绍 Sourcetree是一款免费的Git图形化客户端&#xff0c;它由Atlassian开发&#xff0c;提供了跨平台的支持&#xff0c;可运行在Windows和Mac操作系统上。Sourcetree可以让开发者更方便地使用Git来管理代码&#xff0c;不需要在命令行中输入复杂的Git命令&#xf…

symfony框架介绍

Symfony是一个功能强大的PHP框架,它提供了丰富的组件和工具来简化Web开发过程。以下是一些关于Symfony的主要特点: 可重用性: Symfony提供了一系列可重用的PHP组件,这些组件可以用于任何PHP应用程序中。灵活性: Symfony允许开发者根据项目需求灵活选择使用哪些组件,而不是强…

HTML学习笔记:链接target属性

关于target的使用&#xff1a; <a href"https://www.baidu.com" target"_parent">网址链接</a>其中关于target四个特殊目标的理解&#xff0c;W3school上的解释为&#xff1a; HTML 标签的 target 属性 其中_black和_self两个属性很好理解&…