Spring Boot 集成 Servlet 带来的好处
Spring Boot 集成 Servlet 带来的好处Spring Boot 通过自动配置和简化配置的方式,使得开发者不需要直接与Servlet API频繁打交道,从而简化了Web应用的开发。
以下是Spring Boot封装Servlet的一些具体方式:
自动配置:Spring Boot 提供了很多自动配置类,这些类可以自动根据类路径中的依赖和应用程序的配置来配置常见的Servlet组件。例如,DispatcherServlet会被自动配置和注册。
Spring MVC:Spring Boot 默认集成了Spring MVC,这是一种基于Servlet的Web框架。通过Spring MVC,开发者可以使用注解(如@RestController、@RequestMapping)来定义控制器,而不需要直接编写Servlet类。
嵌入式Servlet容器:Spring Boot可以使用嵌入式的Servlet容器(如Tomcat、Jetty、Undertow),这使得开发者可以将Web应用打包成一个可执行的JAR文件,而不需要单独部署到外部的Servlet容器中。
过滤器和监听器:S ...
Spring Boot 配置 Servlet
Spring Boot 配置 ServletSpring Boot 集成了 Servlet,极大的简化了开发,一般俩说,我们只需要通过配置文件配置一个server端口就可以,以下内容了解即可
Spring Boot 提供了多种方式来修改 Servlet 的配置。
常见的方法包括:
通过 application.properties 文件进行配置
通过 Java 配置类进行配置
通过 application.properties 配置可以在 application.properties 文件中设置一些常见的 Servlet 参数。例如:
12345678# 设置服务器端口server.port=8081# 设置上下文路径server.servlet.context-path=/myapp# 设置session超时时间(单位:秒)server.servlet.session.timeout=3600
通过 Java 配置类进行配置如果你需要对 Servlet 做更复杂的配置,可以通过 Java 配置类来实现。以下是一个示例:
1234567891011121314151617imp ...
http从请求到响应
http从请求到响应在一个标准的Java Web应用中,当一个HTTP请求从Tomcat到Controller的过程中,会经历多个阶段,包括Tomcat的请求处理、Filter链的处理、Servlet的处理、Interceptor拦截以及最终的Controller处理。
Step 1. Tomcat 接收到请求当客户端(例如浏览器)发送一个HTTP请求时,Tomcat作为Web服务器首先接收到该请求。Tomcat会根据请求的URL找到对应的Web应用,并将请求交给该Web应用的Servlet容器进行处理。
Step 2. 创建 HttpServletRequest 和 HttpServletResponse 对象Tomcat会创建HttpServletRequest和HttpServletResponse对象,这两个对象封装了HTTP请求和响应的所有信息。
Step 3. 过滤器链(Filter Chain)在请求到达Servlet之前,Tomcat会先经过一系列的过滤器(Filter)。这些过滤器可以对请求和响应进行预处理和后处理。过滤器链的处理步骤如下:
过滤器初始化:在 ...
何为 ObjectFactory
何为 ObjectFactory
顾名思义,是一个对象工厂,封装了对象的创建过程
Spring单例模式的Bean在创建的过程会用到三级缓存机制,在三级缓存的Map中存储的就是ObjectFactory
ObjectFactory用于延迟代理对象的创建,用于判断这个Bean是否有代理,如果有代理就返回代理对象,否则返回原本的对象
FactoryBean 详解
FactoryBean 详解FactoryBean 是 Spring 框架提供的一种特殊的 Bean,它允许我们自定义实例化逻辑,并且可以控制 Spring 容器中 Bean 的创建过程。
使用 FactoryBean 可以实现一些复杂的实例化过程,或者用来创建一些第三方库的对象,这些对象可能并没有默认的构造方法,或者需要某种特定的初始化方式。
为什么需要 FactoryBean?FactoryBean使用了代理的思想,通过FactoryBean,可以实现:
复杂的实例化逻辑:有时候我们需要创建的对象比较复杂,无法通过简单的构造函数或属性注入完成,这时可以使用 FactoryBean。
延迟初始化:某些对象的创建可能比较耗时,或者依赖于某些运行时参数,使用 FactoryBean 可以更灵活地控制这些对象的创建时机。
封装第三方库对象的创建:有些第三方库的对象创建可能需要复杂的配置或初始化步骤,FactoryBean 可以很好地封装这些细节。
FactoryBean 的使用要使用 FactoryBean,需要实现 org.springframework.beans.fact ...
BeanFactory 详解
BeanFactory 详解简介BeanFactory 是 Spring 框架中最基础的接口之一,它定义了 Spring 容器中管理 bean 的基本功能。
BeanFactory 是 IoC(Inversion of Control,控制反转)容器的核心,它负责实例化、配置和管理应用程序中的对象(bean)。
BeanFactory 的核心概念BeanFactory 提供了一种从 Spring 容器中获取 bean 的方法。其核心概念包括:
Bean:由 Spring 容器管理的对象。
Factory:BeanFactory 作为工厂模式的实现,负责创建和管理 bean 的实例。
IoC 容器:BeanFactory 是 Spring IoC 容器的一种实现,负责管理应用程序的依赖关系。
BeanFactory 的实现BeanFactory 是一个接口,Spring 提供了多个实现类,其中最常用的是 DefaultListableBeanFactory。以下是一些常见的实现类:
XmlBeanFactory
1234567891011121314151617181920 ...
Spring Bean 详解
Spring Bean 详解Spring 的核心是依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)。
在 Spring 框架中,Bean 是一个核心概念,是Spring管理的基本单位。
本文将详细介绍 Spring Bean 的相关内容,包括其定义、生命周期、配置方式和常见用法。
什么是 Spring Bean在 Spring 框架中,Bean 是由 Spring IoC 容器管理的对象。
简单来说,任何一个由 Spring 容器初始化、装配和管理的对象都可以被称为 Spring Bean。
Bean 是应用程序的核心构建块,通过配置文件或者注解来定义,Spring 容器负责它们的生命周期和依赖关系。
Spring Bean 的生命周期Spring Bean 的生命周期包括以下几个阶段:
实例化(Instantiation):Spring 容器通过反射机制创建 Bean 的实例。
属性赋值(Populate Properties):Spring 容器将配置文件中指定的属性赋值给 Bea ...
count(column_name),count(1),count(*)
count(column_name),count(1),count(*)count()用于统计行数,常见用法有:
count(column_name)
count(1)
count(*)
区别
count(column_name) 只能统计非空的数据行,而count(1)/count(*)则会统计所有行
count(1)和count(*)的效率一致,但是count(*)的成本更低
对于InnoDB,count(1)和count(*)都不适合大规模数据,对于MyISAM,维护了一个size属性来表示数据总数
为什么count(*)成本更低,因为二级索引比聚簇索引占用的存储空间更小
Maven创建子模块
Maven创建子模块在一个多模块的Maven项目中,通常使用<module>标签在父POM(Project Object Model)文件中来定义子模块。
这样可以将多个Maven项目组织在一起,使它们成为一个整体的构建单元。
如何定义子模块
首先,创建一个父项目的POM文件pom.xml,其中包含所有子模块的定义:
12345678910111213141516<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> ...
SQL必知必会-读书笔记(九)
SQL必知必会-读书笔记(九)何为查询(query)
本质上任何SQL都是查询。但此术语一般用于SELECT语句
子查询
子查询总是从内向外处理
MySQL 中,子查询并不局限于仅仅只能查询单列,但对于部分SQL语言来说,可能限制只能查询单列
子查询并不总是执行数据检索最有效的方法,视具体情况,联表的优先级会大于子查询
有多个查询时,尽量用完全限定列名(表名.列名)
子查询常用于 IN() 中
联表 JOIN
联表是关系型数据库最关键,最核心,最灵魂的操作
关系型数据库为了保证良好的可伸缩性,通常会将关系和具体内容分开存储,在查询完整信息时,就需要使用到 JOIN
JOIN 时不加条件,最终返回的结果将会是两张表的笛卡尔积,检索出的行数将是表1的行数×表2的行数,这种联结也叫叉联结
ON 条件为等值时也叫等值联结
联结是很消耗资源的,联结的表越多,性能下降越厉害,虽然SQL本身不限制每个联结约束中表的数量,但原则上联结的表越少越好
使用联结时可以多看执行计划,找出最合适的联结方案
