Java EE

Tomcat源码分析(2)-连接器Connector整体架构

泄露秘密 提交于 2020-10-06 03:09:18
在 上一篇 博文中,主要分析了tomcat的整体架构,通过上一篇的分析可以知道,tomcat主要有两部分组成,分别为连接器(Connector)和容器(Container)。本文介绍连接器(Connector)。 一、Connector的主要功能 连接器主要用于对外交流,它负责接收外部的请求,然后把请求转交给container进行处理。主要功能如下: 监听网络请求、接受字节流 根据应用层协议(HTTP or AJP)把接受到字节流转换成TomcatRequest 把TomcatReqeust转换成ServletRequest 调用容器Servlet,得到ServletResponse 把ServletRespone转换成TomcatResponse 把TomcatResponse转化成字节流,返回给浏览器 基于以上详细分析可知Connector的主要功能可以抽象为三点 网络监听 协议解析处理 协议屏蔽转换(tomcatRequest到servletReqeust转换,servletResponse到tomcatResponse的转换) 二、Connetor内部的组件 基于上述的分析,接下来具体看tomcat connector的代码组件,主要有三个 Endpoint-用于网络监听 Processor-用于协议解析处理 Adapter-用于转换

一言难尽,Jpa这个功能差点让我丢了工作

别等时光非礼了梦想. 提交于 2020-10-05 17:51:28
故事背景 前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸。 故事细节 在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了,相信大家都有所了解或者也用过。 在 jpa 中有一个配置项,可以让程序在启动的时候自动初始化表结构或者更新表结构的功能。听上去很不错,非常实用。 其实这是一个非常危险的功能,个人觉得不应该提供这种功能,只要留了口子就有可能会出问题。 这个配置就是: spring.jpa.hibernate.ddl-auto create( 危险系数 2 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。 create-drop( 危险系数 3 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。 程序停止的时候会将数据库中所有表删除掉。 update( 危险系数 1 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会判断有没有新增字段或者修改长度之类的,如果有则会更新表结构,不会影响数据。 validate( 危险系数 0 颗星 ) validate 不会更新和删除表或者数据

3 月,跳不动了?

杀马特。学长 韩版系。学妹 提交于 2020-10-05 17:13:21
不少单位已经开始复工了,跳槽季已经开始。虽说大多数互联网企业,像腾讯、字节跳动等,都已经开通远程面试环节,而且薪资有走高的趋势。但据目前看,面试难度大了许多,甚至有朋友面试后怀疑:自己真的落伍了? 比如,面试高级开发岗位时,面试官不仅考察基础能力,更会重点考察高并发、分布式等架构相关的技术背后的思考逻辑,比如:微服务,负载均衡,Redis,RPC等。(今年 Java 面试到底聚焦在知识点?文末扫码获取) 但这些技术包含了 N 多优化、N 多细节,对于一些 coding 的朋友,由于接触不到一线实战架构设计,想必并不是很了解。 刚好,趁着这段时间,整理了一套 “ 微服务+分布式 ” 的视频干货,讲解很透彻。今天分享给大家。这份资料 尤其适合 以下人群: 1.没有用过微服务技术,只会用传统的 SSM 框架 2.用过 Spring Cloud、Dubbo等技术,但是只限于使用,遇到问题基本无法解决 3.从来没有系统学习微服务、分布式架构,觉得架构设计是遥不可及的 4.对于微服务、分布式技术有所了解,但尚没有设计高可用高并发的实践经历 学完这份视频你将获得哪些收获? 理解当下最火热的微服务架构原理及其开源框架; 触及一线大厂所配备的微服务核心技术内幕知识; 对照自己掌握知识点进行查漏补缺,帮助扫除知识盲区、重构知识体系。 视频围绕“ 如何设计高可用高并发的微服务架构? ”的主题

仅限24小时免费供应!阿里Spring Cloud内部从零开始升级笔记

可紊 提交于 2020-10-05 13:54:16
Spring Cloud作为阿里巴巴内部最新出品的微服务框架,spring cloud 提供一些工具迅速构建一些常用模式的分布式系统(例如 配置管理,服务发现,断路器,路由,微代理,控制总线,token,全局锁,分布式sessions,cluster state),使用Spring Cloud开发人员可以快速站出实现这些模式的服务和应用程序。 笔记从架构设计、应用开发和运维部署三个方面出发,对微服务架构设计的实施进行了全方位的阐述和深入实践,并结合生产实际讲解了Spring Cloud、Docker 和Jenkins等工具的具体使用方法。文中通过一个互联网电商平台实例实现了高并发的微服务架构设计,并通过详细的开发和实施过程,演示了构建一个安全可靠、稳定高效并可持续扩展的系统平台的方法。 下面我们一起来学习一下这份笔记,由于文章的篇幅有限,没办法把全部的内容为大家展示出来,为了不影响大家的阅读体验,免费的获取方式我放在了文末,欢迎自取! 1微服务架构与Spring Cloud 微服务概念的由来 微服务的定义 微服务架构与整体式架构的区别 微服务架构与SOA的比较 为什么要使用微服务架构 为实施微服务架构做好准备 为什么要使用Spring Cloud Spring Cloud组件介绍 Spring Cloud的版本说明 2微服务架构最佳设计 合理划分微服务 微服务治理 Rest

阿里P5-基础知识

让人想犯罪 __ 提交于 2020-10-05 12:26:12
阿里P5-基础知识 1.Try…catch…finally 执行中,在 try 或 catch代码块中return还会执行finally代码? 答案首先是肯定的,因为Try…catch…finally代码块里的finally子句里的语句是一定会被执行的。只是在finally子句的语句会对整个代码块的执行结果会有影响吗?会有的,主要有两大类情况: a.finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。 b.如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况: 1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。 2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。 2. Interface与abstract类的区别 含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的

「2020最新」Spring最易学习教程 4—整合Mybatis 事务控制

江枫思渺然 提交于 2020-10-05 04:56:20
0 复习 代理模式 代理模式,可以为目标类添加额外功能。 Spring 动态代理 定义目标类对象 定义额外功能,增强。实现Spring内置的接口 配置增强类 定义切入点 编织组装 增强类型 前置增强 MethodBeforeAdvice 后置增强 AfterReturningAdvice 异常增强 ThrowsAdvice 环绕增强 MethodInterceptor 切入点表达式 execution(返回值类型 包名.类名.方法名(参数表)) execution(* com.bcl.service.*.*(..)); args(参数表) within(全类名) @annotation(自定义注解) 事务的隔离级别 1 再谈web.xml 1.1 web.xml中标签的加载顺序 到目前为止web.xml中出现的标签: servlet filter listener context-param 。 加载顺序,从前到后: context-param 定义一对键值对数据,通常为listener使用 listener ContextLoaderListener:在web应用启动时执行,创建Spring工厂 filter Struts2Filter:过滤所有请求 servlet 1.2 Servlet的url-pattern的配置方式 Servlet的url-pattern有4种配置格式:

spring boot+JPA+bootstrap+thymeleaf+MySQL整合集成,数据的增删改查+搜索。适合初学者借鉴

限于喜欢 提交于 2020-10-04 22:49:42
项目启动截图 查询:http://localhost:9000/song/list 添加:http://localhost:9000/song/myAdd 修改:http://localhost:9000/song/update/%201 搜索:http://localhost:9000/song/search?username=李天 页面简单没有美化 删除:http://localhost:9000/song/delete/* 数据库 CREATE TABLE ` user ` ( ` id ` int ( 11 ) NOT NULL AUTO_INCREMENT , ` username ` varchar ( 45 ) NOT NULL , ` password ` varchar ( 45 ) NOT NULL , PRIMARY KEY ( ` id ` ) ) ENGINE = InnoDB AUTO_INCREMENT = 25 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci spring boot项目实战开始POM文件 < ? xml version = "1.0" encoding = "UTF-8" ? > < project xmlns = "http://maven.apache.org/POM

互联网的寒冬下各大一线互联网公司还在用SpringBoot这是为什么?

可紊 提交于 2020-10-04 20:55:14
引言 现在各大技术社区 Spring Boot 的文章越来越多,Spring Boot 相关的图文、视频教程越来越多,使用 Spring Boot 的互联网公司也越来越多; Java 程序员现在出去面试, Spring Boot 已经成了必问的内容。 一切都在证明,Spring Boot 已经成为了 Java 程序员必备的技能。并且可以预见的是未来 Spring Boot 的发展还会更好。 所以对Java程序员来说其中不乏说对 Spring Boot 非常熟悉的,然后当问到一些 Spring Boot 核心功能和原理的时候,没人能说得上来,或者说不到点上,可以说一个问题就问趴下了!(问题:你能讲下为什么我们要用 Spring Boot 吗?) 相信我,上面这些类似的问题,90%有经验的Java程序员超都曾遇见过!但很少有系统化的回答。 因此,总结了这份Spring Boot核心知识点实战教程,通过这份教程,带你梳理Spring Boot 技术体系。 文末有彩蛋~ Spring Boot2教程 在Spring Boot项目中,正常来说是不存在XML配置,这是因为Spring Boot不推荐使用 XML ,注意,并非不支持,Spring Boot 推荐开发者使用 Java 配置来搭建框架,Spring Boot 中,大量的自动化配置都是通过 Java 配置来实现的,这一套实现方案

Java学习路线总结,已Get腾讯Offer

佐手、 提交于 2020-10-04 18:44:04
本人19本科应届生,专注Java后台学习,已签腾讯WXG的offer(日后转c++)。 众所周知,鹅厂后台一直以C++为重,面试官也是做C++开发。但是语言只是工具,对代码的理解才是核心。面试时重点考察的是基础知识,以及解题的思考过程。凭借着对Java的理解去回答,也受到了面试官的认可,最终幸运的拿到offer。 Java基础 做java开发,java基础是最需要下功夫的一项。在校招时最注重的就是基础,拿不出像样的项目没关系,但是基础万万不可不牢固。 想要基础扎实,看书沉淀是必须的,有一些编程基础的同学推荐阅读《JAVA核心技术 卷1》,可以跳过图形程序设计、事件处理、Swing、applet以及部分日志章节,如果比较吃力也可以先跳过多线程章节。 看完一本书,一定要多加练习去理解和吸收。科班的同学可以用java写实验,写的同时一定要多多运用学到的特性。练习阶段各种设计模式套上去用,不要怕笨重,即使是滥用特性和设计模式也是一种有效的学习。 有了一定量的编程经验后,可以再回过头将《JAVA核心技术 卷1》速读一遍,查漏补缺。同时我们开始扩宽我们的知识领域,开始进行JavaWeb的学习。 JavaWeb基础 JavaWeb是一系列技术的综合,也是大多数Java学习者日后的技术方向。及早的了解JavaWeb也有利于更深层面理解,Java在完整的应用中,是如何与各个模块交互并发挥作用的。

SpringMVC(一)

ぐ巨炮叔叔 提交于 2020-10-04 11:52:13
SprngMVC(一) 回顾MVC 什么是MVC Model1时代 Model2时代 SpringMVC 中心控制器 SpringMVC原理 回顾MVC 前言:框架方面容易上手,但是快上手的同时遇到麻烦就会死机,打我自己举例吧,5月里14天搞定SSM,觉得自己可以上手参加一些项目了,但是进阶SpringBoot的时候瞬间死机,回头反复ssm;底层的知识不稳,盖的项目就难以有进展,所以这里先做一些笔记搞定以前的知识分分类,排排序,吸收吸收。与JavaWeb阶段的学习中的MVC架构类似,但是不同的是容器的参与,SpringIoc容器的参与和注解的使用大大解放了程序开发的效率和整体代码的架构,使得维护更加方便,并且也便于他人观看,更重要的是思想的融合,动手能力其实增加了许多,许多学习者包括我在内也是觉得代码量降低了工作量降低了,但是底层的知识尤为重要,掌握底层就怕技术更新!这里是我学习JavaEE框架中SpringMVC的小笔记,老师是狂神,由于老师的笔记太过于完美,我这里需要完善的就很少,但是并不是照搬照抄,变成自己的知识才是真的学会了,这里先感谢一下狂神老师~~~ 什么是MVC MVC是 模型(Model) 、 视图(View) 、 控制器(Controller) 的简写,是一种软件设计规范。 是将业务逻辑、数据、显示分离的方法来组织代码。 MVC不是一种设计模式,MVC是一种