tomcat编码设置utf8

Socket参数选项:

1、TCP_NODELAY:表示立即发送数据。

2、SO_RESUSEADDR:表示允许重用Socket所绑定的本地地址

3、SO_TIMEOUT:表示接受数据时的超时时间。

4、SO_LINGER:表示当执行close();方法时候,是否理解关闭底层的socket。(Reset报文)

setSoLinger(true, 0): 执行该方法,那么执行Socket的close方法,该方法也会立即返回,但底层的Socket也会立即关闭,所有未发送完的剩余数据被丢弃

setSoLinger(true, 3600): 那么执行Socket的close方法,该方法不会立即返回,而进入阻塞状态,同时,底层的Socket也会尝试发送剩余的数据,只有满足下面的两个条件之一,close方法才会返回:

(1):底层的Socket已经发送完所有的剩余数据

(2): 尽管底层的Socket还没有发送完所有的剩余数据,但已经阻塞了3600秒,close()方法的阻塞时间超过3600秒,也会返回,剩余未发送的数据被丢弃。

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

5、SO_SNFBUF:表示发送数据的缓冲大小

6、SO_RCVBUF:表示接受数据的缓冲区的大小

7、SO_KEEPALIVE:表示长时间处于空闲状态的SOCEKT,是否自动把他/她关闭

8、OOBINLINE:表示是否支持发送一个字节的TCP紧急数据

默认参数

注: Connector 通常在%HOME_TOMCAT%/conf/servser.xml 文件内

# 正常参数

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

配置参数调试

# 优化参数

<Connector port="8080"

protocol="HTTP/1.1"

maxThreads="1000"

minSpareThreads="100"

acceptCount="1000"

maxConnections="1000"

connectionTimeout="20000"

maxHttpHeaderSize="8192"

tcpNoDelay="true"

compression="on"

compressionMinSize="2048"

disableUploadTimeout="true"

redirectPort="8443"

enableLookups="false"

URIEncoding="UTF-8" />

参数详解

1)port

注:代表Tomcat端口号,默认8080。

2)protocol

注:协议类型,可选类型有4种,BIO(阻塞型IO),NIO,NIO2和APR。

# BIO

BIO(Blocking I/O) 阻塞式I/O操作,传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,是以bio模式运行的,bio模式是三种运行模式中性能最低的一种。BIO配置采用默认即可。

BIO更适合处理简单流程,如程序处理较快可以立即返回结果。简单项目及应用可以采用BIO。

# NIO

NIO(New I/O)是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、非阻塞I/O操作的Java API它拥有比传统I/O操作(bio)更好的并发运行性能。

NIO更适合后台需要耗时完成请求的操作,如程序接到了请求后需要比较耗时的处理这已请求,所以无法立即返回结果,这样如果采用BIO就会占用一个连接,而使用NIO后就可以将此连接转让给其他请求,直至程序处理完成返回为止。

# APR

APR(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你可以简单地理解为:Tomcat将以JNI的形式调用 Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高 Tomcat对静态文件的处理性能。

APR可以大大提升Tomcat对静态文件的处理性能,同时如果你使用了HTTPS方式传输的话,也可以提升SSL的处理性能。

# 修改方式

//BIO

protocol="HTTP/1.1"

//NIO

protocol="org.apache.coyote.http11.Http11NioProtocol"

//NIO2

protocol="org.apache.coyote.http11.Http11Nio2Protocol"

//APR

protocol="org.apache.coyote.http11.Http11AprProtocol"

3)maxThreads (线程池的大小默认200)

注:连接器创建处理请求线程的最大数目,处理同事请求的最大数目,默认值为200。

如果一个执行器与此连接器关联,则忽略此属性,因为该属性将被忽略,所以该连接器将使用执行器而不是一个内部线程池来执行任务。maxThreads是一个重要的配置属性,maxThreads配置的合理直接影响了Tomcat的相关性能。maxThreads并不是配置的越大越好,事实上你即使配置成999999也是没有用的,因为这个最大值是受操作系统及相关硬件所制约的,并且最大值并不一定是最优值,所以我们追寻的应该是最优值而不是最大值。

QPS(Query Per Second):每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。我们常常使用 QPS值来衡量一个服务器的性能。

