创建第一个JavaWeb项目

我以2018版的intellij idea为例

1.第一步

点击左上角的File-->New-->Project

2.第二步

1.找到Java Enterprise之后,在Application Sever中找到自己的Tomcat,同时勾选中Web Application

2.第一项是你的工程名字,随便取啦,第二个是你的工程路径,选择好之后点击finish

 

3.创建classes和lib文件夹,名字不可改

像这样

3.第三步

1.在File中找到Project Structure

2.点击Modules ,选择Paths,选中Use module compile output path ,把路径改成刚刚创建的classes文件夹

3.ok后再点旁边的Dependencies,点击"+"号,选择1 JARs or directories ,

 4,选择你刚刚创建的lib文件夹,OK

5.选中jar Directory。

 

4.第四步  项目的打包

5.第四步

1.回到主界面后,点击Run ,选择Edit Configurations

 2.看tomcat已经有啦,这是java Enterprise的好处啦,点击Deployment ,把项目部署到tomcat

 

3.点击右上角的三角形

4.运行成功。

 理解 IntelliJ IDEA 的项目配置和Web部署 

1、项目配置的理解

IDEA 中最重要的各种设置项,就是这个 Project Structre 了,

 1.1 Project

  1. Project name:定义项目的名称;
  2. Project SDK:设置该项目使用的JDK,也可以在此处新添加其他版本的JDK;
  3. Project language level:这个和JDK的类似,区别在于,假如你设置了JDK1.8,却只用到1.6的特性,那么这里可以设置语言等级为1.6,这个是限定项目编译检查时最低要求的JDK特性;
  4. Project compiler output:项目中的默认编译输出总目录,实际上每个模块可以自己设置特殊的输出目录(Modules - (project) - Paths - Use module compile output path),所以这个设置有点鸡肋。

1.2 Modules  可以有多个

 子项目配置

每个子项目都对应了Sources、Paths、Dependencies 三大配置选项:

  • Sources:显示项目的目录资源,那些是项目部署的时候需要的目录,不同颜色代表不同的类型;
  • Paths:可以指定项目的编译输出目录,即项目类和测试类的编译输出地址(替换掉了Project的默认输出地址)
  • Dependencies:项目的依赖

 

1.3 Libraries

这里可以显示所添加的jar包,同时也可以添加jar包,并且可以把多个jar放在一个组里面,类似于jar包整理。

1.4 Facets

官方的解释是:

When you select a framework (a facet) in the element selector pane, the settings for the framework are shown in the right-hand part of the dialog.

(当你在左边选择面板点击某个技术框架,右边将会显示这个框架的一些设置)

说实话,并没有感觉到有什么作用。

1.5 Artifacts(Web打包部署)

项目的打包部署设置,这个是项目配置里面比较关键的地方,重点说一下。

先理解下它的含义,来看看官方定义的artifacts:

An artifact is an assembly of your project assets that you put together to test, deploy or distribute your software solution or its part. Examples are a collection of compiled Java classes or a Java application packaged in a Java archive, a Web application as a directory structure or a Web application archive, etc.

即编译后的Java类,Web资源等的整合,用以测试、部署等工作。再白话一点,就是说某个module要如何打包,例如war exploded、war、jar、ear等等这种打包形式。某个module有了 Artifacts 就可以部署到应用服务器中了。

jar:Java ARchive,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便分发Java平台应用软件或库;

war:Web application ARchive,一种JAR文件,其中包含用来分发的JSP、Java Servlet、Java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源;

exploded:在这里你可以理解为展开,不压缩的意思。也就是war、jar等产出物没压缩前的目录结构。建议在开发的时候使用这种模式,便于修改了文件的效果立刻显现出来。

默认情况下,IDEA的 Modules 和 Artifacts 的 output目录已经设置好了,不需要更改,打成war包的时候会自动在 WEB-INF目录下生成classes,然后把编译后的文件放进去。

 

