如何用Java IDE建立一个Web工程

> 在建立Java Web工程的时候发现IDEA中的Web工程结构似乎和Eclipse的Web工程结构不大一致,所以就想搞清楚Web工程结构是怎样的.

从Eclipse的非Maven工程开始

我的第一个Java IDE还是Eclipse,用它建立Web工程,只需要新建 Dynamic Web Project即可

![clipboard.png](https://segmentfault.com/img/bVbyyqR?w=1117&h=370 "clipboard.png")

通常在Eclipse中配置完还要修改一下部署路径

![clipboard.png](https://segmentfault.com/img/bVbyyqT?w=1295&h=455 "clipboard.png")

这个Deploy Path即为部署路径,是什么意思呢?就是Eclipse会把你的项目输出到Deploy Path中
那输出到Tomcat中文件结构和我们在Eclipse中看到的结构是否一致呢?

![clipboard.png](https://segmentfault.com/img/bVbyyqU?w=1055&h=436 "clipboard.png")

显然并不是一致的,我主要关心的有三点:

1. java代码编译成的字节码去哪了?
2. 我引入的jar包去哪里了? 
3. META-INF 是干啥用的?

META-INF: 相当于一个信息包,目录中的文件和目录获得Java 2平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务 manifest.mf文件,在用jar打包时自动生成。
java代码生成的字节码在WEB-INF中的Classes文件下,我们引入的jar包在WEB-INF的lib文件下。

![clipboard.png](https://segmentfault.com/img/bVbyyqU?w=1055&h=436 "clipboard.png")

所以你的项目要是报ClassNotFoundException时,你就先去lib文件下找找看,看有没有这个jar包。

Eclipse的Maven工程

![clipboard.png](https://segmentfault.com/img/bVbyyq3?w=1302&h=785 "clipboard.png")

在新建Maven工程的时候我发现了这个,archetypes意味: 典型、原型。那archetype是究竟是什么意思了? 对此,我打开了Maven官网,
In short, Archetype is a Maven project templating toolkit
简而言之,archetype是一个maven项目模板工具包
其实官网还有一堆的解释,不过我都看的云里雾里的,在我看来原型就是一个目录结构模板,当你选择一个archetype的时候就是选择了一种项目结构,同样也包括你编译输出之后的结构,供Tomcat识别的结构。

![clipboard.png](https://segmentfault.com/img/bVbyyq4?w=1186&h=619 "clipboard.png")

选择这个模板,生成的目录结构如下:

![clipboard.png](https://segmentfault.com/img/bVbyyq8?w=459&h=431 "clipboard.png")

但是选择怎样的模板,最后供Tomcat识别的还是如下:

![clipboard.png](https://segmentfault.com/img/bVbyyq9?w=730&h=196 "clipboard.png")

那我不选模板,还想建Web工程可不可以呢?
当然是可以的:

![clipboard.png](https://segmentfault.com/img/bVbyyra?w=652&h=576 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrb?w=644&h=581 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrc?w=678&h=466 "clipboard.png")

右键选择 Java EE Tools 在选择Generate Deployment Descriptor stub 就自动产生了.(实在截不出来图)

IDEA的非Maven工程

选择模板

![clipboard.png](https://segmentfault.com/img/bVbyyre?w=1179&h=787 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrf?w=1144&h=778 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrg?w=1264&h=475 "clipboard.png")

我原本以为目录结构是和Java EE的版本是有关系的,但是当我选择Java EE6的时候,目录结构和Java EE8一样的,但是最后供TomCat识别的目录都是一致的。

不选择模板

![clipboard.png](https://segmentfault.com/img/bVbyyrh?w=1613&h=693 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyri?w=1480&h=701 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrj?w=1099&h=872 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrk?w=1038&h=846 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrl?w=1030&h=848 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrm?w=1034&h=851 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrn?w=1035&h=852 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrp?w=1034&h=849 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrq?w=992&h=580 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrr?w=1211&h=615 "clipboard.png")

IDEA的Maven工程

> 我是不大喜欢IDEA新建Web工程的Maven archetype,之前建Web工程我都是自己建,不过你选了模板也没多大关系,你只需要在Project Structure中看一下编译后的文件都输出到哪里就可以了。

选择模板

![clipboard.png](https://segmentfault.com/img/bVbyyrx?w=1144&h=782 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyry?w=520&h=619 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrz?w=1097&h=873 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrA?w=1090&h=869 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrB?w=1344&h=905 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrC?w=1036&h=842 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrD?w=1403&h=639 "clipboard.png")

不选择模板

![clipboard.png](https://segmentfault.com/img/bVbyyrK?w=530&h=870 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrL?w=1086&h=867 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrM?w=1032&h=858 "clipboard.png")

![clipboard.png](https://segmentfault.com/img/bVbyyrN?w=1341&h=841 "clipboard.png")

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。