浅谈Tomcat乱码与端口占用的解决方案
- 格式:pdf
- 大小:1.55 MB
- 文档页数:3
tomcat常见的错误与解决⽅案⼩结⼀、tomcat启动时错误问题1:The JAVA_HOME environment variable is not defined This environment variable is needed to run this program;解决:没有在tomcat的配置⽂件.bash_profile中设置环境变量JAVA_HOME,具体设置⽅法为:加⼊如下⼏⾏:JAVA_HOME=/home/tomcat/j2sdk1.4.2_08(具体值要以实际的jdk安装路径为准)export JAVA_HOMECLASSPATH=/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.jarexport CLASSPATH问题2:Error occurred during initialization of VM Could not reserve enough space for object heap解决:在tomcat的bin⽬录下,catalina.sh⽂件的tomcat内存参数配置过⼤,超过机器可⽤内存总数造成,修改到适当的值即可,修改的参数为:JAVA_OPTS="-Xms50m -Xmx60m"问题3:tomcat启动时报某个⽬录没有权限,启动失败,或者不能执⾏某些jsp页解决:tomcat需要tomcat⽤户具有⼀些⽬录和⽂件的相应权限, 所有⽬录应该具有读写执⾏(浏览)的权限,jsp,class⽂件应该最少具有读权限, ⼀些⽂件需要写权限,下⾯是已知的需要读写权限⽂件的列表:$CATALINA_HOME/logs下所有⽂件$CATALINA_HOME/work下所有⽂件$CATALINA_HOME/publish/main/count.txt⽂件$CATALINA_HOME/publish/chatroom/resource下的所有.xml⽂件所有上传图⽚⽬录都需要写权限。
【原创】tomcat 端口被占用Address already in use: JVM_Bind:8080tomcat端口被占用的情况:(一)已经启动了tomcat,如果没有关闭再次启动,就会报错(二)没有tomcat启动,仍然报端口被占用。
可能是eclipse中启动了tomcat,eclipse异常终止后,tomcat 内核进程还在。
以我遇到的情况为例:在eclipse中启动了tomcat,调试程序。
中途eclipse异常崩溃,我就重新打开了eclipse,再启动tomcat 时,报错:严重: Error initializing endpoint.BindException: Address already in use: JVM_Bind:8080at .PoolTcpEndpoint.initEndpoint(PoolTcpEndpoint.java:297)at org.apache.coyote.http11.Http11BaseProtocol.init(Http11BaseProtocol.java:138)at org.apache.catalina.connector.Connector.initialize(Connector.java:1016)at org.apache.catalina.core.StandardService.initialize(StandardService.java:580)at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:791)at org.apache.catalina.startup.Catalina.load(Catalina.java:503)at org.apache.catalina.startup.Catalina.load(Catalina.java:523)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at ng.reflect.Method.invoke(Method.java:585)at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:266)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:431)2009-10-28 17:18:55 org.apache.catalina.startup.Catalina load我以为eclipse没启动好,结果又重启了一次,问题依旧。
乱码问题解决方案1. 名词解释及其作用1. contentType: <%@ page contentType="text/html; charset=UTF-8"%>2. pageEncoding:<%@ page pageEncoding="UTF-8"%>3. html页面charset:<META http-equiv="Content-Type" content="text/html; charset=UTF-8">4. setCharacterEncoding:request.setCharacterEncoding(),response.setCharacterEncoding()5. setContentType:response.setContentType()6. setHeader: response.setHeader()7. jsp页面编码: jsp文件本身的编码8. web页面显示编码:jsp的输出流在浏览器中显示的编码9. web页面输入编码: 输入框输入的字体编码10. web服务器输入的请求流: web Server相应浏览器的请求数据11. web服务器输出的响应流: web Server相应浏览器的输出数据2. 他们之间的相互影响和作用域,以及先后作用顺序1. pageEncoding: 只是指明了JSP 页面本身的编码格式,跟页面显示的编码没有关系;容器在读取(文件)或者(数据库)或者(字符串常量)时将起转化为内部使用的Unicode,而页面显示的时候将内部的Unicode转换为contentType指定的编码后显示页面内容;如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1。
Tomcat部署项目时启动报错总结1、虚拟机报错端口被占用tomcat的默认端口是8080(或者其他自己设置的),可能已经被其他占用。
解决方法:在tomcat安装路径下conf文件夹中的server.xml中把断口号改掉!如果一台机器上使用多个tomcat,则改掉所有相关的端口避免重复了,包括想如下在server.xml中找到如下地方改掉port的值●●(改完后看看和本机上正在用的tomcat是不是有重复的port)2、tomcat的启动窗口一闪而过Tomcat启动的dos窗口一闪而过,如何看出错信息?在DOS窗口运行STARTUP.BAT文件,另外,吧startup.bat文件最后的call "%EXECUTABLE%" start %CMD_LINE_ARGS%改成:call "%EXECUTABLE%" run %CMD_LINE_ARGS%分析原因1:jdk的环境变量没有配置好解决方法:检查jdk环境变量的配置是否正确,或者重新配置jdk的系统环境变量JDK环境变量配置的步骤如下:1.我的电脑-->属性-->高级-->环境变量.2.配置用户变量:a.新建JAVA_HOMEC:\Program Files\Java\j2sdk1.5.0(JDK的安装路径)b.新建 PATH (注意:把java的配置放在path的最前面)%JAVA_HOME%\bin;%JAVA_HOME%\jre\binc.新建CLASSPATH.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar3.测试环境变量配置是否成功:开始-->运行--〉CMD键盘敲入:JAVAC JAVA出现相应的命令,而不是出错信息,即表示配置成功!环境变量配置的理解:1. PATH环境变量。
作用是指定命令搜索路径,在i命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。
上海纽斯达科技tomcat常见错误与解决方法上海纽斯达科技有限公司2014-10-25文档状态目的:在tomcat 服务器出现故障时,能快速定位并解决相关错误。
保密:本文档仅供内部使用,请勿外传概述:tomcat 常见错误与问题之解决方法技术指南。
安装环境:系统环境:redhat enterprise 6.5 64bit文件状态:【 】草稿【 】修改稿 【√】正式发布 文档编号 Nsdkj-779 保 密 等 级 限制 作 者 刘恒亮 最后完成日期 2014-12-25 审 核 人最后审核日期 2014-12-25 批 准 人最后批准日期 2014-12-25注释:Q代表问题,A代表错误解决办法Q:在以tomcat用户启动tomcat时提示:The JAVA_HOME environment variable is not defined This environment variable is needed to run this programA:没有在在tomcat的配置文件.bash_profile中设置环境变量JAVA_HOME,具体设置方法为:加入如下几行:JAVA_HOME=/home/tomcat/j2sdk1.4.2_08(具体值要以实际的jdk安装路径为准)export JAVA_HOMECLASSPATH=/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/li b/dt.jarexport CLASSPATHQ: 在以tomcat用户登录linux系统后,提示:-bash: /home/tomcat/j2sdk1.4.2_08: is a directory-bash:/home/tomcat/j2sdk1.4.2_08/lib/tools.jar:/home/tomcat/j2sdk1.4.2_08/lib/dt.ja r:没有那个文件或目录。
tomcat解决输出⽇志显⽰乱码问题tomcat 默认解压缩后,启动服务,控制台⽇志输出中⽂显⽰乱码;解决⽅法为:tomcat/conf/ ⽬录下修改logging.properties找到java.util.logging.ConsoleHandler.encoding = utf-8这⾏更改为java.util.logging.ConsoleHandler.encoding = GBK上⾯的⽅式可能不太好,补充下⾼⼿的做法:⾸先要分清是tomcat⽇志编码,与idea的⽇志显⽰控制台编码tomcat⽇志编码:打开cmd窗⼝,查看cmd的输出内容编码格式,命令:chcp 如果显⽰936为GBK,这个是默认的;此时,切换到 tomcat的bin⽬录下,执⾏catalina.bat run,则cmd窗⼝输出的启动⽇志中,中⽂乱码;因为:tomcat/conf/logging.properties 配置⽂件的java.util.logging.ConsoleHandler.encoding = UTF-8已设置为utf8; 解决⽅法:修改cmd窗⼝的编码格式为 UTF-8,执⾏"chcp 65001"切换cmd为utf8,"chcp 936"切换cmd为gbk;再次切换tomcat/bin⽬录执⾏catalina.bat run;⽇志正常;idea显⽰编码:windows默认⽤GBK,所以idea显⽰默认为gbk编码,【⼀定】在 Help-- custom vm options 添加-Dfile.encoding=UTF-8,强制为utf8编码显⽰,不要⾃⼰改.vmoptions可能位置不对,idea会在⽤户⽬录复制⼀个【切忌】⾃⼰改tomcat的logging.properties 为GBk 会导致调试时get/post参数乱码。
tomcat端⼝被占⽤问题完美解决⽅案!启动Tomcat服务器报错:Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s).原因:端⼝8005, 8080, 8009被占⽤了。
可能是在打开Tomcat的情况下关闭了Eclipse,或是Eclipse⾮正常关闭,导致先前的Tomcat没有被关闭,端⼝占⽤。
或是其他软件占⽤了tomcat的端⼝号。
解决⽅法:⽅法1:杀掉占⽤端⼝的软件。
打开任务管理器,找到java虚拟机相关的进程javaw.exe,将它结束掉。
如果问题没有解决,往下看。
如果没有这个进程,那可能是其他软件占⽤了端⼝。
在开始菜单->运⾏->cmd->输⼊ netstat -ano 命令,可以查看哪个进程占⽤了8080和8009端⼝,找到占⽤端⼝软件的PID,然后在任务管理器找到对应PID的软件,关闭结束该进程即可。
如果任务管理器中没有显⽰PID列,需要设置,查看---》选择列---》勾选“PID(进程标识符)”。
⽅法2:修改tomcat默认端⼝号。
修改Tomcat的配置⽂件。
例如:C:/tomcat5.5.25/conf/server.xml<Connector port="8080" maxHttpHeaderSize="8192"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"connectionTimeout="20000" disableUploadTimeout="true" />Connector 节点,将port="8080"中的端⼝改为⼀个没有被占⽤的端⼝。
IE6的“以UTF-8发送URL”选项设置对请求页面字符编码有影响吗?关键字: 字符编码最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,servlet容器使用Tomcat6.0,浏览器FireFox3.0、IE6,涉及字符编码设置的地方我的思路就是编码的地方都统一使用UTF-8,具体配置如下:1.所有页面的charset设置为UTF-8。
2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文命名的文件以及请求以get方式提交有可能出现的乱码问题。
3.添加过滤器,调用request.setCharacterEncoding("utf-8")方法将request 的字符集设定为utf-8,解决请求以post方式提交的乱码问题。
其实这样的设置貌似是不会再出现乱码问题了,不过,问题依旧来了,如果我在浏览器的地址栏中输入中文参数提交,返回的页面却出现了乱码。
真搞不明白到底是哪里出了问题!说起来对中文乱码的问题一直是一支半解,出现乱码了,网上搜罗了一大堆资料,按照网上的配置,问题到是解决了,不过原理却搞的很模糊,一个请求发送到服务器,服务器业务逻辑处理后返回一个页面,这中间涉及的字符集转换,编码,解码过程一概不清楚。
这次,折腾了半天,总算是更进一步了解了字符编码问题,这里做个总结。
先看我的总结,有不对的地方欢迎批评。
首先我们看下,一个请求响应的流程浏览器 IE/FireFox -------->Servlet容器----------------->显示页面编码使用容器的URIEncoding转码解码我把用户发送请求方式不同引起的中文问题划分了四种类型:1、表单的get提交2、表单的post提交3、页面链接传递中文参数4、地址栏中参数直接输入中文提交1.首先我们看表单get方式提交浏览器根据页面的charset编码方式对页面进行编码,然后提交至服务器,首先进入对应的字符编码过滤器(如果有的话),不过Tomcat6.0对于get 提交方式采用的是server.xml文件中的URIEncoding编码方式,而并不会采用过滤器中设置的编码,那么根据我的环境设置,jsp页面都使用UTF-8的编码,Servlet容器的URIEncoding也设置为UTF-8,则servlet不用进行转码即可正确解码,获得正常的中文字符串。
解决中⽂乱码的⼏种解决⽅法(推荐)⾸先说明我的特殊情况:1. 前台jsp中,我使⽤的是 form post 请求,设置了 enctype="multipart/form-data" ,页⾯编码格式都是utf-82. 后台中,我使⽤的是commons-fileUpload组件,ServletFileUpload 解析form表单和⽂件,3. 设置 request.setCharacterEncoding("UTF-8");4. 设置了ServletFileUpload .setHeaderEncoding("UTF-8");5.Tomcat 的配置下⾯ server.xml 也已经设置了 URIEncoding="UTF-8";⾄此,按道理所有的格式都匹配上了,前后对应,解析出来的肯定是utf-8,但是经过formfield解析出来后任然是ISO-8859-1格式的编码,enctype="multipart/form-data" 会将数据以2进制的编码格式传递,因此我断定是 ServletFileUpload 解析时出了问题,多番查找,我的问题缺少了⼀步String formFieldValue = fileItem.getString("UTF-8");JSP和Servlet的六种中⽂乱码处理⽅法⼀、表单提交时出现乱码:在进⾏表单提交的时候,经常提交⼀些中⽂,⾃然就避免不了出现中⽂乱码的情况,对于表单来说有两种提交⽅式:get和post提交⽅式。
所以请求的时候便有get请求和post请求。
每种⽅式都有着不同的解决⽅法,之所以出现乱码,原因就在于get 请求时,其传递给服务器的数据是附加在URL地址之后的;⽽post的请求时,其传递给服务器的数据是作为请求体的⼀部分传递给服务器。
浅谈Tomcat乱码与端口占用的解决方案
这篇文章主要介绍了浅谈Tomcat乱码与端口占用的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。
但是有些小伙伴在启动Tomcat时也会遇到各种各样的问题,比如Tomcat的startup.bat启动后出现乱码,端口占用,启动后闪退等问题,这里我们来一一进行解决
问题一:Tomcat的startup.bat启动后出现乱码
找到Tomcat文件下的conf目录,修改logging.properties文件中java.util.logging.ConsoleHandler.encoding对应的值为G BK
重启Tomcat,你看到的启动页面是这样的话,说明乱码问题已经解决
问题二:一闪而退之端口占用
启动Tomcat出现一闪而退的现象,其实还是可以看到Tomcat终端输出的日志,这时你需要迅速截图捕获异常,太南
了。
最正确的方法是查看日志,找到Tomcat目录下的logs目录中catalina当天的日志
cat\apache-tomcat-8.5.47\logs\catalina.2019-10-17.log,在日志中可以看到类似这样的输出,Address already
in use: bind说明是端口占用了
17-Oct-2019 11:14:30.521 严重 [main] org.apache.catalina.core.StandardService.initInterna l Failed to initialize connector [Connector[HTTP/1.1-8080]]
org.apache.catalina.LifecycleException: Protocol handler initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:995)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:552)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:848)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.startup.Catalina.load(Catalina.java:639)
at org.apache.catalina.startup.Catalina.load(Catalina.java:662)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
在
Tomcat 目录找到conf 目录中的server.xml 配置文件,在Connector 标签中修改Tomcat 启动端口
问题三:非端口问题的一闪而退
启动Tomcat 直接一闪而退,在logs 目录的日志里面找不到错误信息,这个时候很大可能是因为Tomcat 与JDK 版本不对应导致的,有可能你的Tomcat 是Tomcat9版,而你的JDK 是1.7版本的,Tomcat 与JDK 版本对应关系可以参考这篇文章Tomcat 与JDK 版本对应关系,Tomcat 各版本特性
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at ng.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492) Caused by: .BindException: Address already in use: bind at .bind0(Native Method) at .bind(Net.java:433) at .bind(Net.java:425) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at .NioEndpoint.bind(NioEndpoint.java:219) at .AbstractEndpoint.init(AbstractEndpoint.java:1118) at .AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:224) at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581) at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:68) at org.apache.catalina.connector.Connector.initInternal(Connector.java:993) ... 13 more
<Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />。