当前位置:首页 > Java技术 > 解决tomcat部署项目中碰到的几个问题

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

2022年09月16日 21:40:18Java技术6

在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目录具有全部的操作权限。如下图所示。解决tomcat部署项目中碰到的几个问题 _ JavaClub全栈架构师技术笔记

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

3 结语

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

作者:cooldream2009
来源链接:https://blog.csdn.net/cooldream2009/article/details/89176546

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/42348.html

标签: Exception
分享给朋友:

“解决tomcat部署项目中碰到的几个问题” 的相关文章

浅谈java异常[Exception]

一. 异常的定义 在《java编程思想》中这样定义 异常:阻止当前方法或作用域继续执行的问题。虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常。绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败。之所以java要...

[biomaRt] Query ERROR: caught BioMart::Exception::Usage: Attributes from multiple attribute pages are not allowed

[biomaRt] Query ERROR: caught BioMart::Exception::Usage: Attributes from multiple attribute pages are not allowed

正文 Query ERROR: caught BioMart::Exception::Usage: Attributes from multiple attribute pages are not allowed 就如报错所说, 来源于多个attribute pages...

Android程序报IOException和ConnectException

写的是Android程序作为客户端访问Java Web应用程序, android应用程序是用通过URL,HttpPost request = new HttpPost(url) ; HttpResponse response=DefaultHttpCli...

Java使用dom4j读取xml时报错:org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence

1.Java使用dom4j读取xml时报错:   org.dom4j.DocumentException: Error on line 2 of document  : Invalid byte 2 of 2-byte UTF-8 sequence. Nested ex...

Writing exception to parcel

04-01 17:38:28.101 4466-5268/? E/DatabaseUtils: Writing exception to parcel           &...

出现Exception in thread “main“ java.net.ConnectException: Connection timed out: no further等解决方法

出现Exception in thread “main“ java.net.ConnectException: Connection timed out: no further等解决方法

出现如下问题: 在连接rabbitmq的时候出现了连接超时的提示 Exception in thread "main" java.net.ConnectException: Connection timed out: no further info...

android ExceptionInInitializerError解决办法

09-20 01:13:36.180: E/AndroidRuntime(5202): FATAL EXCEPTION: main 09-20 01:13:36.180: E/AndroidRuntime(5202): java.lang.ExceptionInInitiali...

Uncaught Error: SECURITY_ERR: DOM Exception 18

Question: I get the following error in Ch...

Error和Exception有什么区别?

Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。...

ASP.NET中Application_Error对Exception的集中处理

ASP.NET中对Exception的统一集中处理常见的有两种方式: 1、通过配置Web.config的customErrors节点,配置defaultRedirect属性来实现所有“未处理的异常”均跳转向同一页面 2、通过Global.asax中的Application_E...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。