-
服务器分类
javaEE是企业技术的平台,技术有jsp,servlet,jdbc,在2018年更名为jakartaEE(雅加达), -
应用服务器(javaEE技术全部支持实现)
是javaEE规范的具体实现,大部分是付费产品, -
web服务器(javaEE技术部分实现)
是开源的免费的, tomcat:Servlet容器,Jetty:免费,eclipse基金下,基于java编写的实现了servlet技术的web容器, -
Tcp协议
是一个可靠的传输协议,创建连接会经历三次握手,断开时会经历四次挥手,
三次握手是客户端和服务器要发送三个包来确定连接关系,
四次挥手是终止tcp连接,需要发送四次包来确认连接断开, -
http协议
客户端和服务器端是基于tcp协议来建立连接的,而数据传输是使用http协议,
超文本传输协议,应用层协议,是万维网数据通信的基础,
通常是客户端通过http协议发送一个请求,创建一个指定端口的Tcp连接,http服务器则监听客户端请求,一旦接听到请求后会返回一个状态和内容消息,
特点是:无状态(Session+cookie)+单向性(服务器是被动)+无连接(一个连接处理一个请求)
ftp协议是有状态的,下载东西一般时推出在打开连接可以继续下载, -
http工作原理
1 客户端 发送http请求,
2 服务器接受请求后返回http响应,
3 释放tcp连接 若connection模式为close时,则服务器会主动关闭tcp连接,若为keepalive时会长时间保持,
4客户端浏览器解析响应内容,先查看状态码,解析响应头 文本类型和字符集,最后读取响应数据,对数据格式化,
当输入一个url时会经历那些流程呢?
1浏览器会向DNS服务器发送解析域名和ip
2 根据ip地址和服务器连接tcp连接,
3 发送http请求建立三次握手,
4 服务器作出响应返回资源数据
5 释放tcp连接,
6浏览器显示响应内容
-
tomcat架构图
tomcat启动后就是一个Server组件,里面有多个service组件,还有多个host组件 ,有多个web app ,里面有多个Servlet
tomcat大体上可以分成Connector组件和Container组件,
Connector组件负责在服务器中处理客户端连接,container是负责对客户端请求进行逻辑处理和返回结果,
是不是有一个server.xml这个是tomcat的配置文件 ,因为tomcat就是一个server组件,这个配置文件每一个节点就是一个组件, -
tomcat组件
1server组件 :顶级组件 代表是tomcat的运行实例,一个jvm中只能有一个server,
2service组件:指的是一个服务,
3 engine组件:服务引擎
4 host组件:虚拟主机 ,一个主机代表一个服务器,内部可以部署多个应用,一个主机绑定一个域名,
5 Context组件:应用上下文,一个webapp有一个context, -
tomcat处理请求的过程
1 输入url 发送请求,到服务器中Connector组件获取请求信息,
2 connector把请求交给container中的engine中,
3 engine获取请求来匹配到对应的虚拟主机host中
4 host主机中会匹配到可以处理资源的Context组件应用
5 构造出httpServletRequest对象和httpServletResponse对象,调用doget()和dopost()方法来执行业务逻辑,
6 context把执行完之后的结果返回给host,
7 host在返回给engine
8 engine返回给connector
9connector返回给客户端 -
tomcat中的目录
1 bin目录是存放启动或关闭tomcat脚本文件的
2 conf目录是存放配置文件的,重要的server.xml
3 lib目录是存放web项目中的jar包,
4 logs是存放tomcat日志文件
5 temp是存放临时文件的
6 webapps 是存放web程序的,部署项目的
7 work 把jsp生成的servlet源文件和字节码文件存放到这里,
(jsp本质就是servlet,jsp运行起来就成为servlet来运行,) -
tomcat配置文件
1 context.xml : 是tomcat公用的环境配置,可以配置自动扫描哪些文件或是目录,默认是配置了自动扫描web-inf/web.xml
2 web.xml:是应用程序的描述文件,都是配置程序的设置,每个项目下都有一个web.xml。而tomcat这个web.xml是所有的父文件,
3 server.xml:是tomcat服务器的核心配置文件,每个元素对应着一个组件,可以实现各个组件的端口配置,
4 tomcat-user.xml:配置访问tomcat的用户和角色的配置文件, -
tomcat项目部署方式一
将项目的war包直接部署到webapps目录中,
打开项目结构目录选择Artifacts项目,点击加号,设置要输出war包,最后设置naem,outputdir,就可以了,设置成功后
点击idea上方build,选择build artfacts 最后在选择自己打包的方式,记得把war包要放到tomcat目录中webapps下就可以了
总结:用idea将项目以war包的形式导出,复制到tomcat中webapps目录下, -
部署方式二
不需要是war包,不需要放到指定webapps目录下,可以通过修改server.xml配置文件,将项目部署到自定义位置,
在server.xml中标签中添加:
1 path属性是浏览器访问的路径,
2 docbase:web项目的webRoot路径,就是项目编译后的根路径,
3 reloable:设定项目发生改变时自动重新加载项目,
注意 不支持热部署,tomcat启动后只扫描一次这个文件, -
项目部署方式三
通过在tomcat/conf/Catalina/localhost目录下创建一个 项目名.xml的配置文件
添加配置:
最方便的方式,每个项目可以分开配置,比较灵活, -
tomcat优化配置
1连接优化,在tomcat服务器中Connector组件是用户处理请求连接的,优化这个组件就可以优化连接,在server.xml配置文件中,每个标签对应一个组件,
查看标签
port :网络端口;
protocol:使用网络协议,
connection timeout:设置超时时间 默认20s
urlEncoding: 设置请求字符集编码
acceptorThreadCount: 设置线程个数,默认是1个,最多设置2个,
2 压缩优化:启用压缩响应的内容,来减少网络传输的大小,比较消耗cpu,
2.1 compression属性 作用是是否对http响应的数据启用Gzip压缩,选择值为off或者on, on是开启,开启后减少网络传输量,
2.2 compressionMinSize属性 设置压缩之前的最小数据量,也就是说满足这个最小数据量才可以压缩,默认是2048;
2.3 compressibleMimeType 属性 用于设定哪些文件可以进行压缩,值与值之间用逗号分隔,
3 线程池优化:在tomcat中每一个用户请求都是一个线程,可以通过优化线程池来提高性能,
方式一 在连接器中优化线程池,
3.1 acceptCount : 当tomcat请求处理线程池中所有的线程都属于忙碌状态时,此时新建的链接会放到pending队列中,而acceptCount就是这个队列的容量大小,如果队列已满,此后的链接请求都会被拒绝,
3.2 maxConnections : tomcat允许接收和处理的最大连接数,
3.3 minSpareThreads : 线程池中保持活跃的线程最小数量,默认是10,
3.4 maxThreads : 用于设置接收和处理客户端最大的线程数,tomcat是采用线程池的方式来处理客户端请求,这个参数代表线程池的大小,也就是说tomcat的并发量的个数,此值默认是200;
3.5 maxKeepAliveRequests : tomcat需要保持的最大请求数,保持连接的请求个数,建议是maxThreads*0.5,不能大于maxThreads,值为-1表示不限制,1 表示关闭keepAlive机制,默认是100;
-
线程池优化方式二
在执行器中优化线程池,Executor
1 namePrefix 线程号的前缀,
2 maxQueueSize 最大的等待队列数,超过这个拒绝请求,
3 prestartminSpareThreads 属性 如果不等于true,minSpareThreads的值没有作用,
可以在执行器中配置链接,执行器也是为连接器服务的,
-
网络优化
在连接器中设置http协议的连接模型,有Bio,Nio,Nio2,可以优先选择Nio2
- 测试工具Jmeter
是一款测试压力的工具,是负载均衡功能测试和性能测试的java开源软件,可以使用JMeter对web应用的性能进行分析和测试,
地址:http://jmeter.apache.org/download_jmeter.cgi
- Jmeter的使用
-打开下载的Jmeter软件中进入bin目录,找到jmeter.bat启动jmeter工具的脚本文件, 可以看出是java编写的软件,如果是.exe就是c编写的文件,



