springboot
-
什么是 XML?
XML 指可扩展标记语言(EXtensible Markup Language)。 XML 是一种很像HTML的标记语言。 XML 的设计宗旨是传输数据,而不是显示数据。 XML 标签没有被预定义。您需要自行定义标签。 XML 被设计为具有自我描述性。 XML 是 W3C 的推荐标准。
- 把数据从 HTML 分离
简化数据共享
简化数据传输
简化平台变更
使您的数据更有用
用于创建新的互联网语言
- 把数据从 HTML 分离
-
DispatcherServlet
DispatcherServlet 处理流程 在整个 Spring MVC 框架中,DispatcherServlet 处于核心位置, 它负责协调和组织不同组件完成请求处理并返回响应工作。 DispatcherServlet 是 SpringMVC统一的入口,所有的请求都通过它。 DispatcherServlet 是前端控制器,配置在web.xml文件中,Servlet依自已定义的具体规则拦截匹配的请求,分发到目标Controller来处理。 初始化 DispatcherServlet时,该框架在web应用程序WEB-INF目录中寻找一个名为[servlet-名称]-servlet.xml的文件,并在那里定义相关的Beans,重写在全局中定义的任何Beans。
-
什么是javaBean
首先明确的是JavaBean是一种Java类,而且是一种特殊的、可重用的类。 必须具有无参数的构造器,所有的属性都是private的,通过提供setter和getter方法来实现对成员属性的访问。 JavaBean的种类按照功能可以划分为可视化和不可视化两类。 可视化的JavaBean就是拥有GUI图形用户界面的,对最终用户是可见的。 不可视化的JavaBean不要求继承,它更多的被使用在JSP中,通常情况下用来 ** 封装业务逻辑、数据分页逻辑、数据库操作和事物逻辑等,这样可以实现业务逻辑和前台程序的分离 ** ,提高了代码的可读性和易维护性,使系统更健壮和灵活。 随着JSP的发展,JavaBean更多的应用在非可视化领域,并且在服务器端应用方面表现出了越来越强的生命力。--form 百度百科 JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。 特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。 名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。 --from 维基百科
-
什么是JSP
java服务器页面 JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。 JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。 JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。 JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。 JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。 另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。 标签库能增强功能和服务器性能,而且不受跨平台问题的限制。 JSP文件在运行时会被其编译器转换成更原始的Servlet代码。 JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
-
什么是Servlet
Servlet 是 Server Applet 的缩写,译为“服务器端小程序”,是一种使用 Java 语言来开发动态网站的技术。Servlet 虽然被称作“小程序”,但是它的功能却异常强大,因为它是基于 Java 的,几乎可以使用所有的 Java API,Java 能做的事情,Servlet 也能做。 Java 是一种功能强大的通用型编程语言,可以处理 HTTP 请求,可以访问数据库,可以生成 HTML 代码,您完全可以使用原生 Java 来开发动态网站。但是,使用原生 Java 开发动态网站非常麻烦,需要自己解析 HTTP 请求的报头,需要自己分析用户的请求参数,需要自己加载数据库组件……种种原因导致使用原生 Java 开发动态网站几乎是一件不能被接受的事情。正是基于这种原因,Java 官方后来推出了 Servlet 技术,它对开发动态网站需要使用的原生 Java API 进行了封装,形成了一套新的 API,称为 Servlet API。 使用 Servlet 开发动态网站非常方便,程序员只需要集中精力处理业务逻辑,不需要再为那些基础性的、通用性的功能编写代码,这使得 Servlet 在动态网站开发领域具备了很高的实用性。 Servlet 基于 Java,可以使用几乎全部的 Java API,所以它的功能异常强大,完全可以胜任企业级开发,能够处理那些高并发、大吞吐量、业务逻辑复杂的应用场景。 您可以这样理解,Servlet 是 Sun 公司推出的一种基于 Java 的动态网站开发技术。编写 Servlet 代码需要遵循 Java 语法,一个 Servlet 程序其实就是一个按照 Servlet 规范编写的 Java 类。Servlet 程序需要先编译成字节码文件(.class文件),然后再部署到服务器运行。 Servlet 是一种规范 严格来说,Servlet 只是一套 Java Web 开发的规范,或者说是一套 Java Web 开发的技术标准。只有规范并不能做任何事情,必须要有人去实现它。所谓实现 Servlet 规范,就是真正编写代码去实现 Servlet 规范提到的各种功能,包括类、方法、属性等。 Servlet 规范是开放的,除了 Sun 公司,其它公司也可以实现 Servlet 规范,目前常见的实现了 Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称为“Servlet 容器”。Servlet 容器用来管理程序员编写的 Servlet 类。
-
JSP与servlet
JSPServlet 是第一代 Java Web 开发技术,它将 HTML 代码以字符串的形式向外输出,编写 HTML 文档就是在拼接字符串,非常麻烦,所以 Java 官方又推出了第二代 Web 开发技术——JSP。 JSP 才是现代化的 Web 开发技术,它允许 HTML 代码和 JSP 代码分离,让程序员能够在 HTML 文档中直接嵌入 JSP 代码。 现在没有人直接使用 Servlet 开发动态网站,大家都转向了 JSP 阵营。但是 JSP 依赖于 Servlet,用户访问 JSP 页面时,JSP 代码会被翻译成 Servlet 代码,最终,HTML 代码还是以字符串的形式向外输出的。您看,JSP 只是在 Servlet 的基础上做了进一步封装。 JSP 代码可以调用 Servlet 类,程序员可以将部分功能在 Servlet 中实现,然后在 JSP 中调用即可。 总之,Servlet 是 JSP 的基础,Servlet 虽然不直接面向用户,但是它依然是 JSP 的后台支撑,
springboot原理初探
自动配置:
pox.xml
- parent->(发现还有parent)parent->最终到达:spring-boot-dependencies!
- 各种依赖jar包走在这个下面
- 即:核心的依赖在父工程中
- 我们在写或者引入Springboot依赖的时候,不需要指定版本,因为有这些版本仓库。
启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
-
启动器:说白了就是Springboot的启动场景;
- 比如用了:spring-boot-starter-web ===》 就会自动导入web环境的依赖
- Springboot会把所有的功能场景,全都变成一个个启动器
- 例如
- 消息队列:<activemq.version>5.16.5</activemq.version>
- <aspectj.version>1.9.7</aspectj.version>
- AspectJ是一个代码生成工具(Code Generator)。
- AspectJ语法就是用来定义代码生成规则的语法。您如果使用过Java Compiler Compiler (JavaCC),您会发现,两者的代码生成规则的理念惊人相似。
- AspectJ有自己的语法编译工具,编译的结果是Java Class文件,运行的时候,classpath需要包含AspectJ的一个jar文件(Runtime lib)。
- 数据库连接池DBCP2
-
用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。
-
<commons-dbcp2.version>2.9.0</commons-dbcp2.version>
-
<commons-pool2.version>2.11.1</commons-pool2.version>
-
- 数据库连接:<db2-jdbc.version>11.5.7.0</db2-jdbc.version>
-
是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发者能够编写数据库的程序。
-
简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。
-
- 缓存的:<ehcache.version>2.10.9.2</ehcache.version>
- EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。
- 模版引擎:<freemarker.version>2.3.31</freemarker.version>
- FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
-
我要用什么功能,就只需要找到指定的启动器 ‘starter’
主程序
@SpringBootApplication // @SpringBootApplication : 标注这个类是springboot的应用
public class Springboot01HelloworldApplication {
public static void main(String[] args) {
// 将springboot应用启动
SpringApplication.run(Springboot01HelloworldApplication.class, args);
}
}
-
注解
@SpringBootConfiguration : springboot 的配置 @Configuration : 配置类 @Component :说明是个组件 @EnableAutoConfiguration : 自动配置 @AutoConfigurationPackage : 自动配置包 PackageImports(metadata) @Import({AutoConfigurationPackages.Registrar.class}) : 自动配置‘包注册’ @Import(AutoConfigurationImportSelector.class) : 自动配置,导入选择 // 获取所有的配置 List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List<String> configurations = new ArrayList<>( SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader())); ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader()).forEach(configurations::add); Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you " + "are using a custom packaging, make sure that file is correct."); return configurations; }
META-INF/spring.factories:自动配置的核心文件 Properties properties = PropertiesLoaderUtils.loadProperties(resource); 所有资源加载到配置类中!!
结论:springboot的所有自动配置都是在启动的时候扫描并加载:spring.factories所有自动配置类都在这里
但是不一定生效 ,要判断条件是否成立,只要导入了相应的start,就有对应的启动器了,
有了启动器,我们的自动装配就会生效,然后配置成功
1.springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值
2.将这些自动配置的类导入容器,自动配置类就会生效,帮我们进行自动配置
3.以前需要我们自己配置的东西,springboot帮我们做了
4.整个javaEE,解决方案和自动配置的东西,都在spring-boot-autoconfigure-2.7.1.jar 这个包下
5.它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;
6.容器中也会出现很多 : xxxxxAutoConfiguration的文件(@Bean),就是这些类,给容器导入了这个场景需要的所有组件;
并自动配置, @Configuration, JavaConfig!
7.有了自动配置类,免去了我们手动便携配置文件的工作