<tomcat>
指的是 Tomcat 的安装目录。
在项目的 Maven 工具窗口里点击 package
就会在项目的 target
目录下生成 war
包和 war
包解压后的内容,war
包就是用来部署的。如我们的项目生成了 Training.war
,以下用它为例介绍部署过程。
也可以在命令行里,项目的根目录下执行命令 mvn package
进行打包,效果和上面点击 package
一样。
上面的打包命令执行后会生成 war 包,同时生成相应的 war 解压后的目录,可以配置 pluginManagement
设定是否生成 war 包和相应的解压目录,在 pom.xml 的 build
元素下配置 pluginManagement
,如下配置则只生成 Training 目录的内容,不生成 war 包:
<build>
<finalName>Training</finalName>
<pluginManagement>
<plugins>
<plugin>
<!-- don't pack the war -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>default-war</id>
<phase>none</phase>
</execution>
<execution>
<id>war-exploded</id>
<phase>package</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<!--嵌入式的 Tomcat Web Server-->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat.version}</version>
<configuration>
<port>8080</port>
<path>/</path> <!--Content Path用 /,而不是项目名-->
<uriEncoding>UTF-8</uriEncoding> <!--处理 GET 请求的编码-->
</configuration>
</plugin>
</plugins>
</build>
只生成 war 对应的目录而不生成 war 包,加快了打包速度,在某些场景下是很有用的。例如因为我们使用了
SpringLoaded
进行热部署,但是 IDEA 里有 Bug,热部署后的类不能进行 Debug,现在有一个临时的解决办法,使用 Remote Debug 的方式就可以 Debug 了。Tomcat 使用 SpringLoaded 进行热部署,把 Tomcat 的 docBase 指向打包生成的目录,这样每次修改后编译,打包 (可以使用一条命令完成这些事:mvn compile package
),Tomcat 就会自动加载新的修改,进行热部署,而且同时可以在 IDEA 里远程调试了。这种情况下不需要 war 包,所以打包时不生成 war 包,加快了打包的速度。
复制 Training.war
到 <tomcat>/webapps
目录,Tomcat 启动的时候会自动解压它到 Training
目录,或者直接复制 Training
目录到 <tomcat>/webapps
目录。
在 Tomcat 启动文件 <tomcat>/bin/catalina.sh
中加一个 -Dfile.encoding=UTF-8
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
在 Tomcat 启动文件 <tomcat>/bin/catalina.bat
中加一个 -Dfile.encoding=UTF-8
set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8"
<tomcat>/conf/server.xml
里修改
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
为
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
例如默认访问 user-form 需要带上项目目录名,即 http://localhost:8080/Training/user-form,但是我们不想带上项目名,就像访问正常的网站那样,直接用 /
来访问,则配置 context path 为 /
。
<tomcat>/conf/server.xml
里的 Host
下添加或修改
<Host>
...
<Context
path="/"
reloadable="true"
docBase="/usr/local/apache-tomcat-8.0.21/webapps/Training" />
</Host>
docBase
为项目的绝对路径或者为项目在<tomcat>/webapps
下的目录名。
终端里使用命令
cd <tomcat>/bin
./catalina.sh run
然后访问如 http://localhost:8080/user-form,如果能访问,说明项目部署成功了。