1.打包好的web的war包
2.部署在tomcat的webapps路径
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
3.配置server.xml,
<context path="" docBase="xxxx" reloadable="true" />
4.启动tomcat
5.直接使用localhost:8080访问项目会出现404页面(Tomcat的控制面板已被屏蔽,强制跳转至项目首页),但是重启tomca之后而且项目会被启动两次,页面正常访问;
原因:
这个与tomcat的加载顺序有关系,第一次启动需要将war解压,但是在解压之前已经处理过server.xm了,server.xml在这个时候并没有找到xxxx工程。于是开始解压,普通情况,在webapps下的工程解压后都可以通过工程名访问的,这个war也是。只有在第二次及以后启动tomcat,server.xml才能找到xxxx工程,才可以通过localhost直接访问。
解决方案:
1.部署工程的时候,即将war包解压好。或者说直接发布解压后的包,不通过tomcat解压war包。
2.第一次部署war包的时候需要启动两次tomcat。这个方案可以解决,但是比方采用spring框架,那么applicationContext.xml配置文件会加载两次。导致spring项目启动两次的元凶
3.通过nginx代理,不去配置无需工程名的context。也可以达到不需要工程名即可访问工程的效果。这个方案有风险,因为开发环境的设计是没有工程名后缀的,那么工程里边,很多页面的跳转就已经被设计成为了不带工程名后缀的,如果这个时候加上,有些页面会存在找不到的风险。
4.可以将工程放在非webapps的目录下,然后在context标签的path属性配置war包的路径。也就是将war包放在Host.appBase指定的路径之外的地方就可以了。这个方案在tomcat解压后,会在webapps(Host标签的属性appBase)下,生成ROOT文件夹,即是解压后的包。这个也可以解决。
步骤:
4.1 在Tomcat目录下新建war文件,将war包放进该文件夹;
deployXML ="false" : 不部署conf/catalina/localhost下的xml相应的WEB应用
deployOnStartup ="false" :tomcat启动时, 不部署webapps下的所有web应用
autoDeploy ="false" :避免tomcat在扫描改动时, 再次把webapps下的web应用给部署进来.
4.2 在server.xml中修改配置如下:
<Host name="localhost" appBase="" unpackWARs="true" autoDeploy="false" deployXML="false" deployOnStartup="false">
<Context path="" docBase="war/xxx.war" debug="0" privileged="true" reloadable="false" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log"
suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
</Host>
host标签的appBase标签不写,context标签的docBase写你项目地址和war包名字(war/xxx.war);
5.修改server.xml配置文件的host标签与context标签:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="xxx.war" debug="0" privileged="true" reloadable="false" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log"
suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
</Host>
host标签的appBase标签写Tomcat的webapps,context标签的docBase写你项目的war包名字(xxx.war);
重启Tomcat,等待一段时间即可;
本文作者:黄文勇
本文链接:https://www.3dcw.cn/index.php/archives/345/
最后修改时间:2020-05-29 17:45:43
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!