1、如何新建Java web项⽬
1.1、在IDEA中新建⼀个Java web项⽬
在IDEA中创建⼀个Java web项⽬其实很简单,只需创建project,并且勾选 web application 选项即可,由此就创建了⼀个Java EE项⽬。可参考:
1.2、在eclipse中新建⼀个Java web项⽬
参考:
建议使⽤ Java ee 版本的 eclipse。
2、在eclipse中配置tomcat服务器
参考:
2.1、在eclipse中设置tomcat热更新
参考:
照着上⾯链接做效果可能还⽐较慢,更新得⽐较慢,此时可以将更新时间调为 0,如下:
2.2、修改tomcat的默认部署路径
当项⽬在服务器上运⾏后,eclipse 中会⽣成⼀个与⼯程⽂件并列的⼀个⽂件夹:Servers。如下:(如果删掉了Servers⽂件夹,当重新运⾏时,⽂件夹⼜会⾃动⽣成)
这个⽂件夹是Tomcat服务器的⼀个基本的配置。
上图中可以看到,项⽬ javaWebTest01 已经部署到Tomcat服务器上去了,也就是看到了TomcatTest这个⼯程被发布出去了。我们双击上图中的 tomcat 服务器可以看到我们新建的 tomcat的⼀些设置信息,如下:
上图中红框表⽰的意思是,该项⽬将默认会发布在 eclipse ⼯作空间下的 .metadata\\.plugins\\org.eclipse.wst.server.core\mp0\\wtpwebapps 路径下(⽐如:F:\\eclipse-workspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\mp0\\wtpwebapps),⽽不是在 tomcat 的安装⽬录下。我们打开该路径可以看到已经被打包好的 javaWebTest01 项⽬,如下:
打开 javaWebTest01 ⽂件夹可以看到该项⽬打包后的⽬录结构:
当然,我们也可以修改部署⽬录,将该项⽬默认部署在我们tomcat的安装⽬录下。先将该项⽬从 tomcat 中移除掉(必须得先移除掉,不然⽆法修改配置信息),然后修改配置信息,启动即可。如下:
然后就可以修改部署的路径了,⽐如我们将部署路径修改为 tomcat 安装⽬录下的 webapps ⽬录:
修改保存,然后重新运⾏ tomcat 即可。运⾏结束后我们可以在 tomcat 安装⽬录下的 webapps 看到多了⼀个 javaWebTest01 ⽂件夹,证明部署成功。参考:
3、在IDEA中配置tomcat服务器
创建完⼀个 java web项⽬后,我们就可以往这个项⽬当中配置 tomcat 服务器了。⾸先需要做的是先安装⼀个 tomcat ,如何安装 tomcat 可以参考:
安装完之后就配置 tomcat,主要就是给这个项⽬添加⼀个配置 configuration,⼤致就是先选择 tomcat server -> 然后选择 local ,详细可参考: (在Chrome中打开可能图⽚显⽰不出来)
在配置 tomcat 之后,如果想在修改项⽬⽂件后⽴即⽣效,实现热部署的效果,可以在配置中修改为下⾯的选项。修改为下⾯选项在修改 java 代码时可能还没有实时更新的效果,在启动tomcat 时选择 debug 就可以。
3.1、IDEA中web项⽬的配置⽂件
在 IDEA 中,每⼀个 tomcat 部署的项⽬都会有⼀个单独的配置,IDEA 会为每个 tomcat 部署的项⽬单独建⽴⼀份配置⽂件。该配置⽂件的路径会在启动 tomcat 时在控制台输出,⼀般在前⾯会输出,类似于:Using CATALINA_BASE:
\"C:\\Users\\xxx\\.IntelliJIdea2019.3\\system\omcat\\Unnamed_new_tomcat_test_2\" 这么⼀⾏代码,配置⽂件就存放在该路径当中。⽬录结构如下:
在 conf ⽂件夹下有 server.xml ⽂件,该⽂件就是该 web 项⽬的 tomcat 配置⽂件。
在 conf/Catalina/localhost 中可以看到有 xml 配置⽂件,由此可以知道部署⽅式采⽤的是新增配置⽂件的⽅式来进⾏部署的。
3.2、tomcat真正访问的web项⽬路径
打开上述配置⽂件⽬录 conf/Catalina/localhost 下的 xml 配置⽂件,docBase 属性指的就是 tomcat 实际访问的项⽬路径:
我们可以把平常编写的项⽬路径和 tomcat 实际访问的项⽬路径分为:⼯作空间项⽬、tomcat 部署的项⽬。可以看到 docBase 指向的是 IDEA开发⼯具的⼯作空间下的 out ⽬录下的路径⽂件,⽽不是我们平常的⼯作空间路径,但是这个 out ⽬录在 IDEA 下是看不到的。也就是说 tomcat 访问的部署项⽬路径和我们⼯作空间的项⽬是不太⼀样的。该 out/artifacts ⽬录下的项⽬实际上就是我们需要部署的⽂件。
tomcat 部署的项⽬实际上对应着⼯作空间项⽬下的 web ⽬录下的所有资源,再加上 src ⽬录下的资源。WEB-INF ⽬录下的资源不能被浏览器直接访问,所以不要在 WEB-INF ⽬录下新建 html 等资源。
4、Java和Java Web项⽬的⽬录结构
我们应该要知道,Java项⽬和Java web项⽬的⽬录结构是有很⼤不⼀样的。这是有很多因素构成的,⽐如Java web项⽬中需要跟 tomcat 进⾏部署等。
4.1、Java项⽬的⽬录结构
.project:是⼯程构建配置⽂件
.classpath:保存的是项⽬所⽤的外部引⽤包的路径.settings:记录项⽬配置变化的记录⽂件夹src: sourcefolder项⽬源代码 .java⽂件的存放位置
bin:项⽬开发时的classes⽂件存放⽬录。该⽂件夹下的 classes ⽂件夹(即 bin/classes )存放着项⽬编译后 .class ⽂件lib:为⽅便编程,常常会引⽤别⼈已经实现的⽅法,通常会封装成jar包,lib⽂件夹就是⽤来存放从外部引⼊的jar包。
4.2、Java web项⽬的⽬录结构
在Eclipse中只要创建⼀个Dynamic Web Project,就可以根据创建向导创建出⼀个典型Java Web站点的⽬录结构。除⾮有特殊需要,在⼤多数情况下都没有必要修改这个⽬录结构,这也是Web容器的缺省⽬录结构,我们只要直接使⽤即可。⼀般的⽬录结构如下:
下⾯了解⼀下这些⽬录或者⽂件夹的⽤途。(1)Java Resources
src:⽤来存放Java源⽂件。
Libraries:存放的是Tomcat及JRE中的jar包。
(2)build:项⽬开发时的 classes ⽂件存放⽬录。该⽂件夹下的 classes ⽂件夹(即 build/classes )存放着项⽬编译后 .class ⽂件。build ⽂件夹和 bin ⽂件夹是类似的,我们可以⼿动设置项⽬开发时编译后的 class ⽂件是存放在 bin 还是 build ⽂件夹下。
(3)WebContent(WebRoot):是这个Web应⽤的顶层⽬录,也称为⽂档根⽬录,⽬录结构如下:WebContent |---META-INF | |---MANIFEST.MF |---WEB-INF | |---web.xml | |---lib
| | |---*.jar 程序需要的jar包 | |---classes class⽂件⽬录 | |---...*.class class⽂件 |--- | |---*.jsp,*.js,*.css ⾃定义的资源⽂件 META-INF:系统⾃动⽣成,存放系统描述信息。 ⼀系列⾃定义的静态⽂件:包括所有的HTML⽹页、CSS⽂件、图像⽂件等。⼀般按功能已⽂件夹形式分类,例如,图像⽂件集中存储在images⽬录中。JSP⽂件:利⽤JSP可以很⽅便地在页⾯中⽣成动态的内容,使Web应⽤可以输出动态页⾯。 WEB-INF:是Java的WEB应⽤的安全⽬录。所谓安全就是客户端⽆法访问,即⽆法对外发布,⽤户访问不到,只有服务端可以访问。如果想在页⾯中直接访问其中的⽂件,必须通过web.xml⽂件对要访问的⽂件进⾏相应映射才能访问。 WEB-INF/lib:存放第三⽅库的⽂件夹,它包含Web应⽤所需要的.jar或者.zip⽂件。java web项⽬需要引⽤的 jar 包必须得放在这个⽬录下,否则将该项⽬部署在 tomcat 时,你如果引⽤了 jar 包中的类或⽅法,tomcat 会⽆法找到你所引⽤的 jar 包。因为Tomcat下的web项⽬有两个预置的classpath(就是能找到.class⽂件的⼊⼝),这两个预置的classpath是WEB-INF/classes与WEF-INF/lib。 WEB-INF/classes:项⽬在部署时,java ⽂件经编译后⽣成的 .class ⽂件的存放路径。为什么需将项⽬编译后⽣成的字节码⽂件放在这个⽂件夹下,理由同上述 WEB-INF/lib ⽂件夹。WEB-INF/web.xml:Web应⽤的核⼼配置⽂件 打包前项⽬⽬录: 打包后⽬录: 可以看到,打包前 web(WebContent) ⽬录下的⽂件及⽂件夹都会被打包到项⽬的根⽬录,⽽ src ⽬录下的⽂件及包和类,都会被打包到项⽬根⽬录下的 WEB-INF/classes ⽬录下。 4.3、Java web项⽬各种⽂件的含义(.classpath、.mymetadata 、.project、.metadata、.setting) .classpath保存的是项⽬所⽤的外部引⽤包的路径.mymetadata 保存的是⼯程属性⽂件.project 是⼯程构建配置⽂件 .metadata⽂件夹的作⽤ Eclipse内所有改动都放在这个⽂件夹 .setting⽂件夹的作⽤:.setting这个⽂件是eclipse查看js⽂件的时候⽤的,记录了⽤什么编码⽅式查看。发布新版本的时候,.settings\\⽂件夹不会被打到.war包⾥,与发布⽆关。⽐如把.js⽂件的编码⽅式由改成默认的ISO-8859-1改成GBK时,这个⽂件会有记录。如果把这个⽂件删了,在eclipse中查看js⽂件的中⽂字符就是乱码,但发布的时候还是能正常显⽰中⽂的。结论:这个⽂件是shueclipse查看js⽂件的时候⽤的,记录了⽤什么编码⽅式查看。与发布⽆关。.settings\\⽂件夹不会被打到.war包⾥。 4.4、项⽬中各种libraries的含义 ⼀个⼯程⽬录下⼀般会有以下⼏类Libraries,如图: JRE System Library:Java SE 的常⽤库⽂件集合,构建任何Java项⽬都会使⽤,为最基本的库⽂件。 Java EE 6.0 Generic Library:Java EE的常⽤库⽂件集合,构建Web项⽬时会⽤到这个库⽂件与Java SE的库⽂件。 Referenced Library:项⽬中所使⽤的第三⽅的库⽂件集合,如果你把项⽬所需要的其他JAR包直接加在 项⽬->属性->Java Build Path -> Libraries 中的时候,MyEclipse 会⾃动将这些JAR包归类到⼀个集合中, 并取名为 Referenced Libraries , 显⽰在项⽬中。 Web App Libraries:动态管理WEB-INF/lib 和 WEB-INF/classes⽬录下的jar包。 Referenced Library和WEB-INF/lib 下的jar包的区别:⾸先 Referenced Libraries可以是引⽤ WebRoot /WEB-INF/ lib下的jar包,也可以是其他从别的地⽅复制过来的第三⽅jar包。ReferencedLibrary是编译环境下所使⽤的JAR包,也就是说在MyEclipse中进⾏源码⽂件编写的时候,使⽤到的类都是从这个下⾯拿。WebRoot/WEB-INF/lib 下的jar包是实际运⾏环境下所使⽤的jar包,也就是程序部署后实际运⾏时所需要的jar包都是从WebRoot/WEB-INF/lib下⾯拿。 我们位于WebRoot/WEB-INF/lib中的第三⽅的jar包(⽐如SSM框架的jar包)都要经过Build Path后,就会位于Referenced Library下,即可⽤于项⽬源码的编写。 也就是说,在开发时,项⽬所有依赖的包都要经过 build path 添加到项⽬依赖当中,否则开发集成⼯具⽆法找到项⽬依赖的包。但在⽣产环境时,需要将项⽬依赖包放在 WEB-INF/lib ⽬录下,放在该⽬录下的话 tomcat 服务器能⾃动找到该⽬录下的包,项⽬运⾏就不会有问题 Build Path的作⽤:MyEclipse中的Build Path就是⽤来管理项⽬中的Jar包的,如果缺少什么jar包,就可以通过右键项⽬/built path/Configure built path/点击libraries标签进⾏添加。参考: 4.5、classpath(项⽬编译后,类存放的路径) classpath 指的就是在项⽬编译后,各个类存放的路径。Tomcat 下的 web 项⽬有两个预置的 classpath(就是能找到.class⽂件的⼊⼝),这两个预置的 classpath 是 webcontent/WEB-INF/classes 与 webcontent/WEF-INF/lib。 WEB-INF/lib:存放第三⽅库的⽂件夹,它包含Web应⽤所需要的.jar或者.zip⽂件。java web项⽬需要引⽤的 jar 包必须得放在这个⽬录下,否则将该项⽬部署在 tomcat 时,你如果引⽤了 jar 包中的类或⽅法,tomcat 会⽆法找到你所引⽤的 jar 包。 WEB-INF/classes:打包前在 web(或者WebContent) ⽬录下的⽂件及⽂件夹在打包后都会被打包到项⽬的根⽬录,⽽ src ⽬录下的⽂件及包和类,会被打包到项⽬根⽬录下的 WEB-INF/classes 的根⽬录下。 5、如何将⼀个Java web项⽬打包成war包 eclipse参考:IDEA参考: 将 war 包放在 tomcat 安装⽬录下的 weapps ⽬录下即代表部署成功,tomcat 会⾃动解压 war 包。我们打开 tomcat 解压 war 包过后⽣成的⽂件夹,可以看到⽬录结构如下: WEB-INF ⽂件夹下的⽬录结构: 可以看到打包后的⽬录结构有 META-INF、WEB-INF、静态⽂件。。。 在 WEB-INF ⾥⾯有 classes、lib、web.xml,当然,前提是我们设置该项⽬的编译路径是默认的,即 src 输出在 classes 并且 Webcontent 输出在根⽬录。 6、WEB-INF/lib和WEB-INF/classes⽂件夹 Tomcat 在运⾏时是如何找编译好的.class⽂件 的呢?其实Tomcat下的web项⽬有两个预置的 classpath(就是能找到.class⽂件的⼊⼝),这两个预置的 classpath 就是 WEB-INF/classes和 WEF-INF/lib。所以说,我们编译过后的字节码⽂件必须得放在这两个⽂件夹下才能被 tomcat 给找到,否则 tomcat 根本就⽆法找到字节码⽂件,那你写的那些类、给前端访问的接⼝等等都⽆法⽣效。 其实我们在新建⼀个 java web项⽬时,默认 src ⽂件夹下的 java ⽂件经编译后⽣成的字节码⽂件存放路径就是 WEB-INF/classes,我们可以通过右键项⽬ -> properties -> DeploymentAssembly 来查看: ⽽在 WEF-INF/lib ⽬录下的⽂件经编译后仍然是会放在 WEF-INF/lib ⽬录下的。所以说,java web项⽬需要引⽤的 jar 包必须得放在 WEF-INF/lib ⽬录下,并且 src ⽬录下的⽂件编译后必须得放在 WEB-INF/classes ⽂件夹下,否则的话 tomcat 就⽆法找到它们。 从上图还可以看出,webcontent 内的⽂件内容默认编译过后是会放在项⽬根⽬录的。 其实想理解很简单,如果我们不启动Tomcat,那么只需要把包添加到java环境的路径下即可(就是我们常⽤的 build path - add path),这样,java程序就可以使⽤这个包中的类。但是,java web是运⾏在Tomcat下的,我们导的包,必须让Tomcat找到,⽽Tomcat默认的路径就是WEB_INF这个⽬录下的lib,如果我们不放在这⾥,就会找不到依赖。 因篇幅问题不能全部显示,请点此查看更多更全内容