解决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启 ...
随机推荐
- Ocelot中文文档-缓存
目前Ocelot使用CacheManager项目提供了一些非常基本的缓存.这是一个了不起的项目,它解决了很多缓存问题. 我会推荐这个软件包来做Ocelot缓存. 如果你看看这里的例子,你可以看到如何设 ...
- php仿经典省市县三级联动
之前有个需求要写个类似省市县三级联动的页面,于是,网上找了点资料看了下,其实原理很简单: 当我们选择一级栏目中某条记录的时候,会获取该栏目的vaule值,并发起ajax请求,后台根据这个vaule值, ...
- jqery对于select级联操作
问题:今天在做一个需求的时候,有一个级联操作也就是选中下拉框的一列就显示对对应的数据 处理:我在做级联的时候在option的列里面绑定click的事件发现这个事件行不通:查资料发现select触发的是 ...
- 构建基础的SpringMVC+Hibernate+SpringloC项目
一. SpringMVC 阅读我的上一篇文章<使用MyEclipse2015构建SpringMVC项目>,知道基本的构建方法,先构建一个纯springmvc项目,再对web.xml按照本文 ...
- THINKPHP 调试------输出sql语句
echo $model->getLastSql();//$model为实例化的模板类
- java中new关键字和newInstance()方法的区别
1> new是一个关键字,可以说是一个指令: newInstance()是一个方法,Class对象的一个方法. 2> new主要作用是在内存中生成一个实例,而这个类可以没有提前加载到内从中 ...
- Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.sup
解决:找不到资源文件: 系统会根据分辨率来选择加载不同drawable下文件夹的资源,如果只在一个文件下放了资源文件,不同的分辨率设备的会报错.
- composer安装laravel指定版本
版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/qq_38125058/article/details/79126051 首先安装composer,附安 ...
- java多线程对CountDownLatch的使用实例
介绍 CountDownLatch是一个同步辅助类,它允许一个或多个线程一直等待直到其他线程执行完毕才开始执行. 用给定的计数初始化CountDownLatch,其含义是要被等待执行完的线程个数. 每 ...
- File文件操作学习总结
1.java.io.file用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录, 2.File类只能用于表示文件(目录)的信息(名称和大小),不能对文件内容进行访问. ...