附加:Java简介(Java SE,Java EE,JDK等);【java.servlet.**】和【javax.**】简介;Eclipse和IDEA在使用servlet-api.jar时的区别;

说明:

(1)为什么要写本篇博客?:在写【Spring MVC拦截器1:拦截器入门一:拦截器(interceptor)简介;拦截器开发流程简介;演示了拦截器最基本的配置流程;】这篇博客的时候,发现:同样是需要在项目中用到【HttpServletRequest和HttpServletResponse】的时候:【如果我们使用IDE的是Eclipse,那么我们不需要引入javax.servlet依赖】,【如果我们使用IDE的是IDEA,那么我们需要引入javax.servlet依赖】;因为,对此产生疑问,所以写了本篇博客以做说明;

(2)声明:

          ● 本篇博客的主要目的是:梳理逻辑,说服当下的自己; 

          ● 本篇博客可能存在理解不严谨的地方;但是就写这篇博客的时间来说,本篇博客的内容能说服自己,形成一个暂时看起来没有问题的闭环;

          ● 本片博客“废话”较多,当成一个故事看就行;

(3)本篇博客参考的文章有:

          ● 【面经手册 · 第23篇《JDK、JRE、JVM,是什么关系?》】,该文的作者是【小傅哥】;

          ● 【JDK百科】;

          ● 【java 版本區別,java SE是什麼,下載JDK時各個名稱的含義】;

          ● 【到底什么是javaEE、什么是JavaSE,我们用Spring等框架用的jdk到底是什么的思考】,该文的作者是【 回忆之秋】;

          ● 【J2EE、Java SE、Java EE、Java ME 区别】,该文的作者是【dunlunjinfen 】;

          ● 【java与javax有什么区别?】,作者是【ccecwg】,该篇博客亦是转载博客;

目录

一:基础内容梳理; 

1.【一般意义上的Java】是什么?

2.Java平台:Java SE、Java EE、Java ME:概述;

3.一切都要从【Java SE】开始说起;

4.随着Java的发展,【Java EE】逐渐产生了;

二:解决本篇博客一开始提出的疑问;

 三:Servlet和Spring MVC的关系;(引出问题,在下篇博客中介绍)


一:基础内容梳理; 

1.【一般意义上的Java】是什么?

(0)一提到Java,我们可能联想到:【Java SE】,【Java EE】,【Java具体的语法、类,等有关Java语言本身的内容】【JDK】,【JVM】等内容;我们需要理清它们的关系,这有助于我们搞清楚Java到底是什么;

……………………………………………………

(1)其实,【平常所说的Java】就是指Java开发平台;而Java最基本的、也是最初的开发平台就是【Java SE平台】(Java SE就是Java的标准版);

(2)【Java SE平台】包括:【Java具体的语法,等有关Java语言本身的内容】和【开发与运行Java软件的编译器等开发工具、软件库及Java虚拟机(JDK,自带的api合集的具体实现,JRE,JVM,等)】;

……………………………………………………

(3)我们知道Java平台有【Java SE】、【Java EE】、【Java ME】;【Java SE】是另外两个平台的基础,即换句话说,【Java语言本身,标准类库,JDK,JRE,JVM等这些属于Java SE的内容,,,,,自然也包含于Java EE和Java ME】;

2.Java平台:Java SE、Java EE、Java ME:概述;

(1)Java SE:

          ● 标准定义:Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,以为 Java Platform,Enterprise Edition(Java EE)提供基础。

          ● Java SE是桌面应用平台:其主要用于桌面应用软件的编程,即说白了基于Java SE平台,开发的都是在PC上运行的程序;

