jar : Java Archive File,Java存档文件。
是一种与平台无关的文件格式,可将多个文件合成一个文件。jar 包与 zip 包非常相似——准确地说,它就是 zip 包,所以叫它文件包。jar 与 zip 唯一的区别就是在 jar 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,该文件是在生成 jar 文件的时候自动创建的,作为jar里面的"详情单",包含了该Jar包的版本、创建人和类搜索路径Class-Path等信息,当然如果是可执行Jar包,会包含Main-Class属性,表明Main方法入口,尤其是较为重要的Class-Path和Main-Class。
META-INF:元数据信息。元数据就是描述其它数据的数据,比如web page中的meta data,包括关键字,对该网页的描述等等。 META-INF相当于一个信息包,目录中的文件和目录获得Java 2平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务manifest.mf文件,在用jar打包时自动生成。 MANIFEST:显示 这些信息就是jar文件的描述信息。 META-INF目录实际上就是描述jar文件中的信息的一个目录,目录中除了manifest.mf文件之外其实还是可以配置很多信息文件的,这些文件都是在应用程序运行的过程中向其提供jar文件的内容描述的。
因为jar包主要是对class 文件进行打包,而java编译生成的class文件是平台无关的,这就意味着jar包是跨平台的,所以不必关心涉及具体平台的问题。
为什么要打jar包
当我们开发了一个程序以后,程序中有很多的类,如果需要提供给别人使用,发给对方一大堆源文件是非常不好的,因此通常需要把这些类以及相关的资源文件打包成一个 jar 包,把这个 jar 包提供给别人使用,同时提供给使用者清晰的文档。这样他人在拿到我们提供的jar之后,就能方便地进行调用。
因此,建议大家在平时写代码的时候,注意把自己代码的通用部分抽离出来,主键积累一些通用的util (utility)类,将其逐渐模块化,最后打成jar包供自己在别的项目或者模块中使用,同时不断打磨jar里面的内容,将其做得越来越容易理解和通用,这样的好处是除了会对你的代码重构能力以及模块抽象能力有很好的帮助之外,更是一种从长期解放你的重复工作量,让你有更多的精力去做其他事情的方式,甚至当你抽象出业内足够通用的jar之后,jar包还能为你带来意想不到的利润。这也是java发展得如此之好的原因,无论出于盈利或者非盈利的目的,将自己的通用工具或者框架抽取出来,打成jar包供他人调用,使得整个java生态圈变得越来越强大–几乎很多业务场景都能找到对应的jar包。
jar包和war包的区别
war 是一个可以直接运行的web模块,通常应用于web项目中,将其打成war包部署到Tomcat等容器中。以Tomcat举例,将war包放置在tomcat根目录的webapps目录下,如果Tomcat成功启动,这个包就会自动解压,就相当于发布了。
war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下。这也就意味着,war能打包的内容,jar也都可以。对于现今的应用来讲,主流都是用jar来替代war了。因为war仅服务于Web应用,而jar的涵盖范围更广。目前,war相较于jar的唯一优势在于,就拿tomcat来讲,当tomcat的进程启动之后,将符合规范的war包放在tomcat的webapps目录下的时候,tomcat会自动将war包解压并对外提供web服务,而jar包则不行。
XML :Extensible Markup Language,可扩展标记语言。是一种用于标记电子文件使其具有结构性的标记语言。它被设计用来传输和存储数据。
pom :Project Object Model,项目对象模型。setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的maven坐标,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。是项目级别的配置文件。 servlet: servlet就是一个Java接口。接口的作用是啥,是规范! servlet这个接口只有5个方法。 servlet接口定义的是一套处理网络请求的规范。 其中最主要的是两个生命周期方法init(),destroy(),还有一个处理请求的service(). 所有想要处理网络请求的类,都要回答这3个问题:
1)你初始化时要做什么 2)你销毁时要做什么 3)你接受到请求时要做什么
这是Java给的一种规范
servlet是一个规范,那实现了servlet的类,就能处理请求了么?
-还不能。 写一个servlet的时候,如果不在servlet中写监听8080端口的代码,servlet不会直接和客户端打交道!那请求怎么来到servlet呢?答案是servlet容器,比如我们最常用的Tomcat ,Tomcat才是与客户直接打交道的家伙,它监听端口,请求过来后,根据URL信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,Tomcat再把这个response返回给客户端。
JavaBean是什么?
它是符合一定规范编写的Java类,不是一种技术,而是一种规范。 大家根据这种规范,总结了很多开发技巧、工具函数。 符合这种规范的类,可以被其他的程序员或者框架使用。 Javabean是公共Java类,但是为了编辑工具识别,需要满足: 1、所有属性为private 2、提供默认构造方法 3、提供getter和setter 4、实现serializable接口,这个是框架,工具跨平台反映状态必须的
- 1996年Java发布时即发布了javabean,通过统一的规范可以设置对象的值(get,set方法)
- 在实际企业开发中,需要实现事务、安全、分布式,Javabean就不好用了。Javabean就开始复杂为EJB
- EJB功能强大,但是太重。此时出现DI(依赖注入),AOP(面向切面)技术,通过简单的Javabean也能完成EJB的事情,这里的Javabean简化为POJO
- spring诞生了
PO:persistence object,用于持久化时(例如保存到数据库或者缓存) VO:value object,用于前端展示使用 DTO:data transfer object,用于接口互相调用返回,数据传输(例如很多接口调用返回值或消息队列内容)
JavaBean:在企业开发中,需要可伸缩的性能和事务、安全机制,这样能保证企业系统平滑发展,而不是发展到一种规模重新更换一套软件系统。然后又提高了协议要求,就出现了Enterprise Bean POJO:Josh MacKenzie觉得,EJB太复杂了,发明了POJO,POJO就是普通的Javabean。
|