简单来说是一个运行Java的网络服务器,也是jsp和serlvet的一个容器
conf文件夹下修改server.xml文件
redirectPort="8443" uriEncoding="utf-8"/>
port="8080"改成你想要的端口
1.bin:启动和关闭的bat文件
2.conf:配置文件
3.server.xml:配置server信息
4.web.xml:文件配置与web应用
5.tomcat-user.xml:配置相关权限
6.lib:jar包
7.logs:存放日志
8.webapps:web应用
9.work:存放访问后生成的.class文件
虚拟目录指的就是工作目录,如果要进行WEB项目开发,那么就必须要在Tomcat中配置此目录
1.conf/server.xml文件中进行修改
path: 表示虚拟目录的名称
2.不修改server.xml
在tomcat文件夹的conf"catalina"localhost下新建一个xml文件
文件名改成你自己的譬如http://localhost:8080/bbs ,文件名就为bbs.xml
1.客户端发送请求(包含了请求的URL、请求方法、请求头和请求体等信息)
2.Tomcat接收请求(根据请求的URL和请求方法等信息,将请求分发给相应的Servlet或JSP)
3.Servlet或JSP处理请求
4.Servlet或JSP生成响应(处理完请求后,会生成HTTP响应并发送给Tomcat服务器)
5.Tomcat发送响应(Tomcat生成的响应后,会将响应发送给客户端)
6.客户端接收响应
1.直接把 Web 项目放在 webapps 下
2.在 server.xml 文件上配置
3.通过 Catalina 来进行配置:进入到 confCatalinalocalhost 文件下,创建一个xml 文件,该文件的名字就是站点的名字
1.去掉对 web.xml 的监视,把 jsp 提前编辑成 Servlet
2.添加服务器资源
3.对于静态页面利用缓存和压缩
4.组建tomcat 集群有效提升性能
5.优化 tomcat 参数(主要是优化连接配置,关闭客户端 dns 查询)
1.调整JVM参数来控制Tomcat的内存使用情况(如:JAVA_OPTS)
2.关闭不必要的功能(如:dns 查询)
3.减少Web应用程序
4.使用内存监控工具
5.升级tomcat版本
在 catalina.sh 中,调整 JAVA_OPTS 变量
1.使用 Tomcat 本身的 Session 复制功能
2.使用第三方来存放共享 Session
3.使用黏性 session 的策略
有三种工作模式:独立的 Servlet 容器、进程内的 Servlet 容器和进程外的 Servlet 容器
1.当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对 xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过 反射的方式实例化
2.在servlet注册时加上1如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化
是一个 轻量级/高性能的反向代理Web服务器
优点:
1.跨平台、配置简单
2.非阻塞、高并发连接
3.内存消耗小、内存消耗小
4.稳定性高,宕机的概率非常小
1.http服务器:可以做网页静态服务器
2.虚拟主机:实现在一台服务器虚拟出多个网站
3.反向代理:负载均衡多台服务器平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置
1.Tomcat是Java Web应用服务器,而Nginx是高性能的HTTP和反向代理服务器
2.Tomcat支持Java应用程序的部署和管理;Nginx则更多地是通过负载均衡和缓存技术来提高Web服务器的性能
3.Tomcat可以独立作为Web服务器运行,也可以集成在其他Web服务器中;而Nginx通常被用作反向代理服务器
1.Nginx解析配置文件,得到需要监听的端口与 IP 地址
2.再 fork出多个子进程
3.子进程会竞争 accept 新的连接
4.设置读写事件处理函数,并添加读写事件来与客户端进行数据的交换
5.Nginx 或客户端来主动关掉连接
正向代理:一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标,然后代理向原始服务器转交请求并将获得的内容返回给客户端
代理端代理的是客户端
反向代理:代理服务器来接受 Internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
代理端代理的是服务端
1.cookie数据存放在客户的浏览器上,session数据放在服务器上
2.cookie不是很安全
3.session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
4.单个cookie保存的数据不能超过4K,而session则存储与服务端,浏览器对其没有限制
一个主要过程,多个工作过程,每个工作过程可以处理多个请求,每个进来request,处理worker进程会有一个。但不是全程处理,处理到可能堵塞的地方,比如向上游(后端)服务器转发request,等待请求返回。然后,worker继续处理其他请求,一旦上游服务器返回,事件将触发,worker将接管,request将继续下去。由于web server的工作性质决定了每个request的大部分生命都在网络传输中,但实际上在server机器上花费的时间片并不多。解决高并发问题的秘密是几个过程。也就是说,@skoo所说的webserver正好属于网络io密集型应用,而不是计算密集型。
1.轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器
2.权重:值越大,分配到的访问概率越高
3.IP绑定:每个请求按访问IP的哈希结果分配
4.第三方插件
使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址
Nginx:采用单线程异步非阻塞处理请求,不会为每个请求分配CPU和内存资源,节省大量资源,减少CPU上下文切换,使Nginx支持更高的并发性
1.为静态文件启用缓存,以减少带宽并提高性能
2.启用gzip压缩
3.服务静态文件
4.使用HTTP/2协议
5.调整worker_processes参数
6.调整worker_connections参数
1.防止DDoS攻击
2.防止SQL注入
3.防止XSS攻击