QPS = 并发数 / 平均响应时间

并发数 = QPS * 平均响应时间

一个系统吞吐量通常由QPS、并发数两个因素决定,每套系统的这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。所谓吞吐量这里可以理解为每秒能处理请求的次数。

所以选择一个合理的 maxThreads值,其实并不是那么容易的事。因为过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助;找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的QPS输出。

# 获取最佳maxThreads的最佳值

(1)通过线上系统不断使用和用户的不断增长来进行性能测试,观察QPS,响应时间,这种方式会在爆发式增长时系统崩溃,如双12等。

(2)根据公式计算,服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量,这种方式有时会被误导,因为某些系统处理环节可能会耗时比较长,从而影响公式的结果。

(3)单、多用户压力测试,查看CPU的消耗,然后直接乘以百分比,再进行压测,一般这个值的附近应该就是最佳线程数量,这种方式理想场景比较适用,实际情况会比这个复杂的多。

(4)根据系统的自身情况调整,如硬件限制,系统限制,程序处理能力限制等。

(5)定期修改为不同的 maxThreads值,看服务器响应结果及用户反应。

# QPS和线程数的关系

(1)在最佳线程数量之前,QPS和线程是互相递增的关系,线程数量到了最佳线程之后,QPS持平,不在上升,甚至略有下降,同时相应时间持续上升。

(2)同一个系统而言,支持的线程数越多(最佳线程数越多而不是配置的线程数越多),QPS越高。

# QPS和响应时间的关系

(1)对于一般的web系统,响应时间一般有CPU执行时间+IO等待时间组成。

(2)CPU的执行时间减少,对QPS有实质的提升,IO时间的减少,对QPS提升不明显。如果要想明显提升QPS,优化系统的时候要着重优化CPU消耗大户。

4)minSpareThreads

注:线程的最小运行数目,这些始终保持运行。如果未指定,默认值为10。

5)acceptCount (默认为100,ServerSocket.accept队列,backlog:半队列的大小)

注:最大队列长度。一般与maxThreads相同,默认为100。

当所有可能的请求处理线程都在使用时传入连接请求的最大队列长度。如果未指定,默认值为100。一般是设置的跟 maxThreads一样或一半,此值设置的过大会导致排队的请求超时而未被处理。所以这个值应该是主要根据应用的访问峰值与平均值来权衡配置。

6)maxConnections (NIO与NIO2的默认值为10000,accept的Socket的大小)

注:在任何给定的时间内,服务器将接受和处理的最大连接数。当这个数字已经达到时,服务器将接受但不处理,等待进一步连接。NIO与NIO2的默认值为10000,APR默认值为8192。

7)connectionTimeout (设置到Socket.setSoTimeout(connectionTimeout ))

注:当请求已经被接受,但未被处理,也就是等待中的超时时间。单位为毫秒,默认值为60000。通常情况下设置为30000。

8)maxHttpHeaderSize

注:请求和响应的HTTP头的最大大小,以字节为单位指定。如果没有指定,这个属性被设置为8192(8 KB)。

9)tcpNoDelay

注:如果为true,服务器socket会设置TCP_NO_DELAY选项,在大多数情况下可以提高性能。缺省情况下设为true。

10)compression

注:是否启用gzip压缩,默认为关闭状态。这个参数的可接受值为“off”(不使用压缩),“on”(压缩文本数据),“force”(在所有的情况下强制压缩)。

11)compressionMinSize

注:如果compression="on",则启用此项。被压缩前数据的最小值,也就是超过这个值后才被压缩。如果没有指定,这个属性默认为“2048”(2K),单位为byte。

12)disableUploadTimeout

注:这个标志允许servlet Container在一个servlet执行的时候,使用一个不同的,更长的连接超时。最终的结果是给servlet更长的时间以便完成其执行,或者在数据上传的时候更长的超时时间。如果没有指定,设为false。

13)enableLookups

注:关闭DNS反向查询。

14)URIEncoding

注:URL编码字符集。

tomcat配置utf8

是的,tomcat8之前默认是ISO8859-1,tomcat8及以后,是UTF-8,这时不需要再另行处理乱码问题了。参见:

Servlet处理get请求时的中文乱码问题

tomcat utf8

