今天写这片博客,记录一下我使用Tomcat遇到的一些问题,虽然现在的技术发展到spring boot、spring cloud等技术时代,可能使用Tomcat 做服务器部署项目的时代要过去了,但是也有一些需要维护的项目可能使用tomcat,或者在一些学校教学或者个人开发一些小项目可能或用到,所以记录一下,希望能解决您的问题。同时,文章中若有不正之处或者没有涉及到的问题,欢迎大家留言评论指正。
1.刚装上Tomcat,startup.bat启动闪退什么鬼?
问题描述:tomcat解压路径/bin/stratup.bat(windows环境下)启动tomcat,出现黑窗口闪退情况.
这种情况一般是是解压版的tomcat,此时需要在startup.bat文件的头部加上jdk和tomcat的环境变量。(别忘了在shutdown.bat文件里面也加上哦)
SET TOMCAT_HOME=E:\tomcat-7.0 (解压后的tomcat文件目录)
SET JAVA_HOME=D:\Java\jdk1.7 (java jdk目录)
2.tomcat启动成功欢迎页面出来了,我扔了一个静态页面,为什么不显示?
3.表单填完数据,后台为何获取到是中文乱码?
问题2,3,可能都是编码格式惹的祸
<!-- 修改编码问题 -->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
4.web项目Run As发布了,为何访问不了?
你修改项目的发布路径了吗?
5.编码改成UTF-8了,中文怎么还是乱码?
server.xml文件改了编码格式,改的只是get请求的编码格式。对于post请求的编码格式你注意了吗?
一、在HTML页面中使用meta标记可以确保浏览器按照指定的字符集进行解码页面,并限定表单提交时的数据编码方式
<meta http-equiv="content-type" content="text/html;charset=utf-8">
★在服务器端需要在调用getParameter()方法读取参数之前,告诉浏览器如何解码,使用如下代码即可完成该设置:
request.setCharacterEncoding("utf-8");
★注意该方法一定要要放在所有request.getParameter()方法之前。
★这种方式只针对POST请求有效。
二、也可以使用转码:String username = request.getParameter("username");
username = new String(username.getBytes("iso-8859-1"),"UTF-8");
对于项目中使用了spring这样的框架的项目,在项目的web.xml配置字符过滤器就可以了。
<!-- 设置servlet编码开始 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 设置servlet编码结束 -->
6.ajax明明传值了,可contorller里的参数会是null?
先说一下出现这个问题的需求,首先页面加载一张后台的图片,然后使用canvas在图片上做一些绘制,然后再把图片保存回服务器。
在图片绘制完成后,我是用的base64将图片转成字符串保存到传到后台,然鹅在后台却接到的参数都是null,打开浏览器的network里面显示请求request heards里面参数是有的可把我纳闷死了。后来发现是图片转成字符串导致参数数据过大,被tomcat给屏蔽掉了。
解决方案:tomcat/conf/server.xml
<Connector port="2018" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxPostSize="-1"/>
7.webapps下的war包删除?
首先运行的时候是不能删除的,tomcat在运行的时候是会实时监控webapps下的war包的,又增加的时候就会自动解压部署项目,所以删除war包,也就会跟着把项目自动删除掉了。
如想删除但又不想删除工程的话,可以先将tomcat停止运行后,再删掉war包,然后重启tomcat就可以了。
另外,tomcat的war在启东市自动解压,默认是执行一次的,以后再次重新启动的时候,tomcat是不会解压覆盖的
规则就是abc.war,如果存在abc文件夹就不会解压。不存在abc文件夹才会自动解压