(2)Java EE:Java EE(Java Platform,Enterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。

          ● Java EE是企业级应用平台:其主要是用来做web网站的;

(3)Java ME:Java ME(Java Platform,Micro Edition)。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

          ● Java ME是移动应用平台:主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等;

但是,上面的这些平台,不单只是纯粹的定义和概念;这些平台为了能够实际落地起作用, 这些平台自然包含了很多实质内容;

3.一切都要从【Java SE】开始说起;

Java SE包括:【Java具体的语法,等有关Java语言本身的内容】和【开发与运行Java软件的编译器等开发工具、软件库及Java虚拟机(JDK,自带的api合集的具体实现,JRE,JVM,等)】;

(1)我们知道,Java提供了Java语法,根据Java语法我们可以编写Java程序;

(2.1)但是,如果我们是Java的开发者,只知道Java语法是不够的;有三个原因:

          ● 【第一个原因:我们知道Java可以完成很多功能(比如Java可以实现日期功能),难道对于所有功能,我们都要亲自编写最基础的Java代码去实现吗】;

          ● 【第二个原因:Java作为一个高级语言,需要经过编译和解释才能执行】;

          ● 【第三个原因:Java语言为了实现跨平台,我们需要一个能够实现“Java平台无关性”的东西】;

因为这三个原因,JDK(Java Development Kit)就应运而生了;

(2.2)换句话说,作为Java程序的开发者,只知道Java SE这个平台的技术概念还不够,我们需要一个给力的开发工具和开发环境,而JDK就是解决这个需求的;

(3)JDK简述;

          ● JDK = 【开发工具集(如,javac编译工具和java解释(执行)工具等)】+【JRE】 ;

          ● JRE = 【JavaSE标准类库】+【JVM】 ;

          ● JVM:可以理解为是一个虚拟出来的计算机,具备着计算机的基本运算方式,它主要负责把 Java 程序生成的字节码文件,解释成具体系统平台上的机器指令,让其在各个平台运行。(JVM是Java之所以能够跨平台的原因)

          ● 三者的关系是:JDK包含JRE和JVM,JRE包含JVM;

(4)通过JDK的简述可知:

          ● Condition1:如果我们是Java开发者,我们需要安装完整的JDK(即,JDK,JRE,JVM我们都需要);

          ● Condition2:如果我们是Java程序的使用者,我们只需要在本机安装JRE(JRE中包含JVM)就行了;

原因解释:

          ● Condition1:Java开发者在开发Java程序时候:Java作为高级语言,为了让其运行,必然需要先对程序进行编译,把Java文件编译成字节码文件;然后,编写和编译Java程序的时候,必然会用到【JavaSE标准类库(String类,Math类,等这些Java最基本个的api)】;然后为了让Java在具体的机器上执行,看程序的效果,也需要JVM把字节码解释成机器码;所以,对于Java开发者来说,JDK,JRE,JVM都需要;

          ● Condition2:我们知道,Java开发者在开发完Java程序后,为了让用户使用这个程序,一般把Java程序打成war包之类的;然后,war包中的内容不是原始的Java程序,而是被编译后的字节码文件;同时,war包中是不包括【JavaSE标准类库(String类,Math类,等这些Java最基本个的api)】的;即,我们在编译打包的时候,Java标准类库中的内容并没有打进去;但是,我们知道一个Java程序要想运行,基本是离不开Java标准类库的;所以,为了能够让Java程序运行,Java使用者需要在本地也有Java标准类库,即需要在本地安装JRE;然后,为了能够让Java程序在本地机器上顺利运行,自然需要JVM把字节码解释成机器码;所以,对于Java程序的使用者来说,只需要安装JRE(JRE中包含JVM)就行了;

……………………………………………………

(5)补充和强调;

          ● Java SE是:JDK,JRE,JVM以及标准类库api的具体实现;这些内容是Java最基础的东西;

          ● JDK标准类库中的工具类和接口(也可称作是Java SE标准类库中的工具类接口)的类路径一般是:java.**;(这句话是重点);同时,对于这些标准类库,Java SE不仅提供了标准,也提供了具体实现;(也就是,对于Java SE来说,其定义了很多标准,但同时,对于这些标准其都有具体实现;)

……………………………………………………

(6)但同时也要知道:JDK作为一个发端于Java SE的Java开发工具包;其是不区分Java SE,Java EE和Java ME的;即,在这三个平台都包含JDK;

4.随着Java的发展,【Java EE】逐渐产生了;

为了应对企业级应用的开发需求,Java提出了自己的解决方案,即【Java EE】;

(1)Java EE是基于Java EE,发展而来的;

(2)【Java EE】巩固了【Java SE】中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等;

(3.1)针对企业级应用开发需求,【Java EE】提供了EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。

(3.2)即也就是,Java EE建立于Java SE之上,具有Web服务、组件模型、以及通信API等特性,这些为面向服务的架构(SOA)以及开发Web2.0应用提供了支持。

(4)但需要注意:【Java EE】是基于【Java SE】发展出来的一套规范和接口;其只是规范和接口,并没有具体实现;换句话说,【Java EE】只是定义了一套标准,具体实现需要有第三方厂商(如Tomcat)去实现;

(5.1):【Java EE】新提出来的规范和接口,其接口的路径一般是:javax.**;(这句话是重点);【Java EE】只是定义了这些接口,并没有实现;

(5.2)重复强调一下:

          ● 路径是【java.**】的,是Java SE提出的内容,这些是java的核心包;

          ● 路径是【javax.**】的,是Java EE新增的内容,这些是java的扩展包;(x是extension的意思);

……………………………………………………

(6.1)Java刚开始的时候,因为各种应用和生态不成熟,很多东西需要有人牵头制定强制规范引导Java的发展,于是Java EE曾经引领了企业级应用的开发。但是,Java EE逐渐失宠:

          ● 我们知道,为了应对企业级应用开发,【Java EE】提出了如Servlet,JSP,JSF,EJB,JPA,JMS,JNDI等组件;

          ● 但随着越来越多的公司和组织参与到Java中来,出现了很多【Java EE组件】的替代者;【Servlet,JSP】等这些Java EE提出的组件反而越来越不受欢迎;

          ● 如在业界的实际开发中,【Struts2,Spring MVC】更优于【Java EE的JSF规范】;【Spring】更优于【Java EE的EJB规范】;【Hibernate,Mybatis】更优于【Java EE的JPA规范】;

          ● 即目前在业界广泛使用的【Spring,Mybatis,Hadoop】等都不是来自于【Java EE】;

          ● 在实际开发中,真正还在使用的【Java EE】规范有:Servlet,JSP,JMS,JNDI。而且,这些技术都只是充当了一个程序入口而已;

(6.2)即目前可以这样认为,一开始,作为企业级应用最初的引领者,【Java EE】提出了很多标准;但是,后来随着参与者越来越多,其他厂商提出了很多新的解决方案,【Java EE】的很多标准逐渐被淘汰,仅剩如Servlet等部分标准还在实际使用;而且,在与【Spring】等标准配合时,【Java EE】这些仅剩的标准只是充当了一个程序入口;

(6.3)自然我们知道,Java现在是Oracle公司的产品;所以,java语言本身,Java SE,Java EE,Java ME都是Oracle的;随着Java EE被Spring,Mybatis等取代;Java EE的盈利能力正在被削弱;为此,很多人认为,Oracle可能会放弃Java EE,但不会放弃Java;(这句话是废话,可能存在错误,如有需要,随时删除);


二:解决本篇博客一开始提出的疑问;

疑问: 在写【Spring MVC拦截器1:拦截器入门一:拦截器(interceptor)简介;拦截器开发流程简介;演示了拦截器最基本的配置流程;】这篇博客的时候,发现:同样是需要在项目中用到【HttpServletRequest和HttpServletResponse】的时候:【如果我们使用IDE的是Eclipse,那么我们不需要引入javax.servlet依赖】,【如果我们使用IDE的是IDEA,那么我们需要引入javax.servlet依赖】;因为,对此产生疑问,所以写了本篇博客以做说明;

疑问的来源: 

(1)当我们使用的IDE是Eclipse时候,如果我们在项目中需要用到Servlet的话,我们不需要引入javax.servlet依赖:

通过:【Servlet入门四:Eclipse创建一个javaWeb工程;创建一个标准的Servlet示例】及附近文章,

 (6)企业门户网站案例,项目开发知识点;】专栏中的内容;可以发现,在这些情况下,我们使用的IDE是Eclipse,在项目中用到了Servlet;但是,我们并没有引入javax.servlet依赖;

(2)当我们使用的IDE是IDEA时候,如果我们在项目中需要用到Servlet的话,我们需要引入javax.servlet依赖:

通过:【(12)慕课OA系统(Mybatis项目案例,比较重要!)】 专栏中的内容,

Spring MVC拦截器1:拦截器入门一:拦截器(interceptor)简介;拦截器开发流程简介;演示了拦截器最基本的配置流程;】;可以发现,在这些情况下,我们使用的IDE是IDEA,在项目中用到了Servlet,我们就需要引入javax.servlet依赖;

原因解释:

(1)一个基本情况:无论是Eclipse还是IDEA,我们在本地编译程序的时候,都需要【javax.servlet这些依赖】;但,当我们把程序发布到Tomcat容器中时,是不需要把【javax.servlet这些依赖】一同发布的;因为,Tomcat容器中已经有【javax.servlet这些依赖】了;

(2)我提出的这个疑问,老师给出的回答是:

(3)所以,其原因大概率是在整合Tomcat时,Eclipse和IDEA的整合步骤存在差异的问题;

           ● 如【Servlet入门三:Eclipse J2EE版本安装;Eclipse中绑定JDK;Eclipse中整合Tomcat】,在Eclipse中整合Tomcat时,也将servlet-api.jar整合到项目中了,所以自然我们就需要再手动引入servlet-api.jar依赖了;

           ● 如【OA系统六:前期准备四:整合FreeMarker;引入Servlet3.1依赖;顺带设置下logback.xml日志;】和

Spring MVC拦截器1:拦截器入门一:拦截器(interceptor)简介;拦截器开发流程简介;演示了拦截器最基本的配置流程;】,在IDEA中用到Servlet的时候,就需要引入servle-api.jar依赖;

而且,在IDEA中引入servlet-api.jar依赖的时候,scope属性都设置为了provided(意思是,servlet-api.jar依赖不随项目发布到Tomcat中去);


 三:Servlet和Spring MVC的关系;(引出问题,在下篇博客中介绍)

由【Spring MVC拦截器1:拦截器入门一:拦截器(interceptor)简介;拦截器开发流程简介;演示了拦截器最基本的配置流程;】,很自然就能联想到一个问题:Servlet和Spring MVC到底是什么关系,他们有什么区别;这在下篇博客【附加:【Servlet】和【Spring MVC】的关系;【Servlet】体系简述;】中作了介绍;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值