Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 332|回复: 0

解决tomcat部署项目中碰到的几个问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-5-12 16:27:33 | 显示全部楼层 |阅读模式

    在tomcat上部署项目并进行测试,经常会碰到各种问题。在不同的操作系统上部署,对问题的解决也会有一些差异。

    1 发现问题

    1.1 项目部署

    先将项目达成war包,放到tomcat的webapps目录下,然后启动tomcat,在浏览器中键入项目的部署地址,进行访问,查看效果。

    在windows系统中,利用cmd,cd到tomcat安装目录,在bin文件夹中使用shutdown.bat和startup.bat进行关闭和启动tomcat的操作。

    在Linux系统中,cd到tomcat的安装目录,在bin目录下,使用./shutdown.sh和./startup.sh命令进行关闭和启动tomcat的操作。

    1.2 查看报错信息

    查看报错信息,可以分为前端和后端,前端是指浏览器端,在浏览器端可以直接使用F12查看console的信息,比如报500的错误码,我们就需要到后台查看tomcat的信息。一般情况下,我们在前端进行操作,后端tomcat也会有相应的信息显示。这里我们重点说一下tomcat信息查看。

    在tomcat启动的时候,伴随着tomcat的启动,启动过程的各种信息也会显示出来。

    在window系统中,我们利用startup.bat启动tomcat的时候,cmd会自动打开一个窗口,tomcat启动的信息也会逐条显示出来,如果没有什么问题的信息,会定格显示,如果有异常或者错误信息,会有一个Cause by开头,后面很多信息都会有空格,我们主要看cause by后面的信息,就是引起异常或错误的主要原因。

    在Linux系统中,我们利用./startup.sh启动tomcat,不会弹出新窗口来显示启动信息,启动信息会自动保存到日志文件中,启动tomcat命令输入之后,我们切换到logs目录,然后键入tail -f catalina.out命令,可以实时查看tomcat的启动信息,如果有异常或错误,显示的信息也和windows中tomcat信息一样,以cause by开头,后面跟着一些信息。

    2 解决问题

    Tomcat启动的时候,启动信息随着启动过程在不停的动态显示,如果没有什么问题,信息(Info)会正常显示,如果出现问题我们就会看到cause by,对于cause by后面的信息,我们着重查看第一段信息,即为导致异常或错误的直接原因,下面通过几个调试中的实例来谈谈解决问题的过程。

    2.1 redis问题

    Tomcat启动后,利用浏览器访问,结果报404错误,也就程序有问题,没有正常运行,查看tomcat信息,发现错误提示如下。

    Caused by: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379 at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1092) ~[spring-data-redis-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1065) ~[spring-data-redis-2.1.3.RELEASE.jar:2.1.3.RELEASE]    at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:865) ~[spring-data-redis-2.1.3.RELEASE.jar:2.1.3.RELEASE]  at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:340) ~[spring-data-redis-2.1.3.RELEASE.jar:2.1.3.RELEASE]  at org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration$EnableRedisKeyspaceNotificationsInitializer.afterPropertiesSet(RedisHttpSessionConfiguration.java:302) ~[spring-session-data-redis-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]  ... 29 common frames omitted

    其中cause by后面的“org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis;”信息很重要,是导致错误的最直接原因。根据信息我们知道是redis连接不上,下面就开始查找redis的问题,首先是配置信息,在application.properties 文件中有关于redis的配置信息,redis服务器信息找到对应的redis服务器,查看redis设置。

    比如我们是在windows操作系统中安装的redis,查看redis配置,主要注意以下几点,一个是配置文件,对windows系统来说,redis默认的配置文件是redis安装目录下的redis.windows-server.conf文件,文件打开后,重点查看两个地方,一处是访问ip的显示,bind 127.0.0.1,前面加#号进行注释,让这一句不起作用,因为它的意思是绑定本机ip为127.0.0.1,这样的话,只能本机访问,外部是不能访问的。第二处是protected-mode no,保护模式设置为no,默认是yes。再一个是对防火墙的设置,让防火墙对redis开放端口。Redis的默认端口是6379,如果防火墙是开启状态,可以添加端口规则,让外部网络可以访问6379端口。具体的可以自行百度如何开放防火墙的端口。解决这些设置的问题,一般就可以对redis进行访问了。

    2.2 mybatis问题

    在页面进行登录的时候,输入用户名密码之后,一直不能登录,查看后台控制台打印的信息,如下

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

    大概意思是根据用户名密码,在后台查到两个结果,不知道是哪一个结果,所以就报错了,由于是测试阶段,用户很少,直接到数据库中查看,果然出现了两个一样的用户名密码,这是个程序的bug,在注册时候没有验证用户是否已经注册过,又注册了一遍,在数据库中把刚注册删除,可以正常登录。当然,同时,程序也要进行完善。

    2.3 文件权限问题

    Tomcat启动过程中,出现异常信息。

    java.io.IOException: Unable to create the directory [C:\Program Files\Apache……,

    不能在某个目录下创建目录,比如tomcat的webapps里面的war包,tomcat启动时,会将war包解压,在webapps中创建war包同名的项目目录,如果权限不够,就无法创建相应的项目目录。这个问题解决办法就是修改目录的操作权限,比如让用户对相应的webapps目录具有全部的操作权限。如下图所示。

     

    先在webapps上面点击右键,选择属性,然后按照上图进行顺序操作,第四步勾选完全控制,最后应用确定。

    3 结语

    我们在部署项目到tomcat或其他web应用服务器的过程中,碰到到的各类问题,可以按照控制台信息进行分析,然后找到问题所在,再进行相应的处理。也有的时候,控制台可能没有太多信息,这就需要分析整个项目的请求相应流程,比如权限问题,如果代码不够友好,没有返回信息,我们就需要在代码中加入各种请求的响应信息,查看在哪一步没有响应,把问题定位,这样就可以有针对性的进行分析。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 01:27 , Processed in 0.069358 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表