程序部署到服务器的错误总结

时间:2022-09-17 08:27:26

在本地开发javaEE程序,将程序部署测试完毕,部署到服务器上,同样的路径、同样的操作系统环境,但是遇到一些问题,总结记录如下:

1.文件访问权限问题

网页访问时候,报错org.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder
进入tomcat的安装目录下的logs目录下,查看日志文件,发现
java.io.FileNotFoundException: /usr/lib/apache-tomcat-8.5.14/logs/localhost_access_log.2017-05-12.txt (Permission denied)
最后定位是:tomcat下面的文件访问权限
使用chmod或者chown、chgrp改变文件访问权限,记得命令后紧接着加上-R参数,对目录下的所有文件及目录全部修改访问权限。

假设最初使用sudo开启tomcat的服务,那么查看work目录

ls -alh /usr/lib/apache-tomcat-8.5.14/work/Catalina/localhost/

work目录下的,如果开始时候,使用root权限部署运行的,那么将看到要运行的程序的owner以及所属于的group是root,需要修改访问权限,否则换成一般用户重新启动tomcat服务,也将无法成功运行。
类似地,可能页面上也有这种错误提示
org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.in_jsp
可使用同样办法修改。

jsp文件都被编译成一个个servlet存储在tomcat服务器的 $CATALINA_BASE\work[engine name][host name][webapps name]下面。

2.MySQL

2.1 Table ‘performance_schema.session_variables’ doesn’t exist

我的MySQL版本:mysql Ver 14.14 Distrib 5.7.14, for Linux (x86_64) using EditLine wrapper
hibernate连接数据库时,无法打开连接,原因是
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘performance_schema.session_variables’ doesn’t exist
解决办法
登录进入到mysql环境中,如以root用户登录

mysql -u root -p
mysql> set @@global.show_compatibility_56=ON;

另外看到这种办法也行
mysql_upgrade -u root -p –force
但是我执行时候,报错了,无法完成此操作,原因没有找。

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was ×××× ms ago
查看

mysql> show global variables like 'wait_timeout'; 
+---------------+-------+

| Variable_name | Value |
+---------------+-------+

| wait_timeout | 28800 |
+---------------+-------+

1 row in set (0.00 sec)

修改wait_timeout的值,可以参考网页3。
或者参考网页4,在hibernate的数据库连接中加上以下内容

<property name="timeBetweenEvictionRunsMillis" value="64800" />
<property name="testWhileIdle" value="true" />
<property name="validationQuery" value="select 1 from dual" />
<property name="testOnBorrow" value="true" />

3.jvm地址已经被占用或者端口占用

启动MySQL,报地址被占用或者端口被占用了,需要kill掉那个占用的进程

查看进程的id
ps -ef | grep NAME
查看占用的端口
netstat -nap | grep pid
关闭(中止)进程
kill 进程ID

参考网页
[1]Table ‘performance_schema.session_variables’ doesn’t exist
http://*.com/questions/31967527/table-performance-schema-session-variables-doesnt-exist/33262719
[2] Table ‘performance_schema.session_variables’ doesn’t existhttp://blog.csdn.net/ppppfly/article/details/50643059
[3]MySQL第二天早上第一次连接超时报错,解决方法com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:http://blog.csdn.net/cynhafa/article/details/19676865
[4]mysql dbcp Caused By: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received
http://www.cnblogs.com/dingyingsi/p/5711801.html
[5]Java异常解决总结001-org.apache.jasper.JasperException: java.lang.IllegalStateException: No output fold
http://blog.csdn.net/yanjingzhaohuole/article/details/49282945