JavaWeb工程部署

我们在使用Eclipse开发JavaWeb应用程序时,一点运行就会自动弹出浏览器,显示程序的运行结果。实际上,IDE帮我们省略了很多步骤。这篇笔记主要介绍如何在服务器环境上部署JavaWeb应用程序。

War包

Java Web应用程序有固定的文件目录结构,开发完成后,可以把项目打包为一个.war文件部署,也可以直接把整个项目文件夹部署(War Exploded方式)。WAR包的优点是只有一个文件,管理起来十分方便;而不打包,优点则是系统管理员可以很方便的对内部的配置文件进行修改。这两种方式的选择,应该视部署环境而定。

无论WAR包还是War Exploded,在Tomcat中最简单的部署方式就是把项目扔到webapps文件夹下。不需要任何配置,甚至不需要重启Tomcat,项目就已经热部署完成了。

例如将myproject.war直接放入webapps,tomcat会自动将其解压到一个同名的文件夹,部署机器的IP是192.168.1.104,在浏览器中访问http://192.168.1.104:8080/myproject/就能正常访问到新部署的项目了。

自动部署

打开CATALINA_BASE/conf/server.xml,我们可以看到下图的默认配置。这也解释了Tomcat解压缩WAR包和自动热部署的行为。

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

Context应用上下文

上面访问项目时,我们输入的地址是http://IP:端口/myproject/,其中myproject和我们放入webapps的WAR包同名。实际上,对于Tomcat,我们部署进去的一个“项目”被称为“Context”,开发JavaWeb应用程序时,我们称/myproject为ContextPath。如果Tomcat里部署了多个项目,我们就能使用不同的ContextPath进行访问。

如果我们需要项目在根路径/访问,那么最简单的方法是将我们的War包命名为ROOT.war

手动进行部署配置

现在我们有/home/ubuntu/myproject.war,并且不打算把它放到webapps里,我们需要命名这个项目的上下文路径(Context)为abc,即我们希望使用http://IP:端口/abc/进行访问。此时就必须手动配置了。

我们在conf/Catalina/[hostname]目录下,创建一个abc.xml,并写入以下内容:

<Context docBase="/home/ubuntu/myproject.war">
</Context>

这样配置就能达到我们的要求了。注意文件名abc.xmlabc就是Context名字,而配置文件里的docBase则是WAR包的路径。通过此种方式,我们也可以配置多个在不同位置的项目。

注:网上查到的资料都比较老了,网上大多数的手动配置是在server.xmlhost里配置context,这样做的缺点是server.xml只会在服务器启动时读取一次,而上述的方法tomcat会一直监视配置文件的变化,修改不需要重启Tomcat,比如把abc.xml改名为cba.xml,新的ContextPath会立刻生效,而且这种方式配置文件结构也比较清晰。

Host虚拟主机

打开conf/server.xml,我们看到Tomcat默认配置了一个Host,其name属性为localhost。前文说过,Tomcat可以配置多个context,也就是多个web应用程序,但是这些web应用程序在同一个服务器上,其IP相同。如果这些web应用程序域名不同,用户从DNS服务器得到web应用程序服务器IP是同一个,那服务器如何知道用户想要访问哪个网站呢?

实际上,用户的HTTP请求里有一个Host字段,值就是用户请求的域名,Tomcat配置的web应用程序如果需要使用域名,可以采用配置虚拟主机方式进行绑定。

不过真实的生产环境中,我们很少在Tomcat上配置虚拟主机,我们一般都是在Nginx上配置,通过反向代理转发到不同工程,这部分内容具体可以参考Nginx相关章节。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap