图书管理系统
图书管理项目是一个基于Servlet+maven +MySQL +Tomcat实现的简单图书管理系统,用户可以记录并管理学生借阅图书信息。
项目目标
- 相关知识:数据库设计、基本CRUD操作,关联查询操作,JDBC操作
- Servlet处理HTTP请求
- HTTP相关知识:请求方法、响应状态码、数据类型等
- Filter过滤器实现请求和响应的过滤
- 项目开发流程,部署到服务器上等
开发环境与技术栈
Java自定义异常、maven、Servlet、json封装、Filter过滤器、多线程、单例模式、JDBC、URL编码及解码等
项目功能
主要业务:管理学校图书信息,记录并管理学生借阅图书信息,图书管理系统的登录,图书借阅信息的新增、修改、删除功能
- 用户登录、会话管理
- 图书借阅信息管理,
我的职责
自定义父类和子类异常,进行异常的统一处理,使用@WebServlet注解修改Servlet属性,在统一的代码中封装json的返回格式,并返回失败的json数据;实现工具类线程安全的双重校验锁,利用filter过滤器进行请求和响应的过滤,并且用到JDBC的知识以及URL的编码及解码,将项目部署到服务器上等。
项目详情
- 项目使用MVC三层结构
三层结构是什么,是展现层、应用层、数据访问层,这个基本上是没有太大的异议的,两种看法的来源基本上都是来自对于mvc的理解。
对于java web应用来说,不管是B/S还是C/S,大体上都可以分成服务端和客户端两部分,只不过B/S的客户端就是公用的浏览器。
m是model,也就是和数据库相关的那些,比如实体类和dao、mapper.xml等,对应着三层结构的数据访问层;
v是view,也就是前台的页面或者说是客户端展示给用户看的东西,也就是展现层;
而c就是controller以及service等具体的业务逻辑,对应着三层结构的应用层。
-
前后端接口约定
要实现功能,需要先明确前后端约定好的接口,我们主要实现图书借阅信息管理,所以只实现该业务相关接口。
需要说明的是,接口的定义一般是前后端约定好的,所以也和前端代码息息相关,前端需要什么数据,需要什么格式的数据,也会在接口中体现。
-
HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据
提交数据到服务器的时候有两种方式可供选择,一个是post一个是get。
-
application/json
application/json 这个 Content-Type 作为响应头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。
JSON 格式支持比键值对复杂得多的结构化数据,这一点也很有用 -
httpServlet的作用就是得到http请求并作出响应并返回结果给容器的
HttpServlet的作用是:
根据客户发出的HTTP请求,生成响应du的HTTP响应结果。HttpServlet首先必须读取HTTP请求的内容。Servlet容器负责创dao建HttpRequest对象,并把HTTP请求信息封装到HttpRequest对
象中,这大大简化了HttpServlet解析请求数据的工作量。
Filter 的基本工作原理
- 1、Filter 程序是一个实现了特殊接口的 Java 类,与 Servlet 类似,也是由Servlet 容器进行调用和执行的。
2、当在 web.xml 注册了一个 Filter 来对某个 Servlet 程序进行拦截处理时,它可以决定是否将请求继续传递给 Servlet 程序,以及对请求和响应消息是否进行修改。
3、当 Servlet 容器开始调用某个 Servlet 程序时,如果发现已经注册了一个Filter 程序来对该 Servlet 进行拦截,那么容器不再直接调用 Servlet 的service 方法,而是调用 Filter 的 doFilter 方法,再由 doFilter 方法决定是否去激活 service 方法。
4、但在 Filter.doFilter 方法中不能直接调用 Servlet 的 service 方法,而是调
用 FilterChain.doFilter 方法来激活目标 Servlet 的 service 方法,FilterChain 对象时通过 Filter.doFilter 方法的参数传递进来的。
5、只要在 Filter.doFilter 方法中调用 FilterChain.doFilter 方法的语句前后增加某些程序代码,这样就可以在 Servlet 进行响应前后实现某些特殊功能。
6、如果在 Filter.doFilter 方法中没有调用 FilterChain.doFilter 方法,则目标Servlet 的 service 方法不会被执行,这样通过 Filter 就可以阻止某些非法的访问请求。