你可能对这里的输出目录不太理解,之前不是配置过了文件编译的输出目录了吗?为什么这里还有一个整合这些资源的目录呢?它又做了哪些事呢? 

其实,实际上,当你点击运行tomcat时,默认就开始做以下事情:

  • 编译,IDEA在保存/自动保存后不会做编译,不像Eclipse的保存即编译,因此在运行server前会做一次编译。编译后class文件存放在指定的项目编译输出目录下
  • 根据artifact中的设定对目录结构进行创建;
  • 如果有配置文件,拷贝配置文件到WEB-INF/classes
  • 拷贝web目录资源的根目录下的所有文件到artifact的目录下;
  • 拷贝编译src源代码classes目录到artifact下的WEB-INF下;WEB-INF/classes
  • 拷贝lib目录下所需的jar包到artifact下的WEB_INF下;    WEB-INF/lib
  • 运行server,运行成功后,如有需要,会自动打开浏览器访问指定url。

总之:将web目录下所有的文件拷贝到项目输出的根目录下(打包之后,web目录是不存在的)

        将src源代码classes目录到artifact下的WEB-INF下;WEB-INF/classes

        将拷贝lib目录下所需的jar包到artifact下的WEB_INF下;    WEB-INF/lib

        将配置文件(.properties,xml等等)拷贝到artifact下的WEB-INF下;WEB-INF/classes

        将web目录下面其他的文件(比如js,css,img)全部拷贝到部署后的根目录下

 

 

再举例

  在一个web项目,webapp目录只是eclipse用来管理工程项目增加的目录,当工程打包后就没有webapp目录了,webapp目录下的所有文件都会复制到项目的根目录下。我们把工程打包成war包看一下:

 

 

 Java Web项目为什么要在WEB-INFO下面创建classes和lib包
一个项目要编译好之后才能部署到Tomcat中运行。
Tomcat运行时如何找编译好的.class文件呢,其实Tomcat下的web项目有两个预置的classpath(就是能找到.class文件的入口);
这两个预置的classpath是WEB-INF/classes与WEF-INF/lib;
其中我们src下的源文件(如.java代码)经过了编译之后放在WEB-INF/classes目录下;
而lib包在编译前需要放在WEB-INF下编译后才能出现在WEB-INF/lib目录下;
引用工程中要用到的jar也要放进去的。如果不放进去,那引用工程的那些类就无法使用的。
所以除了Tomcat自带的jar包(JRE)外,项目所需jar包都应放在WEB-INF下;
部署好后,启动时候,所需的jar包会自动挂载到Tomcat Webapp project/WEB-INF下;

tomcat容器,它加载class文件的顺序是哪样的呢。如果要用到某个类,则Web应用程序会到/WEB-INF/classes中试着载入类,若无,再试着从/WEB-INF/lib的JAR文件中寻找类文件(若还没有找到,则会到容器实现本身存放类或JAR的目录中寻找

Tomcat的class加载的优先顺序

1.最早是$JAVA_HOME/jre/lib/ext/下的jar文件。
2.环境变量CLASSPATH中的jar和class文件。
3.$CATALINA_HOME/common/classes下的class文件。
4.$CATALINA_HOME/commons/endorsed下的jar文件。
5.$CATALINA_HOME/commons/i18n下的jar文件。
6.$CATALINA_HOME/common/lib 下的jar文件。(JDBC驱动之类的jar文件能够放在这里,避免配置好数据源却找不到JDBC Driver的状况。)
7.$CATALINA_HOME/server/classes下的class文件。
8.$CATALINA_HOME/server/lib/下的jar文件。
9.$CATALINA_BASE/shared/classes 下的class文件。
10.$CATALINA_BASE/shared/lib下的jar文件。
11.各自具体的webapp /WEB-INF/classes下的class文件。
12.各自具体的webapp /WEB-INF/lib下的jar文件。


版权声明:本文为weixin_42672802原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。