您的位置 首页 java

java web工作常用技能篇(二)-Tomcat常用配置

前言: 在各类网站论坛上,没有找到与工作比较贴切的技能,所以特此写一些对刚步入工作或者工作中没有重视的技能与问题,各位大牛请及时关闭文章.

ps: 文中所有标点都是英文的,看官请不要在意.为了便于平时敲代码,所以中文输入法也默认了英文标点(防止各类因为标点引起的低级错误).纯属个人原创见解,若不正确,请各位批评指正.

java web工作常用技能篇(二)-Tomcat常用配置

Tomcat 常用配置

修改Tomcat的访问端口

我们找到tomcat安装目录的conf子目录下的server.xml文件,大致是70行左右,如下图:

java web工作常用技能篇(二)-Tomcat常用配置

默认端口8080

我们可以看到其中有个port=”8080″,一般上线前我们把这个修改成80,这样访问路径就变成了结合我的上一篇文章中修改项目访问路径),图中其他属性保持不变

修改Tomcat的 编码 格式

接着上一个端口配置,我们在Connector标签中再追加一个属性URIEncoding=”UTF-8″,配置内容就是这么简单,不过在这边说明一下为什么要增加这个配置,以及简要介绍原理.

java web工作常用技能篇(二)-Tomcat常用配置

设置编码格式

默认情况下,Tomcat会将用户(浏览器端)打包的请求内容使用ISO8859-1编码格式进行 拆包解码 ( 理解成 request ),再调用我们编写的业务逻辑程序,然后使用ISO8859-1编码格式进行 打包编码 反馈给用户( 理解成response ).而ISO8859-1编码格式是不支持中文的编解码的,简而言之会出现乱码.

这边提到了 乱码 ,我们就总结一下如何避开乱码问题,说几个关键的配置区域

1.容器层: 上面已经说明了tomcat容器需要配置拆包打包的默认编码格式

2.展示层: 再来JSP中,我们应该都知道需要配置页面编码格式,一般我们在页面最上面需要配置

java web工作常用技能篇(二)-Tomcat常用配置

jsp页面顶部编码格式配置

java web工作常用技能篇(二)-Tomcat常用配置

head标签中编码格式配置

3.持久 层: 项目使用的数据库也同样使用UTF-8的编码格式,这个根据具体的数据库来配置,这边不做介绍

4.编码 层: 将我们编写的 java 项目中的代码编码格式统一成UTF-8,以MyEclipse为例,右击我们的项目,点击properties

java web工作常用技能篇(二)-Tomcat常用配置

项目代码的编码格式

5. 业务层: 将程序运行时的编码格式统一成UTF-8,即在每一个处理请求的地方使用request.setCharacterEncoding(“UTF-8”);当然我们不会这么蠢,这样写起来又累又不方便维护,所以我们需要写一个通用编码 过滤器 ,在这个过滤器中配置request的编码格式.而如果你所在公司使用了框架,那这个就不用我们担心啦,我举个springMVC的配置例子.我们只需要在web.xml中配置CharacterEncodingFilter这个过滤器即可,如下图:

java web工作常用技能篇(二)-Tomcat常用配置

web.xml中配置编码格式

配置Tomcat内存(针对 Java内存溢出详解 )

其实我写本文章的重心在这里,因为我在各类文章论坛中都没有找到比较好的配置方案,可能也是我涉猎不够吧,不过在此我总结一下自己的使用心得以及别人的见解.

常见问题一 : java. lang .OutOfMemoryError: Java Heap space —- JVM Heap(堆)溢出

一般电脑内存不够大,我们开发的项目又比较大的时候,会出现该错误.下面解释一下原理:

JVM在启动的时候会自动设置JVM Heap的值,其初始空间( 即-Xms )是物理内存的 1/64 ,最大空间( -Xmx )不可超过物理内存(Heap的大小是Young Generation 和Tenured Generaion 之和),在JVM中如果98%的时间是用于GC,且可用的Heap size 不足2%的时候将抛出此异常信息.

解决方法: 手动设置JVM Heap(堆)的大小.

-server : 一定要作为第一个参数,在多个CPU时性能佳

-Xms : java Heap初始大小, 默认是物理内存的1/64.

-Xmx : java heap最大值, 建议均设为物理内存的一半 ,不可超过物理内存.


常见问题二 : java.lang.OutOfMemoryError: PermGen space —-PermGen space溢出

一般电脑内存不够大,我们开发的项目Class类又比较多的时候,会出现该错误.下面解释一下原理:

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域.由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen space溢出.

解决方法: 手动设置MaxPermSize大小.

-XX:PermSize : 设定内存的永久保存区初始大小,缺省值为64M.(可使用visualvm. exe 查看)

-XX:MaxPermSize : 设定内存的永久保存区最大 大小,缺省值为64M.(可使用visualvm.exe查看)


常见问题三 : java.lang.StackOverflowError —- 栈溢出

栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的.函数的调用过程都体现在堆栈上了.调用构造函数的 “层”太多了,以致于把栈区溢出了.通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间.通常栈的大小是1-2MB的.通常递归也不要递归的层次过多,很容易溢出.

解决方法: 修改我们的java程序.

不同环境下的Tomcat内存配置方法

在生产环境中Tomcat内存设置不好很容易出现jvm内存溢出.上一段落已经进行各类内存问题的详解以及配置参数的简要介绍,下面我们介绍一下各种环境下的具体配置方法.

1. 命令行展示的tomcat:

修改TOMCAT_HOME/ bin /catalina.sh(windows中是catalina.bat), 位置cygwin=false前,添加如下语句

JAVA_OPTS=”-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m”

2.如果tomcat注册成了windows服务,使用tomcat目录中的 /bin/tomcat8w.exe修改就可以了.如下图

java web工作常用技能篇(二)-Tomcat常用配置

tomcat服务内存配置方法

3.如果要在myeclipse中启动tomcat,上述的修改就不起作用了,可如下设置:

Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的Optional Java VM arguments中添加如下内容:

-Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m


最后说一句:不管配置什么,以及配置的参数值是多少,都需要不断的调试,不要轻易放弃,比如tomcat的内存配置,也不是越大越好,适合你的计算机配置才是最好的,所以需要配置后的多次测试

文章来源:智云一二三科技

文章标题:java web工作常用技能篇(二)-Tomcat常用配置

文章地址:https://www.zhihuclub.com/174394.shtml

关于作者: 智云科技

热门文章

网站地图