有可能是你的客户端编码问题,请查看你的客户端编码

修改linux的编码

vi /etc/sysconfig/i18n

默认为:

LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16"

修改为:

LANG="zh_CN.UTF-8" SUPPORTED="zh_CN.UTF-8:zh_CN:zh" SYSFONT="latarcyrheb-sun16"

保存后执行

source /etc/sysconfig/i18n

tomcat设置运行编码utf8

response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。

例如web浏览器就是通过MIME类型来判断文件是GIF图片。通过MIME类型来处理json字符串。

Tomcat的安装目录\conf\web.xml中就定义了大量MIME类型,可以参考。

response.setContentType("text/html;charset=utf-8");html

.setContentType("text/plain;charset=utf-8");文本

text/javascriptjson数据

application/xmlxml数据

这个方法设置发送到客户端的响应的内容类型,此时响应还没有提交。给出的内容类型可以包括字符编码说明,例如:text/html;charset=UTF-8.如果该方法在getWriter()方法被调用之前调用,那么响应的字符编码将仅从给出的内容类型中设置。该方法如果在getWriter()方法被调用之后或者在被提交之后调用,将不会设置响应的字符编码,在使用http协议的情况中,该方法设置Content-type实体报头。

一般在Servlet中,习惯性的会首先设置请求以及响应的内容类型以及编码方式:

response.setContentType("text/html;charset=UTF-8");

request.setCharacterEncoding("UTF-8");

response.setContentType()的String参数及对应类型

value="image/bmp">BMP

value="image/gif">GIF

value="image/jpeg">JPEG

value="image/tiff">TIFF

value="image/x-dcx">DCX

value="image/x-pcx">PCX

value="text/html">HTML

value="text/plain">TXT

value="text/xml">XML

value="application/afp">AFP

value="application/pdf">PDF

value="application/rtf">RTF

value="application/msword">MSWORD

value="application/vnd.ms-excel">MSEXCEL

value="application/vnd.ms-powerpoint">MSPOWERPOINT

value="application/wordperfect5.1">WORDPERFECT

value="application/vnd.lotus-wordpro">WORDPRO

value="application/vnd.visio">VISIO

value="application/vnd.framemaker">FRAMEMAKER

value="application/vnd.lotus-1-2-3">LOTUS123

MIME映射策略就是在网页中使用哪个应用程序(即插件),打开哪种文件。另外还有使用权限问题。比如对PDF文档,用“application/pdf“策略。这在动态网页中很常见。出现这种现象,有两种情形:一是使用一个应用程序去打开它不能打开的文档,比如用在标签中定义“DWG”文档用“application/pdf”,就会出现无法打开的问题。二是文件扩展名符合要求,但文件内容(格式)不符合要求。你可以检查你浏览的网页源代码,获得出错信息。检查方法是:查看—源文件。寻找类似于“application/pdf“的字符串,就可以看到,要打开的文件是否与应用程序匹配。追问如果不相匹配如何解决回答这通常是由网页编写人来更改。比如:你在源文件里面找到你要打开的文件的HTML标签,在里面加上应用程序即可。比如,你要在网页上打开一个PDF文档,找到PDF文档那一行,在HTML标签里加上type=“application/pdf“就可以了

tomcat默认字符编码

1、打开Eclipse,点击File-->New-->Dynamic Web Project,新建一个工程TestColor。

2、选中WebContent,右键New-->Other,输入Jsp,选中Jsp File,新建一个Jsp文件ChangeCol.jsp

3、使用js改变变量的字体,使用如下代码:x.style.color="Red";(其中x为变量名称,Red为改变后字体颜色)。

4、将项目部署到tomcat,并启动。浏览器中输入http://localhost:8080/TestColor/ChangeCol.jsp。

5、点击界面上的“改变颜色”按钮,可以发现字体颜色变成了红色。

6、总结-->通过x.style.color="Red"的实现了字体颜色的改变。

tomcat9默认字符编码

首先,你的Tomcat和jdk要配套,然后就是配置他俩的环境变量,最后在MyEclipse-window-Preference找到你的Tomcat设置好运行配套的jdk!

tomcat7默认编码

tomcat8以后原始编码格式是utf-8;tomcat7之前的都是iso8859-1。