从0开始开发10万行代码的SpringBoot大型金融项目(入门+项目+高阶)
背景
Servlet的出现
上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来。最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html、css等。 但是可以想象:根据用户请求的不同动态的处理并返回资源是理所当然必须的要求。
servlet的定义
- Servlet is a technology which is used to create a web application. servlet是一项用来创建web application的技术。
- Servlet is an API that provides many interfaces and classes including documentation. servlet是一个提供很多接口和类api及其相关文档。
- Servlet is an interface that must be implemented for creating any Servlet.servlet是一个接口,创建任何servlet都要实现的接口。
- Servlet is a class that extends the capabilities of the servers and responds to the incoming requests. It can respond to any requests. servlet是一个实现了服务器各种能力的类,对请求做出响应。它可以对任何请求做出响应。
- Servlet is a web component that is deployed on the server to create a dynamic web page.servlet是一个web组件,部署到一个web server上(如tomcat,jetty),用来产生一个动态web页面
servlet的历史
版本 | 日期 | JAVA EE/JDK版本 | 特性 |
Servlet 4.0 | 2017年10月 | JavaEE 8 | HTTP2 [1] |
Servlet 3.1 | 2013年5月 | JavaEE 7 | Non-blocking I/O, HTTP protocol upgrade mechanism |
Servlet 3.0 | 2009年12月 | JavaEE 6, JavaSE 6 | Pluggability, Ease of development, Async Servlet, Security, File Uploading |
Servlet 2.5 | 2005年10月 | JavaEE 5, JavaSE 5 | Requires JavaSE 5, supports annotation |
Servlet 2.4 | 2003年11月 | J2EE 1.4, J2SE 1.3 | web.xml uses XML Schema |
Servlet 2.3 | 2001年8月 | J2EE 1.3, J2SE 1.2 | Addition of Filter |
Servlet 2.2 | 1999年8月 | J2EE 1.2, J2SE 1.2 | Becomes part of J2EE, introduced independent web applications in .war files |
Servlet 2.1 | 1998年11月 | 未指定 | First official specification, added Requestdispatcher, ServletContext |
Servlet 2.0 | JDK 1.1 | Part of Java Servlet Development Kit 2.0 | |
Servlet 1.0 | 1997年6月 |
普通servlet实现页面访问(https://www.cnblogs.com/davidwang456/p/10297476.html)
1.1 实例1:使用web.xml实现一个http服务
1.2 编程方式实现一个http服务请求
2.spring mvc实现页面访问
2.1 web.xml方式
2.2 编码方式
3.spring boot
继承了spring mvc的框架,实现SpringBootServletinitializer,然后controller
总结:
1.servlet的本质没有变化,从web框架的发展来看,web框架只是简化了开发servlet的工作,但还是遵循servlet规范的发展而发展的。
2.servlet的历史发展,从配置方式向编程方式到自动配置方式发展
3.spring mvc框架的分组:root和child(可以有多个dispatcherservlet),多个child可以共享root,child直接不共享
Java 发展史
Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。
Java分为三个体系:
JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名以取消其中的数字”2”:J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME。
JAVA 语言历史近二十年, 已发展成为人类计算机史上影响深远的编程语言.
JAVA 语言所崇尚的开源、自由等精神, 吸引了全世界无数优秀的程序员.
事实是, 从人类有史以来, 从来没有一门编程语言能吸引这么多的程序员, 也没有一门编程语言能衍生出如此之多的开源框架.
JAVA 语言是一门非常纯粹的面向对象编程语言, 它吸收了 C++ 语言的各种优点, 又摒弃了 C++ 里难以理解的多继承、指针等概念, 因此 JAVA 语言具有功能强大和简单易用两个特征.
从某种程度上来看, 学精了 JAVA 语言的相关方面, 相当于系统地学习了软件开发相关知识, 而不是仅仅学完了一门编程语言.
JAVA 三个版本
J2SE: 整个 JAVA 技术的核心和基础, 它是 J2ME 和 J2EE 编程的基础.
J2ME: 主要用于控制移动设备和信息家电等有限存储的设备.
J2EE: JAVA 技术中应用最广泛的部分, J2EE 提供了企业应用开发相关的完整解决方案.
JAVA 三类API
核心API: 基本API, JAVA核心类库.
可选API: Sun公司为JDK提供的扩充API, 这些API因平台的不同而不同.
特殊API: 用于满足特殊要求的API. 如用于JCA和JCE的第三方加密类库.
Jsp的出现
servlet诞生后,sun公司很快发现servlet编程很繁琐,1)servlet代码有大量冗余代码,out输出就得写上百遍;2)开发servlet必须精通网页前端和美工,你得非常不直观的在Servlet中写前端代码,这使得实现各种页面效果和风格非常困难。
因此,sun公司借鉴 微软的asp,正式推出了jsp(servlet1.1)。采用HTML语言直接生成界面,在界面中使用<% %>脚本标识嵌入Java代码
一个简单的jsp例子
- <html>
- <head><title>测试</title></head>
- <body>
- 第一阶段<% String str = “test” ; out.println(str); %>
- </body>
- </html>
倡导了MVC思想的servlet版本servlet1.2出现------------jsp+javabean+servlet
jsp出现后,也存在问题,1)前端开发人员需要看大量他看不懂的后端代码;2)同样,servlet开发人员也在复杂的前端代码中找到其能写servlet代码的地方
所以,MVC思想的JSP+JavaBean+Servlet诞生了
JSP(V):JSP完成输入和输出,主要使用HTML标签和JSP标签
Servlet(C):主要完成控制,接收请求,调用业务处理(JavaBean),根据调用的结果找到一个JSP页面对用户进行响应
JavaBean(M):完成所有的处理过程
框架阶段
倡导了MVC思想的jsp+javabean+servlet出现,也存在问题:1)jsp页面中嵌入了很多java代码,使得结构很乱;2)对于大型项目,servlet过多,转向频繁,流程,配置等不易集中管理,因而出现了struts
Struts的出现
2001年6月,struts1.0出现,struts针对jsp推出了一套struts标签,从而使得jsp中没有了Java代码,结构清晰,功能强大。针对servlet,它提供了Action类来代替了servlet,这个Action类具有servlet的功能,并且能够进行一些请求过滤和自动转码的功能。
Spring的出现
原本已经开起来很完美了,但是又有一个问题,就是我们在Action调用DAO、Java bean等对象的时候都需要在自身代码中构建它们的对象来使用,这样增加了程序的耦合性,这与我们:“高内聚、松耦合”的思想不符合,那么怎么解决这个问题呢?因而出现了Spring框架。
Spring框架有两大功能:IOC(控制反转)和AOP(面向切面的编程),其中IOC就是说:当一个类中想要调用另外一个类的对象时,不需要再通过new 关键字来创建,而是由Spring框架来负责:创建、分配和管理,从而降低了程序中的耦合性。而AOP可以用来做一些日志的打印和输出,用于提示程序执行过程中的一些具体信息等。
注:Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》。Spring是为了解决企业级应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现之前只有EJB才能完成的事情。但是Spring不仅仅局限于服务器端开发,任何Java应用都能在简单性、可测试性和松耦合性等方面从Spring中获益。Spring是如何简化Java开发的:为了降低Java开发的复杂性,Spring采用了以下4种关键策略:1、基于POJO的轻量级和最小侵入性编程;2、通过依赖注入(DI)和面向接口实现松耦合;3、基于切面(AOP)和惯例进行声明式编程;4、通过切面和模版减少样式代码;
SpringMVC的出现
最后struts和Spring的整合,由于每一个bean都要在Spring中注册,每一个URL都要在struts配置文件中配置。当bean很多和URL对应的请求很多的时候,配置文件无疑会是很庞大的,这个就会使得配置起来很麻烦的费力。那么还有没有更好的办法使得能够结合Spring的功能和struts的功能,但是又可以使配置文件不会批量的增加?因而SpringMVC出现了
SpringMVC通过“基于注解”的方式代替了struts,并且通过Controller类来代替和实现了Action的功能。由于是基于注解的,所以很多的配置信息放在了Controller类中配置,从而降低了.xml文件的配置复杂度。
java—三大框架
Spring Boot 出现之前,我们常说的三大框架是SpringMVC Spring Hibernate(SSH), SpringMVC Spring Mybatis(SSM)。
java常用的框架介绍
https://www.cnblogs.com/byqh/p/5595384.html
maven
Maven是Java平台下的一款项目构建和依赖管理的自动化管理工具,将我们的源代码、配置文件变成可执行的war包或者jar包。
maven的优点
1.在平时我们开发项目时,一般都是一个项目就是一个工程。我们划分模块时,都是使用package来进行划分。但是,当项目很大时,有很多子模块时,即使是package来进行划分,也是让人眼花缭乱,所以项目非常大时,可借助Maven将一个项目拆分成多个工程,最好是一个模块对应一个工程,利于分工协作。而且模块之间还是可以发送消息的。
2.同一项目的jar包 复制和粘贴到WEB/INF/lib下。问题:同样的jar包重复出现在不同的工程中,一方面浪费空间,同时也让工程臃肿。但是借助Maven,可将jar包仅仅保存在“仓库”中,有需要该文件时,就引用该文件接口,不需要复制文件过来占用空间。
3.如果jar包都到各个官网网站下载,会浪费很多时间,而且可能不全,但是借助Maven可以以规范的方式下载jar包,因为所有的知名框架或第三方工具的jar包已经按照统一的规范存放到了Maven的中央仓库中。
4.问题:一个jar包依赖的其他jar包可能没导入到项目而导致项目跑不起来,但是Maven会自动将你要加入到项目中的jar包导入,不仅导入,而且还会将该jar包所依赖的jar包都自动导入进来。
SpringBoot
- 简化Spring应用开发的一个框架
- 整个Spring技术栈等的一个大整合
- 将J2EE开发的一站式解决方案
-
特点:
- 创建独立的Spring应用程序
- 内嵌Tomcat、Jetty或者Undertow(无需单独部署war文件)
- 开箱即用,提供各种默认配置来简化项目配置
- 没有冗余的代码生成也不需要XML配置
- 尽可能的自动化配置Spring以及第三方库
- 提供生产监控功能,例如metrics(指标)、health checks(运行状况检查)和externalized configuration(外部配置)
什么是SpringBoot
在使用传统的Spring去做Java EE(Java Enterprise Edition)开发中,大量的 XML 文件存在于项目之中,导致JavaEE项目变得慢慢笨重起来,,繁琐的配置和整合第三方框架的配置,导致了开发和部署效率的降低。
Spring Boot 并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。同时它集成了大量常用的第三方库配置,Spring Boot应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-Box),大部分的 Spring Boot 应用都只需要非常少量的配置代码(基于 Java 的配置),开发者能够更加专注于业务逻辑。
为什么学习SpringBoot
1.从官方来看
2.从Spring的优点来看
https://blog.csdn.net/qq_32595453/article/details/81141643
①良好的基因
因为SpringBoot是伴随着Spring 4.0而生的,boot是引导的意思,也就是它的作用其实就是在于帮助开发者快速的搭建Spring框架,因此SpringBoot继承了Spring优秀的基因,在Spring中开发更为方便快捷。
②简化编码
比如我们要创建一个 web 项目,使用 Spring 的朋友都知道,在使用 Spring 的时候,需要在 pom 文件中添加多个依赖,而 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中,我们只需要在 pom 文件中添加如下一个 starter-web 依赖即可。
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
③简化配置
Spring 虽然使Java EE轻量级框架,但由于其繁琐的配置,一度被人认为是“配置地狱”。各种XML、Annotation配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。Spring Boot更多的是采用 Java Config 的方式,对 Spring 进行配置。
④简化部署
在使用 Spring 时,项目部署时需要我们在服务器上部署 tomcat,然后把项目打成 war 包扔到 tomcat里,在使用 Spring Boot 后,我们不需要在服务器上去部署 tomcat,因为 Spring Boot 内嵌了 tomcat,我们只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目。
另外,也降低对运行环境的基本要求,环境变量中有JDK即可。
⑤简化监控
我们可以引入 spring-boot-start-actuator 依赖,直接使用 REST 方式来获取进程的运行期性能参数,从而达到监控的目的,比较方便。但是 Spring Boot 只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要 Spring Cloud 来配合一起使用。
从未来发展趋势看
微服务是未来发展的趋势,项目会从传统架构慢慢转向微服务架构,因为微服务可以使不同的团队专注于更小范围的工作职责、使用独立的技术、更安全更频繁地部署。而 继承了 Spring 的优良特性,与 Spring 一脉相承,而且 支持各种REST API 的实现方式。Spring Boot 也是官方大力推荐的技术,可以看出,Spring Boot 是未来发展的一个大趋势。
JavaWeb
在Sun的Java Servlet规范中,对Java Web应用作了这样定义:“Java Web应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的 Servlet容器 中运行。”
Java Web应用中可以包含Servlet、JSP、实用类、静态文档如HTML、图片等描述Web应用的信息(web.xml) https://www.cnblogs.com/albertrui/p/8427661.html
JavaWeb前景
Java开发的市场现状
今天的“Java”作为所有编程语言中最热门技术,可以说它无处不在,目前全球有着数十亿的设备正在运行着java,很多服务器程序都是用java编写,用以处理每天超过数以千万的数据。
无论是手机软件、手机Java游戏还是电脑软件,你的每一次购物到每一笔支付成功,都离不开Java,越来越多的企业也正采用Java语言开发网站,而在所有程序员中,Java开发工程师就占据20%的比例。
从国内排名靠前网站的主要开发语言,也可以看出Java在各大开发语言中的地位。
从图表中不难看出,大部分企业都用Java作为语言架构
这也不难理解,为什么Java现在这么火爆,吸引越来越多的人学习,根本原因,还是因为企业对Java的认可和应用。
Java应用领域
网站:主要适用Java EE开发(java的企业级开发),阿里巴巴、淘宝、支付宝、一号店、网易、搜狐、大众点评网、驴妈妈、人人网、去哪儿、网银、电商、YY PC端、等等、、、
大型企业级应用;主要食用JAVAEE,比如企业管理系统
移动互联网:AndroidAPP 开发应用
最典型应用: (1)有关通信及网络的企业:移动、联通、电信、网通主要的信息化都是JAVA (2)有关金融行业的大型企业,所有的银行、证券公司,比如工商银行、建设银行(3)大型管理系统,如:供应链、客户管理系统、、、 (4)电子政务,主要使用JAVA EE,相关的政府部门绝大多数的信息化系统JAVA开发的 (5)游戏,很多手机游戏都是用java开发的 (6)嵌入式设备消费类电子产品,主要用JAVA ME,无线手持设备、通信终端、医疗设备、信息家电(如数字电视、机顶盒、电冰箱)、汽车电子设备等是比较热门的java应用领域,这方面的应用例子有中国联通CDMA 1X网络中基于java技术的无线
人才需求量对比
Java市场人才需求量:
......
https://blog.csdn.net/weixin_38465623/article/details/80775799
SpringBoot的web项目搭建
回到题目,如何以最快速度搭建springboot后台项目并连通数据库实现控制层与服务层与dao层的select查询呢?
接下来会以图文操作流程来一步步演示:
使用IntelliJ IDEA软件工具(付费版Ultimate),如下图所示
打开软件,如下图所示
创建新项目后,如下图所示,于左侧栏选择Spring Initializr,再选择jdk15,没有先Download JDK,提前配好java环境变量哦
选择下一步,如下图所示输入好maven的GroupID和ArtifactID,选择Maven Project,language选择java,packaging打包方式选择jar,java版本选择15,package写com.project就好,desciption描述一下项目用途等等做下备注
输入完之后,点击下一步,下图所示,于左侧栏选择web,然后我们将spring web勾上
下图所示,于左侧栏选择Template Engines,然后我们将Thymeleaf勾上,然后点击下一步
接着完成项目创建,下图所示
下图所示,进入到了IntelliJ IDEA里,左侧是刚刚我们创建的名称为web的javaweb项目,右侧是maven,中间是代码区域,记得进去时允许maven自动下载包
直到打开到类,我们双击WebApplicationTests类,打开了类后我们看到测试的程序入口代码,我们想要试试可不可以运行可以这样做
鼠标悬停在下图所示这里,出现run test提示,然后我们单击鼠标左键,便可运行程序测试,可是contextLoads方法里面没有代码,我们总要写些什么,一般就写System.out.println("hello world"),然后我们跑起来
我们看到控制台输出了"hello world",说明测试程序跑了起来
同样的,我们的预期目标是运行javaweb项目,然后在浏览器端我们输入一个地址访问到一个网站,当然这个网站是任意内容,是由后台传来html,css,js,图片等资源,我们可以在这个网页中上传数据到后台服务器还可以获取后台的数据,比如如果要获取后台服务器的数据,那么服务器的数据其实来自于数据库,也就是说服务器先从数据库取出数据再将数据转回来到前端,我们的网页接收到之后便可以呈现出来。
这个网页可以是任意网站,里面包含任意的内容,这个服务器可以是我们的个人PC也可以是租的服务器,我们可以定义任何的数据(比如表单、图片)上传到服务器,也可以用向服务器发起任意允许的请求,甚至我们还可以实现内网穿透,即不只限于局域网,让在互联网上冲浪的任何人都可以输入地址查找并进入到我们的网站,是的,任何一个人只要连上了互联网都可以访问得到这个网站,也就是说到山区手机连个信号打开浏览器输入个URL地址便可以访问得到我们的网站。
那我们要怎么实现呢,我说过了,这个是以最快的速度搭建的javaweb项目,非常的精简有效率...
第一步,我们先找到web项目的主程序入口main函数
第二步,实现网页访问
提问我们如何在电脑浏览器上输入一段URL地址便可访问到一个网站呢?这个网站是放到web项目之中的,那放到哪里呢?如何服务器跑起来的后台程序接收到浏览器的请求之后,将这个网站首页资源返回去到游客的浏览器端再由浏览器处理呈现出来,便可看到网站,具体网站写了什么,自己可以随意写,首页要掌握html的知识和语言编写,css样式和java脚本语言,当然这里指的就是静态页面html5的。
文章一开始就提到了Servlet,为什么侧重这个呢,因为浏览器发起的后台请求,程序要接收到,首先交由Servlet处理,就类似个访问入口的关卡一样,并且是基于这个技术实现的,记得这篇文章之中有这句话:"servlet的本质没有变化,从web框架的发展来看,web框架只是简化了开发servlet的工作,但还是遵循servlet规范的发展而发展的"。
那么在这个项目里面怎么实现Servlet呢,有javaweb编程技术和经验的会想到SpringMVC的@controller注解来快速实现(相关知识:https://www.iteye.com/blog/elim-1753271)
也就是浏览器的访问会进入到@controller所注解的类,再有相应的方法来执行返回网页资源,然后我们就可以看到页面了。
那么要怎么写代码呢?跟着
上图所示,我们新建个java类,然后我们可以给class这样起名,叫做controller.ComController,然后回车键enter确定
我们看到了ComController类,这个类属于在javaweb中被称为的控制层,接下来我们浏览器的请求先进过这个控制层,我们在ComController类上面加一个注解@Controller
如下图,在输入@Controller的一部分@Contro之后我们看到工具给的提示,默认导入第一行的包我们按回车键
下图,我们看到注解导入了进来,ComController类上有了@Controller注解,接下来我们为控制器指定处理的URL请求,我们先定义一个方法visitTheWebsite,再于visitTheWebsite方法上加一个注解@RequestMapping
之后我们看到下图所示,这时我们需要定义一个浏览器请求的地址,这里我们写个根路径“/”就行
下图,写好之后我们就可以通过url请求进入到方法体之中了,我们可以尝试一下可不可以进去,所以我们在方法里面写个System.out.println("欢迎访问网站")
下图,写好之后我们就来尝试一下浏览器请求,看看控制台有没有输出"欢迎访问网站"
然后要怎么尝试呢,首先我们先将java程序跑起来才行,怎么跑起来呢,找到入口函数,即main函数,如下图我们在左侧栏找到WebApplication类双击进入代码区,点击绿色按钮运行
然后控制台滑下去我们看到Tomcat started on port(s): 8080 (http) with context path ''的提示(下图),表明Tomcat启动部署并运行了javaweb项目程序,并且我们还知道port访问端口为8080 ,然后我们可以打开浏览器尝试可不可以访问进入到visitTheWebsite方法里面
打开浏览器(下图),在浏览器地址栏我们输入localhost:8080,按回车键,我们会看到Whitelabel Error Page的提示,回头看看,我们是不是要访问一个网站,但是我们只是指定了请求地址和执行的方法,我们并没有指定任何一个网站页面资源。可是回到刚才的,这个浏览器的请求有没有进入到控制层ComController类下面的visitTheWebsite并执行相应的代码呢,如果有说明请求进入到了后台程序,我们便可以自己写相关的代码功能去做事情啦!
所以我们验证一下,看看IntelliJ IDEA的控制台(下图),我们会看到报错信息,没事,我们在控制台用鼠标滚轮滑上去
直到划到这里,“欢迎访问网站",所以说浏览器的请求已经到了后台程序的方法体里面了,因为程序是接着执行的,想必就是因为return "";这里报的错了
接下来大家可以猜到这里的return "",其实双引号里面写的是返回的网页页面的路径,路径有默认起始的文件夹,也就是网页资源存放的文件夹的路径地址,那么能不能猜到网页资源应当放在哪里呢,默认文件夹是哪个?是的,没错我们看到下方有个resources的文件夹,resources顾名思义就是资源的意思,我们在templates文件夹下创建一个html文件,即我们的网页资源。
起个名字叫”home“(下图),按回车键
接下来我们进入到html页面代码区了,熟悉前端的小伙伴可以任意写自己的网站内容,比如我们可以在body标签下写上<h1>欢迎来到网站首页</h1>,我们还可以在head标签里面引入我们常用的jquery资源
下图这是我们写好的网站,感兴趣的小伙伴可以自由尝试往里面写自己想写的代码
接下来我们回到控制层的ComController类,我们将return "";改为return "home";(下图)
然后我们停止并重新运行主程序
下图我们看到程序已经程序跑起来了,然后我在浏览器端尝试请求一下,同样输入localhost:8080
猜猜这次我们看到什么了,是的,恭喜网站成功访问了,如果是第一次玩应该很欣喜啦!
我们打开浏览器的控制台(F12),来到Console这里(下图)
我们可以在控制台输入一个命令检查一下刚才的jquery有没有导入进去,我们写console.log($),然后回车,会看到(下图)
没错,输出的function函数就是jquery的$函数,我们可以点击这个函数瞧瞧,进入到Sources栏,我们可以看到jquery的源码,其实这里面是存放前台的文件资源目录的地方(就是后台传给前台的资源存放处),可以查看网站的资源,比如我们可以寻找一下该网站的html文件在哪里
我们找到了网页的html文件,当然如果网站有众多资源比如图片音乐字体html文件css文件js文件等等都可以在这里找(下图)
这样我就以简洁明了和简短的代码带大家以最快的速度构建了一个javaweb的项目,实现了后台网站资源传输到前端浏览器并被解析给游客浏览到网页内容的功能,至此我们成功搭建了一个web服务器,用的是个人PC。
但这个是只有局域网才可以看到。
好了,接下来大家还想听什么呢,是的,我们还没有操作到数据库呢。其实刚才这个相当于是个静态网站,里面的内容都是事先预定的,比如我已经往里面写了我想要的文章或者展示图片等。
我们去到一个网站
百度会查到hutool的介绍(
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
)
在hutool的文档里面我们找到入门和安装下面的文档并选中它(下图),提示我们应该粘贴一段配置到pom.xml文件里面,我们复制这一段配置
- <dependency>
- <groupId>cn.hutool</groupId>
- <artifactId>hutool-all</artifactId>
- <version>5.5.9</version>
- </dependency>
回到IntelliJ IDEA工具,找到pom.xml文件,在某处插入刚才的一段配置信息(下图)
插入好配置之后如下图所示,但记得点击第二步骤的maven更新导入Hutool包,导入好后我们就可以使用Hutool给我的许许多多的功能了,比如可以尝试一下控制台打印封装-Console
hutool的使用尝试,我们可以看到文档的说明,然后在test程序里面测试看看
test测试环境下,我们在contextLoads方法里面写Conso之后出现提示选择第二个,导入hutool的cn.hutool.core.lang.Console包
然后我们可以尝试输出看看(下图),一样的,运行之后看控制台
测试之后我们发现可以使用,如下图所示
然后演示怎么操作数据库
在hutool的文档里面我们找到数据库简单操作-Db(下图)
先在resources
目录下添加db.setting
文件(下图)
点击确定后,会看到创建了该文件,然后我们粘贴这段配置进去
- ## db.setting文件
- url = jdbc:MysqL://localhost:3306/test
- user = root
- pass = 123456
- ## 可选配置
- # 是否在日志中显示执行的sql
- showsql = true
- # 是否格式化显示的sql
- formatsql = false
- # 是否显示sql参数
- showParams = true
- # 打印sql的日志等级,默认debug,可以是info、warn、error
- sqlLevel = debug
配置的信息写对上,比如url = jdbc:MysqL://localhost:3306/数据库的名称,user = 用户名,pass = 密码(下图)
打开
测试下数据库连接由上两图可知,正确的数据库配置是
- ## db.setting文件
- url = jdbc:MysqL://localhost:3306/all_user
- user = root
- pass = 123456
- ## 可选配置
- # 是否在日志中显示执行的sql
- showsql = true
- # 是否格式化显示的sql
- formatsql = false
- # 是否显示sql参数
- showParams = true
- # 打印sql的日志等级,默认debug,可以是info、warn、error
- sqlLevel = debug
再尝试操作数据库之前我们还要引入MySQL JDBC驱动jar(下图)
如下图所示,配置好MysqL jdbc驱动,并且maven成功更新该驱动之后,我们就可以尝试对数据库进行操作了
那么操作数据库得代码怎么写呢,文档滚轮往下滑动,找到查询全部字段(下图)
- //user为表名
- Db.use().findAll("user");
那么这句代码写在哪里呢?在这之前我先新建service层和dao层(下图)
建好之后,我们在服务层加上@Service注解,在dao层加上@Repository注解,如下两图所示
- package com.project.dao;
- import cn.hutool.db.Db;
- import cn.hutool.db.Entity;
- import org.springframework.stereotype.Repository;
- import java.sql.sqlException;
- import java.util.List;
- @Repository
- public class UserDao {
- public List<Entity> getUser() throws sqlException {
- //user为表名
- List<Entity> list = Db.use().findAll("user");
- return list;
- }
- }
- package com.project.service;
- import com.project.dao.UserDao;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.sql.sqlException;
- import java.util.HashMap;
- import java.util.Map;
- @Service
- public class UserService {
- @Resource
- private UserDao userDao;
- public Map getUserService() throws sqlException {
- Map<String, Object> map = new HashMap<>();
- map.put("data",userDao.getUser());
- map.put("state","请求成功");
- return map;
- }
- }
最后我们再写控制层,代码是
- package com.project.controller;
- import com.project.service.UserService;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- import javax.annotation.Resource;
- import java.sql.sqlException;
- import java.util.Map;
- @Controller
- public class ComController {
- @Resource
- private UserService userService;
- @RequestMapping("/")
- String visitTheWebsite(){
- System.out.println("欢迎访问网站");
- return "home";
- }
- @RequestMapping("/getUser")
- @ResponseBody
- Map getUser() throws sqlException {
- return userService.getUserService();
- }
- }
写好之后,我们现在可以用浏览器请求了,我们重新启动程序。启动成功(下图)
然后我打开浏览器请求localhost:8080,会进到刚才的网站(下图)
- @RequestMapping("/getUser")
- @ResponseBody
- Map getUser() throws sqlException {
- return userService.getUserService();
- }
代码中"/getUser"代表访问的路径后缀,所以我们在localhost:8080后面加上"/getUser"变为localhost:8080/getUser,注意这里要加上@ResponseBody表明是返回数据而不是返回网页,不然指定的是网站地址。服务层的UserService类已经注入进来了,使用userService对象的getUserService方法调用服务层的这段代码,我们可以看到UserDao也注入进来了,userDao.getUser()调用dao层操作数据库的代码(下图)
- @Service
- public class UserService {
- @Resource
- private UserDao userDao;
- public Map getUserService() throws sqlException {
- Map<String, Object> map = new HashMap<>();
- map.put("data",userDao.getUser());
- map.put("state","请求成功");
- return map;
- }
- }
调用dao层操作数据库的代码,返回user表的List<Entity>集合,Entity已经封装好,是个对象,可以直接返回前端网页(下图)
- public List<Entity> getUser() throws sqlException {
- //user为表名
- List<Entity> list = Db.use().findAll("user");
- return list;
- }
所最后控制层的getUser方法返回的是服务层的map对象userService.getUserService()(下图)
- @RequestMapping("/getUser")
- @ResponseBody
- Map getUser() throws sqlException {
- return userService.getUserService();
- }
分析完控制层、服务层、dao层这些代码后,我们可以尝试看看有没有请求到数据并传回json格式的数据到前端网页
在浏览器输入http://localhost:8080/getUser(下图),看到数据库的user表数据已经查出来了
对照下数据库(下图)
如果用ajax请求返回的数据进到回调函数即可正常处理。
至此,我讲了如果极快速的搭建一个javaweb后台项目,使用个人PC作为服务器,成功访问网站资源、连通并操作数据库还有前面的Servlet、java、springboot等等的介绍
PS:从早上写到晚上10点了,终于完成了,如果大家有什么宝贵的建议请留言!谢谢!
再说一下,文章中提到的不只限于局域网,让在互联网上冲浪的任何人都可以输入地址查找并进入到我们的网站,是的,任何一个人只要连上了互联网都可以访问得到这个网站,也就是说到山区手机连个信号打开浏览器输入个URL地址便可以访问得到我们的网站。这个确实可以做到,不过这里不写,这里已经完成了如何搭建一个java服务器后台程序和网站的教程还有操作数据库,估计可以算是比较有价值的了,这些是工作之余抽空摸索的,平时不做java开发,好像也难有机会,先到这里了,希望能够帮助到大家,互相学习,祝各位工作顺利,心想事成!!
从0开始开发10万行代码的SpringBoot大型金融项目(入门+项目+高阶)从0开始开发10万行代码的SpringBoot大型金融项目(入门+项目+高阶)从0开始开发10万行代码的SpringBoot大型金融项目(入门+项目+高阶)从0开始开发10万行代码的SpringBoot大型金融项目(入门+项目+高阶)从0开始开发10万行代码的SpringBoot大型金融项目(入门+项目+高阶)从0开始开发10万行代码的SpringBoot大型金融项目(入门+项目+高阶)从0开始开发10万行代码的SpringBoot大型金融项目(入门+项目+高阶)