关于tomcat 多个配置多个host加载多次,导致initSerlet加载多次
2018-01-31 20:05
696 查看
之前公司申请了五个域名,因为前期只有一个项目,所以老板要求多个域名对应到一个项目上,于是,我就在tomcat的web.xml上配置了多个host如下:
<Host name="www.XXX.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
<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 name="www.XXX1.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
<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 name="www.XXXX.cn" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
<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 name="www.XXXX.net" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
<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 name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
这样写了。
后来才知道,是因为前面配了5个host才导致这样的问题的,因为当时对tomcat的web.xml配置不是很熟悉,后来网上搜了一堆,很巧合的发现了篇博客写的,其实多个域名对应一个项目的话,可以使用web.xml 里面的一个标签,<Alias>www.XXX.com</Alias>
标签。
于是上面的配置就变成如下:
<Host
name="www.XXX.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite"
debug="0" reloadable="true" />
<Alias>www.XXX1.com</Alias>
<Alias>www.XXXX.cn</Alias>
<Alias>www.XXXX.net</Alias>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log."
suffix=".txt"
%l %u %t "%r" %s %b" />
并且将引擎的<Engine></Engine> defaultHost="www.XXX.com">, 因为一个Engine 必须有一个host 跟 它的名字一样,
这样配置完之后,我们再去看log,此时只init方法只执行了一次。成功解决了问题。
<Host name="www.XXX.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
<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 name="www.XXX1.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
<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 name="www.XXXX.cn" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
<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 name="www.XXXX.net" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
<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 name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
这样写了。
然后大概过了几个月,公司业务的增长,项目也多了,后来其中有个项目就是关于微信开发的,需要从微信端拿accessToken,项目的web.xml 配置了一个init的servlet,本来每次init一次,从微信端拿得accessToken,是正常的,但是部署到服务器之后,一直有问题,后来研究了很久,在 项目中也写了很多log,到后面,才发现,是因为init这个servler 被执行了很多次导致的。没执行一次拿到一个accessToken,然后之前访问拿到的accessToken,跟最后一次项目的accessToken不匹配,导致了问题出现。
后来才知道,是因为前面配了5个host才导致这样的问题的,因为当时对tomcat的web.xml配置不是很熟悉,后来网上搜了一堆,很巧合的发现了篇博客写的,其实多个域名对应一个项目的话,可以使用web.xml 里面的一个标签,<Alias>www.XXX.com</Alias>
标签。
于是上面的配置就变成如下:
<Host
name="www.XXX.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite"
debug="0" reloadable="true" />
<Alias>www.XXX1.com</Alias>
<Alias>www.XXXX.cn</Alias>
<Alias>www.XXXX.net</Alias>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log."
suffix=".txt"
pattern="%h
%l %u %t "%r" %s %b" />
</Host>
并且将引擎的<Engine></Engine> defaultHost="www.XXX.com">, 因为一个Engine 必须有一个host 跟 它的名字一样,
这样配置完之后,我们再去看log,此时只init方法只执行了一次。成功解决了问题。
相关文章推荐
- 关于tomcat的server.xml里host节点配置的一些说明
- 关于自定义对话框加入自定义ListView和getView多次加载导致EditText获取文本的问题
- Tomcat增加Context配置导致启动的时候项目加载两次
- tomcat配置多域名站点启动时项目重复加载多次
- Tomcat启动时Host标签和Context标签的处理导致程序部署多次
- Tomcat增加Context配置导致启动的时候项目加载两次
- Tomcat增加Context配置导致启动的时候项目加载两次
- 服务器部署_nginx的host not found in upstream "tomcat_www.bojinne" 错误解决办法
- 关于ie中easyui form组件load事件无法多次加载数据
- tomcat context 配置加载问题
- 关于COM服务之加载顺序,此时你可能出现程序卡死,假死等现象,因为com服务可能加载了一半,导致其他需要com的服务假死
- CSDN博客工具配置部分存在Bug,导致不能加载Google搜索
- web tomcat配置多个host实例
- 关于在eclipes中配置tomcat不能显示主页面问题
- 关于JavaWeb(一)——web介绍,tomcat与安装及其常见问题,虚拟目录及其配置虚拟主机
- tomcat 多域名配置问题,context配置书写规范导致的jsp编译异常
- 关于nginx在tomcat下配置使用
- 关于Struts2.1.6中配置 constant name="struts.devMode" value="true" 在tomcat启动时报错的问题 .
- 【VUE】关于VUE环境配置问题导致IIS发布之后Create与Mounted方法的执行问题
- 关于ViewPager加载多个导致OOM内存溢出的问题。