企业级web服务(Tomcat开源web应用服务器)

企业级web应用服务器

解决web的应用问题

一、Tomcat 是什么?

Tomcat 是Apache 基金会 开发的一款免费、开源 的轻量级 Web 应用服务器,本质是一个 Servlet/JSP 容器(Servlet 和 JSP 是 Java Web 开发的核心技术),也是企业级 Java 开发中最常用的服务器之一。

可以简单理解为:它是运行 Java Web 项目(如网站、后台系统)的"容器",能接收浏览器的请求、处理请求(调用后端 Java 代码),并返回处理结果(如网页、数据)。

二、核心特点
  1. 轻量高效:体积小、配置简单、启动快,不像大型应用服务器(如JBoss、WebLogic)那样笨重,资源占用低;
  2. 功能适配:核心支持 Servlet、JSP、EL 表达式等 Java Web 标准技术,能满足绝大部分中小型 Java Web 项目的需求;
  3. 免费开源:无商业授权成本,社区活跃,问题修复和版本更新及时;
  4. 适用场景 :特别适合中小型系统 、并发访问用户量不多的场景(如企业内部管理系统、小型网站);高并发场景下,通常会搭配 Nginx 做反向代理,由 Nginx 处理静态资源、负载均衡,Tomcat 专注处理动态 Java 业务。
三、核心组件
  1. 连接器(Connector):监听指定端口(默认HTTP端口8080),接收客户端(浏览器)的请求,转发给引擎处理;
  2. 引擎(Engine):Tomcat 的核心处理引擎,负责将请求分发到对应的虚拟主机;
  3. 主机(Host):对应一个域名(如localhost),一个引擎可配置多个主机;
  4. 上下文(Context):对应一个具体的 Web 应用(如你的Java Web项目),是 Web 应用的运行载体。

Tomcat安装部署

