IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Tomcat部署、优化及数据流向 -> 正文阅读

[Java知识库]Tomcat部署、优化及数据流向

目录

1、Tomcat简介

2、Tomcat数据流向

3、Tomcat服务安装

4、Tomcat优化

5、Nginx+Tomcat负载均衡、动静分离


1、Tomcat简介

■Tomcat是一款免费、开放源代码的web应用服务器,是Apache软件基金会的一个核心开源项目,属于轻量级应用服务器,PS: Apache: Apache软件基金会(也就是Apache Software
Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织

■Tomcat核心组件
通常意义上的 web 服务器接受请求后,只是单纯地响应静态资源,如HTMI文件,图片文件等,不能在后端进行一定的处理操作。Tomcat是 Apache 下的一个子项目,它具备 web服务器的所有功能(WEB容器嵌入Servlet-》动态请求),不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的Java代码servlet,同时将执行的结果以HTML代码的形式写回客户端。

■Tomcat由一系列的组件构成,其中核心的组件有三个:

(1) web容器:完成web服务器的功能HTTP HTTPs请求的接受和响应。

(2)servlet容器:由名称为 catalina的脚本来处理Servlet 代码(具体的一个任务,从数据库中拿取数据给与前端)。

(3)JSP 容器:用于将JSP动态网页翻译成servlet 代码 index.html index.php index. jspo

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。 JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

2、Tomcat数据流向

(1)

用户请求(访问80端口)——》

发送请求发送给tomcat——》

tomcat有一个端口在监听8080端口)

从8080端口进入流量的会被在此端口的线程监听到

给与我们的web容器进行处理(有index.html页面显示出来 ?从8080端口来时会有交互界面 ?会读取到index.jsp这种java代码)

但是java代码无法直接使用——》

需要利用到jsp容器

将index.jsp中的java的servlet代码进行翻译

servlet容器处理 通过catalina程序/脚本来处理从JSP容器这过来的servlet代码

并不是直接对接mysql数据库

而是直接对接用户的请求例如app中的某个功能模块

比方说看个人信息 ?servlet容器与app接是api进行对接(具体的URL)

数据流向最终会通过用户请求内容 ?去mysql数据库寻找相应的内容

最后返回给用户

(2)?

用户请求(访问80端口)——》当请求需要通过8080端口进入时 需要通过connector连接器 ?客户端和服务单简建立连接 ??http1.1建立长连接(请求行、请求体、请求头、方式:get、post)连接进入后需要发送给引擎engine(web容器)

1、web容器进行接受响应请求

会有index.html可视页面显示出来 ??

会读取到index.jsp这种java代码(java代码需要翻译为servlet格式)

但是java代码无法直接使用——》

2、需要利用到jsp容器

接受到请求时:将java时翻译成servlet

响应请求时servlet翻译成java代码——》

3、servlet容器处理 通过catalina程序/脚本来处理从JSP容器这过来的servlet代码(宏观)servlet代码简单来说就是具体执行动态任务的代码块需要把项目的代码块执行逻辑等等放在单独的一个目录中,同事有需要被tomcat所能加载这个就是webapps——》

webapps:默认的项目存放目录 ??(servlet容器需要和webapps需要进行连接需要用到一个核心组件 ?context)一般情况下会把这些war包和jsp这些包放在kgc-host这种目录下 ?当tomcat运行时会加载这些代码(最初的web容器中的代码需要获取路径——》jsp或者war寻找到kgc-host目录下的这些代码中间的过程就是整个数据走向 ?web中的jsp代码和下面项目块是由关联的)

三个项目块:

1、KGC-HOST ??2、BENET-HOST ?3、ACCP-HOST

? ? ? 目录 环境 ????

注:java应用服务的执行、持续运行的平台(java应用每一个java应用都相当于是一个独立的项目存在的)

3、Tomcat服务安装

(1)关闭防火墙、增强

?(2)添加映射

(3)查看是否能访问

?

?(4)更改主机名

(5)?切换到 opt下 并添加Tomcat和jdk编译工具的包

?(6)查看openjdk版本(指开源)

(7)?安装

(8)到此目录下可以查看到版本

?(9)在/etc/profile中添加 ?全局变量

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

export PATH=$JAVA_HOME/bin:$PATH

(10)刷新

(11)版本替换完成

?

(12)安装tomcat服务

?

?

(13)直接解压到当前目录

(14)?简化目录长度

(15)Tomcat目录文件

?

Webapps:java通过开发、编译、打包之后存放jar包和war包(格式)存在wevapps中

Tomcat默认会识别该目录中的java项目,并且运行应用的java代码

我们要执行、持续运行一个java开发应用服务,在经过简单的配置之后,可以直接将war包、jkar包放到webapps中,来让tomcat运行、执行

