开始支持内部类和反射 JDK 1.2 1998.12 引入集合框架Collections、Map等。...从此版本开始,分为3个版本:J2SE/J2EE/J2ME(注:1999.04著名的HotSpot虚拟机诞生,顺势推出了Java EE首个版本) JDK 1.3 2000.05 千禧年的第一个版本,对类库进行了优化...Java EE发展史 J2EE(JavaEE)自1999年首次发布以来,已成为实现和部署可移植、多层企业应用程序的集成标准(它是标准,它是规范),现在了解下它的发展史,记录到如下表格(从成体系的Java...EE 1.4版本开始)。...从Java EE到Jakarta EE,它能否重新焕发生命力我不知道,但留下来的不少东西依旧是目前的主流(如Servlet规范、JPA等等),具有非常高的学习价值,切莫轻视。
Java EE 简介 Java EE 基本架构 JavaEE 的诞生是为了解决传统 C/S 架构的弊端:客户端臃肿庞大,扩展性差等弊端。 JavaEE 将传统的两层结构细分为了四层。...这四层分别是:Client 层, Web 层, Business 层, EIS 层 Java EE 客户端 Java EE客户端层可分为以下几种: Web 客户端,通常是浏览器呈现的网页,这种客户端成为轻量级客户端...层与层之间通信,Web 客户端一般先于 Web 层打交道,Web 层与 Business层通讯, Business层从 EIS层交互。...Java EE 技术变迁 Java EE前身是J2EE(J2EE最后一个版本号是1.4),截止到目前,最新的是 1.7版本。...下图揭示了Java EE中的技术变迁: 每种技术的简单介绍请参照这里; Java EE 容器 前面我们介绍Java EE分层的时候,Web 层和 Business 层用的是 组件(Component),
理解FutureTask 想象去吃麻辣烫,当餐点好后,后厨就开始做了。...延迟1秒后,每2秒执行一次任务(周期从任务开始时计算) scheduledThreadPool.scheduleAtFixedRate(() -> { System.out.println...线程池就是为了解决这个问题,如果某个线程不再使用了,并不是真正把线程释放,而是放到一个"池子"中,下次如果需要用到线程就直接从池子中取,不必通过系统来创建了。...操作逻辑: S = S + 1; 若 S > 0:当前进程继续执行(无等待进程); 若 S ≤ 0:从该信号量的等待队列中唤醒一个进程,使其进入就绪状态,当前进程继续执行。...后继进程开始前执行P 操作(等待信号,若S=0则阻塞,直到前驱进程唤醒)。
前言 从编写Java代码的角度来说,线程一共有六种状态;但是以操作系统的视角来看,线程状态可以分为物种 六种划分 调用getState()方法获取当前线程状态 一.NEW 定义:线程(对象)被创建但还没有启动
来自:开源中国 https://www.oschina.net/news/108108/java-ee-rename-as-jakarta-ee Eclipse基金会最近对 Java EE 标准的每个规范进行了重命名...新的名称Jakarta EE是Java EE的第二次重命名。2006年5月,“J2EE”一词被弃用,并选择了Java EE这个名称。...同样,作为Java SE 5(2004)的一部分,数字2也从J2SE中删除了,那时谷歌还没有上市。 因为不能再使用javax名称空间,Jakarta EE提供了非常明显的分界线。...Java EE 5(2005)到Java EE 8(2017)使用javax命名空间。 Java EE 4使用javax命名空间。...某些框架(如MicroProfile)正在使用Jakarta EE的其他部分,或者被Jakarta EE的其他部分使用。
synchronized 就会阻塞等待 进入synchronized修饰的代码块,相当于加锁 退出synchronized修饰的代码块,相当于解锁 synchronized用的锁是存在Java...Java 中的synchronized是可重入锁,因此没有上面的问题 for (int i = 0; i < 50000; i++) { synchronized (locker) { synchronized...并让计数器自增 解锁的时候计数器递减为0的时候,才真正释放锁(才能被别的线程获取到) 2、synchronized 使用示例 synchronized 本质上要修改指定对象的“对象头”,从使用角度来看...method() { } } 我们重点要理解,synchronized锁的是什么,两个线程竞争同一把锁,才会产生阻塞等待 两个线程分别尝试获取两把不同的锁,不会产生竞争 5.3 Java...标准库中的线程安全类 Java 标准库中很多都是线程不安全的.这些类可能会涉及到多线程修改共享数据,又没有任何加锁措 施. • ArrayList • LinkedList • HashMap • TreeMap
为什么叫 J2EE 1998年12月,SUN公司发布了JDK1.2,开始使用Java 2 这一名称。...最开始的时候 Sun 是希望这个标准和基于 Java 的扩展给企业用户用的。 按照 Java 版本的定义,Java 是不使用主版本的,所以自然就使用了数字 2。 这个就导致 J2EE 实在是难理解。...Java EE 在 2006 年 ,Java 1.5 版本发布了,J2EE 这个名字就停止使用了,确实这个名字也难理解。...J2EE 就被改成了 Java EE 或者 Java Platform Enterprise Edition 这个名字更加简单明了,去掉了比较有歧义的数字 2。...https://www.ossez.com/t/j2ee-java-ee-jakarta-ee/14382
Eclipse基金会最近对Java EE标准的每个规范进行了重命名,阐明了每个规范在Jakarta EE平台未来的角色。 新的名称Jakarta EE是Java EE的第二次重命名。...2006年5月,J2EE一词被弃用,并选择了Java EE这个名称。...新的名称Jakarta EE是Java EE的第二次重命名。2006年5月,“J2EE”一词被弃用,并选择了Java EE这个名称。...同样,作为Java SE 5(2004)的一部分,数字2也从J2SE中删除了,那时谷歌还没有上市。 因为不能再使用javax名称空间,Jakarta EE提供了非常明显的分界线。...Java EE 5(2005)到Java EE 8(2017)使用javax命名空间。 Java EE 4使用javax命名空间。
2017年8月,Oracle(甲骨文)决定将Java EE(Java Enterprise Edition)移交给开源组织,最后Eclipse基金会接手。 ?...不过,甲骨文可不允许开源组织用Java的名号,于是Eclipse选出了 "Jakarta EE" 和"Enterprise Profile"两个后续按名字,最终前者以64.4%的票数获胜。 ?...也就是说,Java EE已经正式更名为Jakarta EE(雅加达)。 开源组织也不是没有争取过,原因是沿用Java可以完美地保持兼容性,尤其是API,可这无法撼动甲骨文的意志。...与此同时,Glassfish正式更名为Eclipse Glassfish,Java Community Process更名为Eclipse EE.next Working Group,就连Oracle开发管理团队现在也变成了...其实很多人认为,甲骨文当年买下Java就是为了“勒索”谷歌钱,结果两次败诉,现在Sun的不少软件业务、老员工也基本从甲骨文的企业基因中彻底消失了。
提到多线程就不得不提及“进程”这个概念。 进程:进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时发生的活动;在程序在一个数据...
从本篇文章开始,我会用文章记录下我在学习Java EE过程中的一些笔记和感悟,至于还没有更新结束的Java SE还是会继续写的,只是我觉得一直写语法很枯燥,自己也没法继续下去,所以带着点web...out.write(" \n"); out.write("\n"); 所有的html代码都是用这种方式输出到浏览器的,这种将html代码耦合在Java...在不甘痛苦中,我们发明了JSP,这是一种将Java代码耦合在html代码中的方式,类似于这样: java和编译后的.class文件,其实很多人认为JSP好像和面向对象没有什么关系了,其实不然,因为每个servlet都是一个Java类,不然如何执行Java脚本。...我们可以在jsp页面中使用java的for循环,if,else判断等,只要是Java语法允许的,jsp页面都是可以写的。
Java EE Web环境安装 一、JDK安装与测试(Windows环境) 1....环境变量配置 右键【此电脑】→【属性】→【高级系统设置】→【环境变量】 新建系统变量: 编辑系统变量 Path: 新增条目:%JAVA_HOME%\bin 验证配置(CMD执行): java...下载解压 官网下载:Eclipse IDE(选择"Eclipse IDE for Enterprise Java and Web Developers") 解压 2....创建Web工程 【File】→【New】→【Dynamic Web Project】 输入项目名 → 选择Tomcat运行时 → 完成 在src目录新建Java类(示例代码): public class...; } } 右键类文件 →【Run As】→【Java Application】
不过,对于那些使用Java EE服务器,编写传统系统的开发者来说应该何去何从呢?我们一直所做的都是错误的么?我们该如何让技术设计能够适应于未来?...单体指的就是Java EE或是一开始的Java 2 Enterprise Edition设计的目标。集中式应用可以进行伸缩与集群,但其设计却不一定具有弹性。...传统上,Java EE应用遵循着一些核心模式,并且会分成3个主要的层次:展现、业务与集成。...围绕着Java EE的技术与最佳实践足以构建出设计良好的单体应用。不过,大多数企业级项目都不太关注架构。这也说明了为何有时设计良好的意大利面条是项目依赖与内部结构可视化的最佳方式。...Java EE并不会消亡,它会得到补充和完善。 如果对如何将Java EE应用演化为微服务感兴趣,那么请 下载 这本电子书。此外,还可以通过 这里了解更多信息。
Java EE平台介绍 2.1 企业应用总览 这一部分将对企业应用及其设计和开发进行简单介绍。...数据通常是从企业应用的不同服务器上获取并被业务逻辑层进行处理的。...Architecture The Java Transaction API (JTA) .2 Java EE 服务器和容器 Java EE 服务器是实现了Java EE平台API并能提供标准...Java EE服务的服务应用。...Java EE 服务器也通常被称为应用服务器, 如同web服务器向浏览器提供页面一样,它们可将应用的数据传递到客户端。 Java EE服务器以容器的方式运行应用的不同层次组件。
它处理用户请求并将数据交给传输层 传输层:负责端到端的数据传输服务,确保数据能够从源主机传输到目的主机,如UDP/TCP 网络层:复杂地址管理和路由的选择 数据链路层:负责设备之间数据帧的传输和识别
从main函数开始 一、前言 不知道在座的各位朋友是否跟我一样,初学Java时写下的第一段代码就是类似下面这段代码: public static void main(String[] args...当我们在idea中去执行上述代码时,实际上执行的是这样一行命令: java {类名}.java 在上面这行命令中出现的 java 指令实际上是jdk提供的执行java程序的指令,指令后面紧跟着的文件名就是待执行的...java程序。...、配置初始化并创建一个JVM进程来执行Java程序,执行Java程序的过程就是上面代码展示的寻找并调用入口类的main方法。 ...Java程序的执行方式 在日常的开发过程中,除了上面直接运行一个java文件,我们大部分情况都是将Java程序打包成一个jar包进行运行,这里从源码中也能得窥一二。
从 Java 开始进入 Kotlin的世界: From Java to Kotlin: JKotlinor 非常感谢您亲爱的读者,大家请多支持!!!...有任何问题,欢迎随时与我交流~ ---- Kotlin与Java对比 在前面的内容里,我们已经看到了Java与Kotlin的互操作的基本方式。...为了更好的认识Java与Kotlin这两门语言,我们在这里给出一些基本功能,同时使用Java与Kotlin来实现的代码实例。通过横向对比,从中我们可以看出它们的异同。...(此处可整理成表格形式) 打印日志 Java System.out.print("Java"); System.out.println("Java"); Kotlin print("Kotlin") println...Range区间 Java if (score >= 0 && score <= 300) { } Kotlin if (score in 0..300) { } 更灵活的case语句 Java
前言 JVM(Java Virtural Machine) ,简称Java虚拟机:指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。...java文件转化成 .calss字节码文件,再加载到内存中(内加载)。...中默认提供了三种加载器:BootstrapClassLoader(Java标准库的目录)、ExtensionClassLoader(Java扩展库的目录)、ApplicationClassLoader(...Java的第三方库) 类加载的步骤 1....堆类对象的各种属性进行填充,如果这个类有父类且父类还没有加载,此环节触发父类加载 双亲委派模型 更准确的是父亲委派模型,描述了类加载中,根据全限定名找到.class文件的过程 约定优先级,先从Bootstrap开始找
2.Hibernate和MyBatis ORM(Object Relation Mapping)的起源:传统的java应用都采用JDBC(Java DataBase Connectivity,java数据库连接...)来访问数据库,JDBC是一中基于SQL的操作方式,这种操作方式与java语言面向对象的思想不太一致,而且操作繁琐,所以就产生了ORM技术。...最早的ORM技术是EJB(Enterprise JavaBean),EJB是java EE的核心,但是EJB操作仍然极其繁琐。...Hibernate是开源的ORM框架,它将普通的、传统的Java对象(POJO, Plain Old Java Object)映射成持久化类,应用程序可以用面向对象的方式来操作POJO,Hibernate...Hibernate会全自动的生产SQL语句,而MyBatis需要程序员自己编写具体的SQL,将大量的SQL语句从程序中剥离出来,配置在配置文件中,实现SQL的灵活配置。
结果显而易见,但是不要忘记引入Java.io.* 这个包,否则会报错,不能识别OutputStream。 第二个用法,页面重定向。...java" import="java.io.