由于篇幅的原因,本文只是对于JavaWeb项目的大致数据流程做一个介绍,同时引出一些JavaWeb开发中很基础的知识点,且不会精确到具体代码实现。
所以本文的适合读者为刚刚接触JavaWeb开发的人,或者是想了解一下网页服务的大致流程的新手。
当然如果你关心具体实现,可以跟学https://www.bilibili.com/video/BV1BJ411L7NR,该教程从针对JavaWeb入门者的角度进行教学,非常适合新手。
同时如果你关心整体项目构建。可以查看https://gitee.com/YangTang-Gitee/library ,学习搭建一个简单的JavaWeb项目。
推荐结合目录食用。
1:Java 基础知识
2:HTML、CSS、JavaScript等前端基础知识
IntelliJ IDEA:非常流行的Java开发IDE,因为其足够智能且可扩展性很强,目前市场占用率已经位居Java开发IDE榜首,且学生党可以免费使用完整版,非常适合我等穷孩子。建议新手可以跟https://www.bilibili.com/video/BV1PW411X75p系统学习一下IDEA的使用。
JavaWeb服务需要特定的容器来管理动态和静态资源。
作为初学者,且只针对简单的JavaWeb项目,Tomcat是一个不错的Web 应用服务器。Tomcat最核心的功能是对于JSP与Servlet的管理。
Servlet本质为Java接口或类,开发者通过实现或继承Servlet接口或类形成自己的一个Servet子类,并在方法中写上自己的业务,写上给客户端的返回等(比如MyFirstServlet):
这样浏览器就可以根据 Tomcat地址+当前Servlet的地址访问到当前Servlet,并执行相关业务。
从语言的角度来讲,可以将JSP理解为包含 Java语言+前端3大语言的一个文件。
从实现的本质上来讲,JSP是需要传输给客户端很多前端语句的 Servlet。
JSP中含有大量的前端标记语言等,这些将用来给用户一个完整的界面 。 同时还有少量的Java语言,主要是为了能够结合实际业务,为页面提供真实的数据。
在Tomcat中,JSP被访问时会自动被装载成一个Servlet。其中的Java语言部分很自然就成了Servlet中的一部分,运行、得到数据等,而其中的前端语言部分会在结合Java部分运行结果后被Servlet写给客户端形成界面。所以JSP本质为返回给客户端一整个完整界面的Servlet。
所以,既生Servlet,何生JSP ?
因为JSP的文件格式符合前端编程的习惯,你只需要在传统的前端页面加入少量Java语言就行,如下图所示 。
当被装载成Servlet时是这个样子的:
所以如果开发者要直接在Servlet中去输出一整合网页显然是不人性的,同样如果在JSP中去掺杂大量的业务代码也是不利于开发的。
于是在此基础上就形成了Servlet主内,JSP主外的格局。即Servlet主要负责接收请求、处理业务等,然后将数据等传递给某个JSP,JSP负责描述界面、展示数据等。大致可以形成以下流程图:
从本质上来讲这两者是一样的,都是JSP中为了简化Java语言部分的编写而生的,但是两者的侧重点不一样。
EL的主要功能是简化JSP开发中对对象的引用,更侧重于数据交互。
JSTL的主要功能对Java中常用语句的封装,比如你可以用类似HTML那样标签来做一个for循环,而不用像Java代码中那样手写循环。
总而言之,没有这两个东西你也可以写,但是有这两个开发会简单很多,代码也会简洁不少,值得一学。
MVC模式并不是新的技术,而是新的思想。
M代表Model,指一个确实的实体类,比如一本书,一个用户等
V代表View,指返回给用户看的视图(JSP)
C代表Controller,指处理具体业务的代码(Servlet)
Controller负责接收请求、处理业务,然后将处理的数据打包成Model,再将Model整个传给JSP,JSP则将Model中的数据读取并显示。
这样做可以降低数据与程序的耦合性,无论从开发还是维护,都会减少很多工作量。同时也可以使代码逻辑更清晰,可读性更强等。
JDBC的基础知识这里就不在复述,这里我们主要需要了解一个数据库连接池的概念。
在基础的获取数据库连接对象时,我们每次获取都需要向数据库申请获取连接,验证⽤户名和密码等,执⾏完 SQL 语句后断开连接,这样的⽅式会造成资源的浪费,数据连接资源没有得到很好的重复利⽤。
而数据库连接池的概念是,我先申请一批连接对象放到连接池中,当程序需要调用时则提供给它一个连接,而不用重新申请。用完后程序再把该连接还给连接池,而不是直接断开连接,可供其他请求使用。
DBUtils 可以帮助开发者完成数据的封装(结果集到 Java 对象的映射)。
因为在基础的JDBC查询中,返回结果通常为ResultSet。一方面根据上述MVC中M模式,我们需要自己手动去将数据封装成对象,另一方面我们将不可避免的手写循环去遍历结果集,使得开发很低效。
顾名思义,过滤器主要是对请求进行过滤的,保证特定的资源只能被特定的人、特定的情况访问。一方面可以维护安全,另一方面也可以提供不同服务。
根据以上概念我们就可以总结出一个JavaWeb,或者说大部分Web项目的大致数据流程图。
上图的大部分概念都已经介绍过,接下来对MVC之C中的几个新概念再说明一下。
因为后台的代码是很复杂的,你每发送一个请求给一个Servlet,就要求他在当前Java文件即接受和返回信息,又处理具体业务,又要和数据库通信。实现上是完全可以的,但是这会使得代码耦合性很高,非常不适合大型项目开发,也不利于调试。
故我们可以用controller来接收请求,然后在controller中注入一个service的对象,使用service对象的方法来实现具体业务。 同样,如果当前业务时需要使用到数据库的,可以在service中注入一个repository对象,然后再调用他的方法来实现数据库操作。
最终的后端的Java文件代码包大致如下,至于前端的包会有一个专门的文件夹用来放JSP等前端资源。
上述的东西就大致包含了JavaWeb基本流程,下文的东西都是些现实应用中经常会用到的功能模块罢了。
Ajax = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。其实核心思想很简单,在不用刷新整个网页的情况下刷新局部网页数据。
比如你在B站看一个投票计数,投票数是时时刻刻都在变化的,而你不用刷新整个页面就能看到最新的投票数据。这就是自动局部刷新,我只向后端要局部的数据,既可以避免整个页面的不断刷新,也可以避免重复请求固定的数据,导致效率降低。
这个没什么新鲜的,但是却是必需功能。
主要是对整个Java项目的运行状况等进行监听,增强Web应用的事件处理能力。
如开头提到的,本文档只是个人在JavaWeb学习路上一个心得和理解的总结与分享,所以通篇没有提到过具体实现,希望能够给同作为新手的孩子画一个模样。
当然也希望大佬们看到后能在评论区批评一下孩子不对的地方。
Respect!