Work:运行时产生的文件

Temp:临时目录

(16)?添加软连接启动tomcat服务

[root@tomcat bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin

[root@tomcat bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin

?直接启用脚本

?Netstat -natp|grep 8080

4、Tomcat优化

Tomcat 配置文件catalina.sh优化
生产环境中第一次启动tomcat可能会发现tomcat启动很慢,默认情况下可能需要几十秒,此时可以修改jdk参数进行优化以下部分,通过修改/usr/java/jdk1.8.0_201-amd64/jre/lib/security/java/ecurity,来保障Tomcat启动的速度

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
------修改117行-----
securerandom. source=file: / dev/urandom
/dev/random和/dev/urandom都是伪终端,但是/dev/urandom提供的数据流更快

进入

5、Nginx+Tomcat负载均衡、动静分离

Nginx作为负载均衡器,Tomcat作为应用服务器

Nginx 服务器:192.168.182.161

Tomcat服务器1:192.168.182.157

Tomcat服务器2:192.168.182.154

Tomcat1服务

利用脚本添加服务

?

?

?[root@192 opt]# mkdir /usr/local/tomcat/webapps/lucien

在[root@192 opt]# vim /usr/local/tomcat/webapps/lucien/index.jsp??下添加

<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%><html>

<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP test1 page</title>

</head>

<body>

<% out.println("你瞅啥?");%>

</body>

</html>

进入vim /usr/local/tomcat/conf/server.xml? 在72行添加

[root@192 lucien]# /usr/local/tomcat/bin/shutdown.sh

[root@192 lucien]# /usr/local/tomcat/bin/startup.sh

同样Tomcat2服务器配置同样的文件

在index.jsp中不一样的配置

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>

<head>

<title>JSP test1 page</title>

</head>

<body>

<% out.println("瞅你咋地?");%>

</body>

</html>

主服务端

准备静态页面和静态图片

echo'<html><body><h1略略略</h1></body></html>' > /usr/local/nginx/html/index.html

mkdir /usr/local/nginx/html/xxx

cp /root/lue.jpg /usr/local/nginx/html/xxx

?进入[root@tomcat ~]# vim /usr/local/nginx/conf/nginx.conf ?

vim /usr/local/nginx/conf/nginx.conf

......

http {

......

#gzip on;

#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大

upstream tomcat_server {

server 192.168.184.60:8080 weight=1;

server 192.168.184.80:8080 weight=1;

}

server {

listen 80;

server_name www.lucien.com;

charset utf-8;

#access_log logs/host.access.log main;

#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理

location ~ .*\.jsp$ {

proxy_pass http://tomcat_server;

#设置后端的Web服务器可以获取远程客户端的真实IP

#设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认host的值为proxy_pass指令设置的主机名

proxy_set_header HOST $host;

#把$remote_addr赋值给X-Real-IP,来获取源IP

proxy_set_header X-Real-IP $remote_addr;

#在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

#配置Nginx处理静态图片请求

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {

root /usr/local/nginx/html/xxx;

expires 10d;

}

location / {

root html;

index index.html index.htm;

}

......

}

......

}

重启服务

systemctl?restart?nginx.service

进入网站进行测试 ?浏览器访问http://192.168.182.161

浏览器访问http://192.168.182.161/lue.jpg

?

?

Tomcat优化相关参数

【 maxThreads 】 Tomcat 使用线程来处理接收的每个请求,这个值表示Tomcat 可创建的最大的线程数,默认值是200。

【 minSpareThreads 】最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是10。

【 maxSpareThreads 】最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的socket 线程。默认值是-1 ( 无限制)。一般不需要指定。

【 URIEncoding 】指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 Web 服务器软件配置方便,需要分别指定。

【 connnectionTimeout 】网络连接超时,单位:亳秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认20000亳秒就可以。

【 enableLookups 】是否反查域名,以返回远程主机的主机名,取值为: true 或 false, 如果设置为false, 则直接返回IP 地址,为了提高处理能力,应设置为false。

【disableUploadTimeout 】上传时是否使用超时机制。应设置为true。

【 connectionUploadTimeout 】上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使 Servlet 有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

【 acceptCount 】指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100 个

【 compression 】 是否对响应的数据进行GZIP压缩,off:表示禁止压缩; on:表示允许压缩 (文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一般可以减小1/3左右,节省带宽。

【 compressionMinSize】表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048

【 compressableMimeType 】压缩类型,指定对哪些类型的文件进行数据压缩。

【 noCompressionUserAgents=“gozilla, traviata” 】 对于以下的浏览器,不启用压缩

以上是一些常用的配置参数,还有好多其它的参数设置,还可以继续深入的优化,HTTP Connector 与AJP Connector 的参数属性值.

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:35:37  更:2022-03-21 20:37:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:35:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码