共计 1496 个字符,预计需要花费 4 分钟才能阅读完成。
博客
不晓得大家在应用 Tomcat
时,有没有遇到过运行或者启动我的项目时,页面被执行了两次的问题。
可能产生过,然而你没有发现。
首先看一下问题是怎么样的。
问题演示
这是一段 jsp
代码,说实话这玩意有点老了,不懂 jsp
的请听我解释这一段代码。
咱们定义一个全局变量
i
,i = 0
。咱们定义一个无参无返回值办法,
void add()
,这个办法中应用i++
来自加。咱们在下一句,
add()
调用这个办法。而后将
i
的值输入在页面。
我刚开始感觉答案必定是1
,也必须是1
。
然而,当我运行起来发现。
???? 竟然是2
?
我甚至狐疑是代码的问题 ……
于是我在 add()
办法外面输入一下日志。
我发现,这不是之间将 i
变成了 2
,而是add()
办法被调用了两次!
可是代码外面明明只调用一次啊?
我去浏览器搜寻相干案例,发现还真有几例,哈哈哈,浏览器万能。
通过一系列排查,发现是 Tomcat
针对你的我的项目运行了两次。
起因
为什么会运行两次呢?
因为你的我的项目原本就放在
Tomcat
的默认webapp
目录下(tomcat 在启动时必定会加载 1 次),而后又在server.xml
中做了配置,为了达到拜访根就能够拜访你的我的项目(这样Tomcat
就又加载 1 次), 后果,Tomcat 就会加载两次。
你可能也并没有将我的项目放到 webapp
目录下,然而你的 IDEA 工具给你了个我的项目映射,将你的我的项目映射到了 webapp
下。
也能够这样说,Tomcat 启动时,先加载
appBase
中配置的webapps
目录下的我的项目,而后再去加载docBase
中配置的我的项目,因为docBase
的相对路径(/xxx
)是在webapps
目录下,所以会被加载两次。
总的来说,就是 Tomcat
的sever.xml
的配置做了一次无用功,导致运行了两次。
如何解决?
首先,咱们有三种办法,咱们一个个说。
先记住这两个是啥:
docBase
是 web 利用和本地门路,path
是Tomcat
拜访这个利用的 URL 门路。
第一个办法
方法 1、不要将 hello 利用放在
Tomat
的默认webapp
目录下,把它移出去,而后在server.xml
中批改docBase
的值为我的项目所在位置的绝对路径 就能够了。
在 Tomcat 中的 conf
目录中,在 server.xml
中的,<host/>
节点中增加:
<Context path="我的项目的 URL 门路" docBase="Web 利用和本地门路" debug="0" privileged="true">
</Context>
第二个办法
删除掉 server.xml
中 Context
的手动配置,这样就不会加载两次,因为我的项目在 webapp
下,所以在拜访时,就只能是:http://ip:port/ 我的项目地址
这样来拜访了。
如果说,你我的项目曾经移入了
webapp
目录,然而还是一样,那你 IDEA 配置应该还是映射状态。
就像这样:
这样依然处于映射状态,至于怎么配置请自行钻研,我是间接去 Tomcat
的bin
外面启动的。
第三个办法
在 Tomcat
的conf
目录中,新建 Catalina
(留神大小写)\localhost
目录,在该目录中新建一个 xml
文件,名字能够随便取,只有和以后文件中的文件名不反复就行了,该 xml
文件的内容为:
<Context path="我的项目的 URL 门路" docBase="Web 利用和本地门路" debug="0" privileged="true">
</Context>
尾述
jsp
是一个很老的技术,我不是特地喜爱,然而找到一个问题是对本人很好的一个晋升,所以我感觉这个工夫很值,只管这个技术不是特地重要。
好的程序是改进去的,好的 bug 是找进去的。