解决tomcat部署项目中碰到的几个问题
在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应用服务器的过程中,碰到到的各类问题,可以按照控制台信息进行分析,然后找到问题所在,再进行相应的处理。也有的时候,控制台可能没有太多信息,这就需要分析整个项目的请求相应流程,比如权限问题,如果代码不够友好,没有返回信息,我们就需要在代码中加入各种请求的响应信息,查看在哪一步没有响应,把问题定位,这样就可以有针对性的进行分析。
解决tomcat部署项目中碰到的几个问题的更多相关文章
- 解决tomcat部署多个虚拟机时报IllegalStateException: Web app root system property already set to 的问题
解决tomcat部署多个虚拟机时报IllegalStateException: Web app root system property already set to 的问题 在web.xml中添加如 ...
- tomcat部署项目访问不加项目名方法
直接主题:tomcat部署项目访问不加项目名方法是打开tomcat的conf目录下server.xml文件 加入 <Context path="" docBase=" ...
- Tomcat 部署项目的几种常见方式
转自:https://www.cnblogs.com/yuht/p/5714624.html https://www.cnblogs.com/ysocean/p/6893446.html Tomcat ...
- Tomcat部署项目修改浏览器上猫咪头像
一.发现问题用tomcat部署项目,在浏览器标签也上发现了tomcat猫咪图.要把这个图修改掉. 二.解决问题apache-tomcat-5.5.28\webapps\ROOT下的ico文件,将需要替 ...
- tomcat部署项目,war包问题
tomcat部署项目后,war包是否能删除 答案是能删除的,前提是先停掉tomcat后才能删除 1)在tomcat中webapps目录下上传war包后,对war包自动解压 2)war包不能在tomca ...
- Tomcat部署项目乱码问题总结
打包好的war包放在tomcat下,有时会出现中文乱码的情况.首先应当确定项目的编码格式,tomcat的编码格式,以及cmd命令行的编码格式. 项目编码 将要输出到控制台或日志的字符串转为UTF-8 ...
- Tomcat部署项目时出错java.lang.IllegalStateException: ContainerBase.addChild: start:org.apache.catalina.Life
Tomcat部署项目时出错java.lang.IllegalStateException: ContainerBase.addChild: start:org.apache.catalina.Life ...
- tomcat部署项目问题
tomcat部署项目的时候,报内存溢出,一种解决方案是直接添加内存,网上都有教程,如下: Windows下,在文件/bin/catalina.bat,Linux下,在文件/bin/catalina.s ...
- linux服务器下tomcat部署项目内存溢出
今天将一个项目部署到linux服务器上,结果tomcat在启动运行到一定时间后就报错.根据以往的经验,查了一些资料,终于解决了该问题并顺便解决了生产环境中的get方式中文传递乱码问题. tomcat启 ...
随机推荐
- ruby the diference between gets and gets.chomp()
ruby the diference between gets and gets.chomp() 二者都是可以获取用户命令行输入的函数,但是 gets获取内容后,后面 附带了 多余的换行符号'\n'; ...
- MyBatis打印SQL执行时间
1.plugins MyBatis官网对于plugins的描述是这样的: MyBatis allows you to intercept calls to at certain points with ...
- 自己用 Netty 实现一个简单的 RPC
目录: 需求 设计 实现 创建 maven 项目,导入 Netty 4.1.16. 项目目录结构 设计接口 提供者相关实现 消费者相关实现 测试结果 总结 源码地址:github 地址 前言 众所周知 ...
- python之文件操作(基础)
文件操作作为python基础中的重点,必须要掌握. 1.默认我们在本地电脑E盘新建wp.txt文件进行测试,文件内容如下设置. 2.进行代码编写: f=open("E://wp.txt&qu ...
- eclipse 安装svn和gradle
公司项目用的eclispe svn和gradle 所以需要配置 SVN教程:https://blog.csdn.net/jieshaowang1229/article/details/5159499 ...
- 非正则表达式检验邮箱格式是否合法(Java代码实现)
一.邮箱格式需满足以下要求 1. 有且只有一个@ 2. @不能放在开头,也不能放在结尾 3. @之后必须有. ...
- github page 配置hexo 博客 的常见错误
缘起 最近看到好多的公众号作者推荐大家搭建自己的博客,自己手痒也搭建了一个个人博客lumang,具体过程就是一开始上网搜索一番教程,按照教程开始搭建,由于是windows的环境,同时教程也有很多的老旧 ...
- Data_r_and_w(csv,json,xlsx)
import osimport sysimport argparsetry: import cStringIO as StringIOexcept: import StringIOimpo ...
- KVM内核文档阅读笔记
KVM在内核中有丰富的文档,位置在Documentation/virtual/kvm/. 00-INDEX:整个目录的索引及介绍文档. api.txt:KVM用户空间API,所谓的API主要是通过io ...
- Python报错:SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 6, but no encoding declared...
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=686 具体报错内容: File "1.py", line 6 SyntaxError: Non- ...