META-INF、WEB-INF分别是什么?

1. 概述
在学习spring.factories时发现自己对于META-INF和WEB-INF的作用还不甚了解,因此在这里做一个补充。

META-INF 的作用主要是对Jar包进行一个描述。其意为(meta information)签名文件夹。在打包jar时会自动的生成,当然也可以手动的配置修改。

WEB-INF 是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。

2. 详述
2.1 百度上的解释
META-INF 相当于一个信息包,目录中的文件和目录获得 Java 2 平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务 manifest.mf 文件,在用 jar 打包时自动生成。

WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。

2.2 mainfest.mf文件
意为清单文件,manifest 文件中的每一行都是 key-value 对应的:属性名开头,接着是 “:” ,然后是属性值,每行最多72个字符,如果需要增加,可以在下一行续行,续行以空格开头,以空格开头的行都会被视为前一行的续行。通常有这些字段:
 

Manifest-Version: 1.0
Built-By: Dxy
Created-By: IntelliJ IDEA
Build-Jdk: 1.8.0_144

这些信息就是 jar 文件的描述信息:

Manifest-Version:生成的 manifest.mf 文件的版本
Built-By:文件的创建用户命名,在 IDEA 的配置文件中可以设置
Created-By:文件的生成者,一般由jar命令行工具生成,这里显示的时 idea
Bulid-Jdk:所使用的 JDK 环境

还有这些属性:

一、一般属性
 
1:Signature-Vresion:定义 jar 文件的签名版本
 
2:Class-Path:内部的类搜索路径,提供给应用程序或者类装载器
 
二、应用程序的相关属性
 
1、Main-Class:定义 jar 文件的入口类,该类必须可执行!一旦定义了该属性就可以使用
 
java -jar 程序名.jar 来运行该 jar 文件

2.3 和WEB-INF的区别

META-INF 存放的是 jar 包的标签信息,jar 都会有这个文件夹,war 也会有。

而 WEB-INF 是 java web 应用所特有的一个文件夹,属于 web 应用的安全目录,该目录客户端无法进行访问,只有服务端可以访问。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。这样如果我们的页面中出现超链接标签或者脚本下的location.href去直接转向到WEB-INF下的某一个jsp或者html页面,那么就会引用不到,因为这样的请求方式是客户端的请求。css/js/html没有必要放在WEB-INF下。 最终这些会被原封不动的展现在客户端,所以访问安全根本就不会成为问题。

jsp放在web-inf下,原因主要有两个

远古时代的模式会把业务逻辑,数据库连接等敏感信息写在jsp里面,被用户直接访问会有安全问题。
现代模式里这个不再成为问题,不应该成为问题。

jsp是在服务器端运行的,而且通常都需要其他程序支持——比如后台处理好数据再让jsp渲染等,用户直接访问一则没有意义,二则会抛异常,这些都浪费服务器资源。

对于安全要求很严格的系统来说,不允许随便访问你的jsp文件,你可以放到web-inf下面,对于安全性要求没有那么严格的系统来说,你可以直接放到webroot下面。

3. 总结
META-INF 相比 WEB-INF在日常开发中通常用的少一些,一般其中的字段都是构建工具或者IDE自动生成的。

4.META-INF是干啥用的

Web项目的WEB-INF目录使用说明
 

你可能感兴趣的:(前端,jar,java)