foodmap开发:使用tomcat时遇到的坑

Context:Tomcat对web应用的称呼。
在build一个web应用、使其成为war包时,有个过程是要创建META-INF目录,这个目录同样包含该web应用的context。
Deploy:Tomcat安装web应用的过程。最简单的deploy方法是静态部署,也就是直接将war包复制到appBase目录下,而appBase目录的路径在

war包的创建过程建议直接看官方文档:Tutorial: Develop a Java EE application

host-manager

host-manager用于查看、创建、删除当前正在运行的主机状态。在浏览器输入localhost:8080/host-manager即可运行。但需要提前在conf/tomcat-users.xml中按给出的格式新建用户名和密码,然后在/host-manager界面用该用户名和密码进行登录。具体指令看这个官方文档:host-manager

Realm

只有在你的web应用包含一个或多个< security-constraint >时,你才需要看Realm的内容
具体看这个文档:Realm

Security Manager

这个是用来管理安全性的。新手的话先跳过这个,先学会怎样让程序上线再说。

JNDI

JNDI是通过设置配置,来解决数据库连接池泄露的问题。具体配置看这两篇官方文档:JNDI ResourcesJNDI Databases

数据库连接池泄露:
——数据库连接池,顾名思义,里面放的全是数据库的连接connection。数据库连接池创建和管理到数据库的连接池。回收和重用到数据库的现有连接比打开新连接更有效。

——连接池有一个问题。Web应用程序必须显式关闭ResultSet、statement和connection。如果Web应用程序不能成功关闭这些资源,可能导致这些资源再也不可重用,也就是数据库连接池“泄漏”。如果数据库连接池里没有更多可用的连接,这最终会导致web应用程序数据库连接失败。

这个问题有一个解决办法。ApacheCommonsDBCP 2可以配置为跟踪和恢复这些废弃的数据库连接。它不仅可以恢复这些资源,而且还可以为打开这些资源而从未关闭它们的代码生成堆栈跟踪。

Tomcat篇:

1.启动tomcat后,本机无法访问localhost:8080,关闭时显示异常

问题描述:
——在使用tomcat的bin目录下的shutdown.sh关闭tomcat时,终端显示:

./catalina.sh:1:eval: /usr/lib/jvm/java-11-openjdk-amd64/bin/java/bin/java:not found

问题分析:
——然后我就在计算机里面找到了eval与not found之间指示的位置,结果发现,比起其他人的错误报告,我的/bin/java好像重复了两遍,于是我在想会不会是JAVA_HOME的配置有问题。然后我再观察其他人的JRE_HOME,发现别人的好像后面都是没有/bin/java的,我的有。下面是我的JRE_HOME配置

Using JRE_HOME:  /usr/lib/jvm/java-11-openjdk-amd64/bin/java

——于是我的猜想是:JAVA_HOME配置写错了

解决过程:
——然后我就去修改了JAVA_HOME的配置,重新改回下面这样:

/usr/lib/jvm/java-11-openjdk-amd64

——我能找到的最简单易懂的JAVA_HOME修改是这篇腾讯的文章:如何在Ubuntu 18.04上安装Java
然后重新打开,的确没有了not found,而且还可以成功访问localhost:8080了!
然后再次shutdown时,给我显示了这个

总结:
csdn都是仇杀比,用bing一搜,五篇博客写的是一模一样的复制内容,全都是讲export。我exportNIMA呢?就是这些拉吉文章严重影响了学习环境!啊啊啊啊啊真的想神力柠檬

2.启动tomcat后,其他主机无法访问【公网IP:8080】

问题描述:
——启动tomcat后,本机能够访问localhost:8080,但其他主机不能通过该主机的公网IP:8080

问题分析:
——上网查过,有的说是防火墙的问题,有的说是server.xml的配置问题。我按照网上说的方案,在tomcat的conf目录下的server.xml中的connector环节添加了address=“0.0.0.0”,发现并没有用。
——然后我尝试了一下关闭防火墙,发现出现如下的提示:

$ service iptables stop
Failed to stop iptables.service: Unit iptables.service not loaded.
$ service iptables status
Unit iptables.service could not be found

——然后又发现,这些命令都是用在CentOS系统中的。Ubuntu系统查看防火墙状态使用的是另一条命令:

$ sudo ufw status
状态:不活动

——这就不对了,其他人博客说的是,关闭了防火墙就可以了,怎么已经关闭了还没用呢?
——然后又查到另一个解决方法,说是修改server.xml文件的配置:如何能够让外网通过公网IP或域名访问到服务器上面的项目
该文档里面有个错误:不能够遵循里面说的对< Context >进行修改
——然后又查到另一个方法:ubuntu修改防火墙配置。使用该方法开放了Ubuntu的8080端口后,主机仍然无法连接到虚拟机的tomcat
——查着查着,我突然发现:会不会是主机的问题,或者是ip地址的问题?于是我
————(1)在Ubuntu系统上使用ping www.baidu.com,可以连通
————(2)在Ubuntu系统上使用ping 1.2.3.4(这里假设1.2.3.4是我通过curl查到的虚拟机的公网ip),不能连通
————(3)在主机win10系统上使用ping 1.2.3.4,不能连通
————(4)在主机win10系统上使用ipconfig,发现虚拟机的ipv4地址为

VirtualBox Host-Only Network
IPv4地址----:5.6.7.8

(这里假设5.6.7.8是我通过ipconfig查到的虚拟机的公网ip)
————(5)在主机win10系统上使用ping 5.6.7.8,可以连通
————(6)在Ubuntu系统上使用ping 5.6.7.8,可以连通

2020年5月16日23:07:28
未完待续,持续更新

猜你喜欢

转载自blog.csdn.net/jieyannn/article/details/106166344