Java web项目基本介绍

1、如何新建Java web项目

1.1、在IDEA中新建一个Java web项目

在IDEA中创建一个Java web项目其实很简单,只需创建project,并且勾选 web application 选项即可,由此就创建了一个Java EE项目。

可参考:https://blog.csdn.net/qq_34107571/article/details/79774250

1.2、在eclipse中新建一个Java web项目

参考:https://jingyan.baidu.com/article/7f41ecec4b76fe593d095cea.html

建议使用 Java ee 版本的 eclipse。

 

2、在eclipse中配置tomcat服务器

参考:https://www.cnblogs.com/greamrod/p/10330404.html

2.1、在eclipse中设置tomcat热更新

参考:https://jingyan.baidu.com/article/e75aca853188ba142edac6b5.html

照着上面链接做效果可能还比较慢,更新得比较慢,此时可以将更新时间调为 0,如下:

 

2.2、修改tomcat的默认部署路径

当项目在服务器上运行后,eclipse 中会生成一个与工程文件并列的一个文件夹:Servers。如下:(如果删掉了Servers文件夹,当重新运行时,文件夹又会自动生成)

这个文件夹是Tomcat服务器的一个基本的配置。

上图中可以看到,项目 javaWebTest01 已经部署到Tomcat服务器上去了,也就是看到了TomcatTest这个工程被发布出去了。我们双击上图中的 tomcat 服务器可以看到我们新建的 tomcat 的一些设置信息,如下:

上图中红框表示的意思是,该项目将默认会发布在 eclipse 工作空间下的 .metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 路径下(比如:F:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps),而不是在 tomcat 的安装目录下。我们打开该路径可以看到已经被打包好的 javaWebTest01 项目,如下:

   

打开 javaWebTest01 文件夹可以看到该项目打包后的目录结构:

当然,我们也可以修改部署目录,将该项目默认部署在我们tomcat的安装目录下。先将该项目从 tomcat 中移除掉(必须得先移除掉,不然无法修改配置信息),然后修改配置信息,启动即可。如下:

然后就可以修改部署的路径了,比如我们将部署路径修改为 tomcat 安装目录下的 webapps 目录:

修改保存,然后重新运行 tomcat 即可。运行结束后我们可以在 tomcat 安装目录下的 webapps 看到多了一个 javaWebTest01 文件夹,证明部署成功。

参考:https://blog.csdn.net/suhang1992/article/details/82838341

 

3、在IDEA中配置tomcat服务器

创建完一个 java web项目后,我们就可以往这个项目当中配置 tomcat 服务器了。首先需要做的是先安装一个 tomcat ,如何安装 tomcat 可以参考:https://www.cnblogs.com/wenxuehai/p/14133196.html

安装完之后就配置 tomcat,主要就是给这个项目添加一个配置 configuration,大致就是先选择 tomcat server -> 然后选择 local ,详细可参考:https://www.cnblogs.com/shijiaoyun/p/5882281.html#top (在Chrome中打开可能图片显示不出来)

 

在配置 tomcat 之后,如果想在修改项目文件后立即生效,实现热部署的效果,可以在配置中修改为下面的选项。修改为下面选项在修改 java 代码时可能还没有实时更新的效果,在启动 tomcat 时选择 debug 就可以。

 

3.1、IDEA中web项目的配置文件

在 IDEA 中,每一个 tomcat 部署的项目都会有一个单独的配置,IDEA 会为每个 tomcat 部署的项目单独建立一份配置文件。

该配置文件的路径会在启动 tomcat 时在控制台输出,一般在前面会输出,类似于:Using CATALINA_BASE:   "C:\Users\xxx\.IntelliJIdea2019.3\system\tomcat\Unnamed_new_tomcat_test_2" 这么一行代码,配置文件就存放在该路径当中。

目录结构如下:

在 conf 文件夹下有 server.xml 文件,该文件就是该 web 项目的 tomcat 配置文件。

在 conf/Catalina/localhost 中可以看到有 xml 配置文件,由此可以知道部署方式采用的是新增配置文件的方式来进行部署的。

 

3.2、tomcat真正访问的web项目路径

打开上述配置文件目录 conf/Catalina/localhost 下的 xml 配置文件,docBase 属性指的就是 tomcat 实际访问的项目路径:

<Context path="/new_tomcat_test_war_exploded" docBase="F:\develop_WorkSpace\IntelliJ_IDEA_workSpace\new_tomcat_test\out\artifacts\new_tomcat_test_war_exploded" />

我们可以把平常编写的项目路径和 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文件
     |---<userdir>                           自定义的目录
     |       |---*.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包。Referenced Library是编译环境下所使用的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标签进行添加。

参考:https://www.cnblogs.com/hanszhao/p/9440294.html

 

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参考:https://www.cnblogs.com/yjq520/p/7323934.html

IDEA参考:https://jingyan.baidu.com/article/c1a3101ee342ea9f646deb0d.html

将 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 -> Deployment Assembly 来查看:

而在 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,如果我们不放在这里,就会找不到依赖。

 

7、java web多用户和多线程

在java web服务中每个用户的请求实际上都是可以看作是一次http请求,而 tomcat 对于每次的http请求都是重新开辟线程的。tomcat 本身就有维护着一个线程池,去应对用户的访问请求。多线程是tomcat实现的,你写的代码是tomcat线程池中一个线程调用,在单线程中执行。

多用户请求对于 java 开发人员来说不是多线程,对于开发 tomcat 的程序员来说是多线程。 对java 开发人员的多线程指的是编码中用到多线程来处理耗时的任务。多用户访问咱们写的代码叫并发。

 

posted @ 2020-12-18 17:42  wenxuehai  阅读(6994)  评论(0编辑  收藏  举报
//右下角添加目录