1.下载安装包
bash 复制代码
 [root@RS1+2 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz
2.部署tomcat
bash 复制代码
 [root@RS1 local]# yum install java-1.8.0-openjdk.x86_64 -y
 [root@RS1 ~]# tar zxf apache-tomcat-9.0.115.tar.gz  -C /usr/local
 [root@RS1 ~]# cd /usr/local/
 [root@RS1 local]# ls
 bin  etc  games  include  lib  lib64  libexec  sbin  share  src  tomcat-9.0-doc
 [root@RS1 local]# mv apache-tomcat-9.0.115/ tomcat
 [root@RS1 local]# cd tomcat/
 [root@RS1 tomcat]# ls
 bin           conf             lib      logs    README.md      RUNNING.txt  webapps
 BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
 [root@rs1 tomcat]# cd bin/
 [root@rs1 bin]# ls
 [root@RS1 bin]# ./startup.sh
 Using CATALINA_BASE:   /usr/local/tomcat
 Using CATALINA_HOME:   /usr/local/tomcat
 Using CATALINA_TMPDIR: /usr/local/tomcat/temp
 Using JRE_HOME:        /usr
 Using CLASSPATH:        /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
 Using CATALINA_OPTS:
 Tomcat started.
 [root@RS1 bin]# netstat -antlupe | grep 8080
 tcp6       0      0 :::8080                 :::*                    LISTEN      0          139291     10372/java
 
3.制作tomcat的启动脚本
bash 复制代码
 [root@RS1 bin]# vim /usr/local/tomcat/conf/tomcat.conf
 JAVA_HOME=/etc/alternatives/jre
 [root@RS1 bin]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
 
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
 
[Install]
WantedBy=multi-user.target
 
 [root@RS1 bin]# useradd  -s /sbin/nologin -M tomcat
 
 [root@RS1 bin]# chown  tomcat.tomcat /usr/local/tomcat/ -R
 [root@RS1 bin]# systemctl daemon-reload
 [root@RS1 bin]# systemctl enable --now tomcat
 [root@RS1 bin]# netstat -antlupe | grep java
 tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       139979     10682/java
 tcp6       0      0 :::8080                 :::*                    LISTEN      1000       140563     10682/java
 
4.Nginx与tomcat的整合

反向代理实现tomcat部署

1.单体架构
bash 复制代码
 [root@Nginx conf.d]# cd /usr/local/nginx/conf/conf.d/
 [root@Nginx conf.d]# vim vhosts.conf
 server {
     listen 80;
     server_name app.timinglee.org;
     location ~* \.jsp$ {
         proxy_pass http://172.25.254.10:8080;
     }
 }
 
 [root@RS1 ~]# cp test.jsp  /usr/local/tomcat/webapps/ROOT/
 [root@RS1 ~]# scp test.jsp  root@172.25.254.20:/usr/local/tomcat/webapps/ROOT/
 
 [root@Nginx conf.d]# nginx  -s reload
 
 
 #在windows中设定app.timinglee.org的解析
 #在浏览器中访问 app.timinglee.org/test.jsp
2.tomcat负载均衡
bash 复制代码
 [root@Nginx conf.d]# vim vhosts.conf
 upstream tomcat {
     hash $cookie_JSESSIONID;
     server 172.25.254.10:8080;
     server 172.25.254.20:8080;
 }
 server {
     listen  80;
     server_name app.timinglee.org;
     location ~* \.jsp$ {
         proxy_pass http://tomcat;
     }
 }
 [root@Nginx conf.d]# nginx  -s reload
 
 #在windows浏览器中访问 app.timinglee.org/test.jsp;
 #在windows的另外一个浏览器中访问 app.timinglee.org/test.jsp;

tomcat+memcache

实现session会话零丢失,交叉存储

1.tomcat加载模块
bash 复制代码
 [root@RS1 ~]# unzip jar.zip
 [root@RS1 ~]# cd jar/
 [root@RS1 jar]# cp * /usr/local/tomcat/lib
 [root@RS1 jar]# scp * root@172.25.254.20:/usr/local/tomcat/lib/
2.安装memcache
bash 复制代码
 [root@RS1 jar]# dnf install memcached -y
 [root@RS2 ~]# dnf install memcached -y
 
 [root@RS1 ~]# vim /etc/sysconfig/memcached
 [root@RS2 ~]# vim /etc/sysconfig/memcached
  
 PORT="11211"
 USER="memcached"
 MAXCONN="1024"
 CACHESIZE="64"
 OPTIONS="-l 0.0.0.0,::1"
 
 # 重启+验证
 [root@rs1 jar]# systemctl restart memcached.service
 [root@RS1+2 ~]# netstat -antluple | grep memcached
 tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      988        142615     35756/memcached
 tcp6       0      0 ::1:11211               :::*                    LISTEN      988        142616     35756/memcached
 
3.配置tomcat
bash 复制代码
 [root@RS1 ]#  vim /usr/local/tomcat/conf/context.xml
 
 <Context>
 
     <!-- Default set of monitored resources. If one of these changes, the    -->
     <!-- web application will be reloaded.                                   -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
     <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
     <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 
     <!-- Uncomment this to disable session persistence across Tomcat restarts -->
     <!--
     <Manager pathname="" />
     -->
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
     memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
     failoverNodes="n1"
     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
     transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
     />
 
 </Context>
 
 [root@RS2 ]#  vim /usr/local/tomcat/conf/context.xml
 
 <Context>
 
     <!-- Default set of monitored resources. If one of these changes, the    -->
     <!-- web application will be reloaded.                                   -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
     <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
     <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 
     <!-- Uncomment this to disable session persistence across Tomcat restarts -->
     <!--
     <Manager pathname="" />
     -->
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
     memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
     failoverNodes="n2"
     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
     transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
     />
 
 </Context>
 [root@RS1 ~]#  systemctl restart tomcat.service
 [root@RS2 ~]#  systemctl restart tomcat.service
 
  #在windows浏览器中访问 app.timinglee.org/test.jsp;
 [root@rs1 jar]# systemctl restart tomcat.service
[root@rs1 jar]# systemctl stop tomcat.service
[root@rs1 jar]# systemctl restart tomcat.service
# 写入数据,提交观察观察
复制代码
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
不悔哥4 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
家和804 天前
Carla仿真系列:4_在 Carla 的 Tesla 上装 4 路摄像头,并创建网格为环视拼接做准备
开源
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
感谢地心引力4 天前
我用 Doubao-Seed-2.1-pro 做了一个深度融入 AI 功能的本地知识库软件
ai·开源·seed·markdown·豆包
alsmile4 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go