Java-Tomcat

一、web补充技术

①:B/S架构

主流的方式,只要有浏览器即可。编程方式直接基于socket即可

②:javascript

简称js,早期只是实现在客户端的浏览器的动态效果,但服务端不会解释运行,所以本质上是静态资源。

2008年后v8引擎诞生,js成为了既可以在前端运行,又可以在后端执行的前后端通吃的编程语言。

③:网页技术之  同步 和 异步

同步:整个页面统一整体加载

异步:在基于交互式网页中,可以实现网页中单个模块的异步单独加载网页内容

           主流的网页技术为ajax(Asynchronous Javascript And XML),早期页面交互基于XML,

但XML文件过于臃肿,现如今前后端分离主流交互页面的技术主要是基于json来实现页面交互。

当今主流前后端web分离,基于restful风格

以前前后端分离走的是fastcgi(php适合做单体架构,不适合做微服务)、uswcgi等技术,现在主流走的是http协议(基于6大基本方法:put、get、post、delete等来交互json)

流程: 客户端下载APP,在APP里面访问动态页面,可以直接访问html,此时html内部涉及一些业务逻辑,就会基于http协议发数据;如果后台是java,http协议就会通过put、post、get等一些请求方法从后台数据库交换数据,将数据的结果再基于http协议通过6大请求方法,把结果异步交互到某个html页面中的某个模块中。这样就可以在不同时间点异步看到不同模块的动态内容

 ④:单体架构和微服务

单体架构:一个项目一般为一个大的部署的应用程序,里面可能将订单、商品、库存、支付、登录、注册等多个功能模块打包在一起,在java中,一般以war包或ear包来部署。

优点:简单方便,若需要扩展,只需将war包进行复制部署负载均衡即可。开发方便,没有调用消耗,测试也方便

缺点:耦合度高,各个模块依赖太强,若某个模块出现问题,需要整体构建、重新部署,重新打包;而且管理难度大。这样不利于项目的大规模扩展和和业务的迭代。

API gateway(各个微服务之间通信):nacos、zk既可以实现rpc(逻辑层,效率高),又可以实现restful(资源层、更加灵活);协调跨主机通信

API:应用编程接口

分库分表:mycat(读写分离)

微服务:将单体架构拆开,每个大的项目拆分成为单个的小的服务,每个服务足够内聚,能聚焦一个业务功能需求。

优点:开发简单,效率很高,耦合性低,专人干专事(小团队开发小服务,而且开发和部署都各自独立)

      可以使用不同的开发语言,而且可以完全实现前后端分离。

      非常方便和灵活的第三方持续集成,例如jenkins

      微服务可以有自己的存储能力,拆分和细化数据库。

缺点:由于拆分的独立工程太多,开发、测试、运维、监控复杂度较大。

          为了保证不同微服务之间的数据一致性,设计架构难度角度;开发和运维需要极强的技术能力(例如docker和k8S)。

           只适用于超大型或大型的系统架构。若盲目使用微服务只会增添开发、维护和其他成本。

二、java技术体系

1.JAVA编程语言特性

    属于应用级的面向对象的编程语言,基于虚拟环境(虚拟机,虚拟自己需要的类库,提供程序自己所需的运行环境)进行运行。

    虚拟环境:jvm

在某些特定程序需要在非服务器端(客户端)进行运行时候,如果服务器端只是提供的应用程序的源代码,源代码加载到客户端本地进行预运行。

但是由于ABI不一样,无法跨操作系统,形成移植化(无法一次编译,到处运行

2.动态网页的相关技术

   动态网站开发语言:asp  .net  jsp  (php)  .py  .pl

   动态网站:客户端动态:

                     服务器动态:CGI   fpm

   webapp server:

                jsp:tomcat  jboss   jetty   webspre   weblogic (不仅可以跑动态,也可以裸奔跑静态)

                php:php-fpm

3.JAVA语言的发展

早期由SUN,作者为詹姆斯*高思林,是为了实现机顶盒项目公司而开发。后改名为JAVA,后广泛利用在web动态网站的开发。属于客户端动态,现如今属于世界上中最为广泛、流行的应用级编程语言。

1995年:JAVA 1.0发布

1996年:JDK 1.0发布 (主流技术  JVM   Applet   AWT)

1997年:JDK1.1发布 (主流技术  JAR文档格式   JDBC开放数据库系统互联   JavaBeans)

1998年:JDK1.2开始,SUN把JAVA技术拆分为三个方向,分别为J2SE--->JAVA 2 SE= =jdk(标准版,桌面级应用)  J2EE--->JAVA 2 EE(企业级应用)   J2ME(移动设备)

 代表性技术:EJB(分布式)   Plug-in(可插拔)    Swing(窗口化图形界面)   JIT(运行时动态编译)

2000年:JDK 1.3

                使用HotSpot虚拟机(闭源)

2002年:JDK 1.4发布(发展成熟)

2006年:SUN宣布JAVA技术,遵循GPL协定,开发绝大部分代码,建立OpenJDK组织管理这些代码。

2009年:ORACLE收购SUN公司,JAVA版权被ORACLE所有。

4.JAVA的体系结构(四大核心技术)

Java编程语言   (属于纯面向对象的编程语言)     .class

Java Class文件格式  编译之后运行在各个平台的基础环境

Java API  (JAVA类库非常庞大)

Java VM 

5.JDK包含的技术

JRE:单纯的运行环境 

 JavaEE 比 javaSE 有更多的类

JAVA EE的子技术

Servlet(实现服务端动态)   JSP   EJB(分布式)   JMS(邮件)   JMX   JavaMail (邮件插件)......

JAVA 动态网页技术(javaEE)

①:servlet

Servlet:应用在服务端的,可以基于CGI协议与前端进行交互,需要基于Servlet容器(Servlet Contaier);基于编写java源码,然后在java源码程序中嵌入前端的html代码;缺陷非常大。

②:JSP

JSP:使JAVA代码内嵌在html文档中,相当于Servlet的前端

Web container:JDK  Servlet  JSP

商业实现方案:websphere   webLogic  OC4j   Glassfish 

开源实现方案:tomcat    jetty    resin   Jboss

三、tomcat理论详解

1.jsp网页文件请求流程

JSP网页请求流程:

首先 客户端之前请求.java结尾的文件,而现在请求的是.jsp结尾的动态页面;然后发起一个get请求,由于jsp在前面,变成Servlet前端,可以叫它jsp容器,它负责接收处理jsp文件的请求,但是它本身不负责转换编译请求的工作;于是jsp将客户端请求的jsp的请求和标准要求,转交给后台的Servlet;而Servlet会将其转换一种通用格式(.jsp--->.java的源码,因为底层只能识别.java的字节码),转完之后,需要进行编译,Servlet将其转交给后台的JVM,将其编译成helloServlet对应的字节码,编译完成后,将编译的结果对应的二进制数据流执行之后,再交给JSP容器;然后JSP容器将从后台java编译得到的数据封装成为html响应报文,返回给客户端;此时客户端就看到一个他以为请求的静态资源,但是在后台是动态资源。

JSP--> Java--->.class--->将变成.class的结果数据流在交给JSP容器--->JSP容器封装成HTML响应报文给客户端

Java特点:第一次访问很慢,预热之后,每次访问速度就变快了 ;而php做不到,因为其是解释型文件

但如今企业环境中JSP使用率大幅降低

当今主流的开发风格实现前后端分离(REST/RESTful风格,实现彻底分离)

缺点:JSP耦合性比较强,不能彻底实现动静分离, 

所有的servlet容器必须要构建在JDK基础上

开源JDK:Openjdk  Sunjdk  Apache Harmony

2.tomcat的发展

早期SUN公司创建第一个servlet容器(即Java Web Server),但只是为了演示servlet相应功能,很不稳定。同一时期,ASF(apache软件基金会)创建了JServ项目,一个可以与apache整合起来的servlet容器,1999年,SUN把JWS捐给ASF,项目合二为一,成为几天tomcat的前身,第一版本为tomcat3.x系列。

2001年tomcat4.0发布,在此前基础上进行重新设计和实现,代码项目被命名为Catalina。

本质:java web的应用,必须工作在JDK平台,Tomcat:JSP+Servlet+http连接器通用的web应用服务器

3.tomcat的核心组件

Catalina:servlet container

Coyote:http connection

Jasper:JSP Engine

4.jsp解析流程

jsp ---> jasper --->servlet --->complie --->bytecodes --->jvm

5.tomcat的组件

        Tomcat instance:运行中的tomcat进程(java进程)

        Server:一个tomcat实例(一般一个server服务一个service)

        Service:用于将connector关联至engine组件,一个service只能包含一个engine组件和一个或多个connector组件

        Engine:tomcat的核心组件,用于运行jsp或servlet代码

        Connector:接受并解析用户请求,将请求映射为engine中运行的代码,把运行结果构建成响应报文。

        Host:相当于httpd的虚拟主机

        Context:类似httpd中的alias,上下文   (定义路径别名)

组件的分类:顶级类组件:server

                    服务类组件:service

                    容器类组件:可以部署webwebapp的组件,engine   host   context

                   连接器组件:connector(通常在tomcat定义的连接器类型有http连接器,SSL连接器、AJP1.3连接器、proxy连接器)

                    被嵌套类组件:valve  logger   realm

XML标签:

        <server>

            <service>

                <connector />

                <connector />

                ......

                <engine>

                    <host>

                        <context />

                        ......

                    </host>

                    ...

                </engine>

            </service>

        </server>

6.Tomcat运行模式

Standalone(裸奔模式):通过内置的web server(http connector)来接受客户端请求

proxy:由专门的web server服务客户端的httpd请求

    in-process:部署于同一主机

    network:部署于不同主机

【注】:安装tomcat,安装前提:①部署JDK  (ORACE JDK  或openjdk)

7.Tomcat的目录结构

bin:脚本及启动时用到的类

lib:类库

conf:配置文件

logs:日志文件

webapps:应用程序默认部署目录

work:工作目录

temp:临时目录

8.tomcat配置文件

server.xml:主配置文件

context.xml:每个webapp专用的配置文件,通常位于webapp应用程序目录下的WEB-INF目录中,用于定义会话管理器、JDBC等。

conf/context.xml为各个webapp提供默认配置

web.xml:每个webapp部署完才能被访问,用于提供为所有webapp提供默认部署相关配置

tomcat-users.xml:用户认证账号和密码配置文件

catalina.policy:使用-security选项启动tomcat实例时,会读取此配置文件实现安全运行策略。

logging.properties:日志相关信息配置文件

9.Java WebAPP 组织结构

属于特定的组织形式,层次型的目录结构。主要包含了servlet代码文件、JSP页面文件、类文件、部署描述符文件等

/usr/local/tomcat/webapps/app1 :

/:webapp的根目录

WEB-INF(应用):当前webapp私有资源目录,通常存放当前webapp自用的web.xml

META-INF(配置):也是当前webapp的私有资源目录,通常存放webapp自用的context.xml

classes:此webapp的私有类

lib:此webapp的私有类,被打包为jar格式类

index.jsp:webapp的主页

10.Webapp归档格式

.war   webapp

.jar    EJB的类

.rar    资源适配器

.ear    企业级应用程序

四、Tomcat的操作

1.部署测试应用程序

①:创建webapp特有的目录结构

②:提供webapp的各文件(*)

③:提供测试主页  vim index.jsp

通常情况下,程序会被catalina引擎自动部署,(如重新部署,新版应用程序会进行自动更新部署生效)

如需手动部署,简单的方式重启即可

④:进入work目录,使用tree命令即可显示其java程序部署的过程

⑤:也可查看work/Catalina/localhost/myapp/org/apache/jsp/ 下的java代码源代码和字节码

注意:默认的网页根路径映射在ROOT目录,和额外部署应用程序根目录分离。

2.部署应用程序(deployment)相关的操作

①:将webapp源文件放置于目标目录,配置tomcat服务器能够基于context.xml文件中定义的路径来访问webapp

②:将其特有类通过class loader装载至tomcat

③部署分为自动部署和手动部署,上述方式属于自动部署(auto deploy)。

手动部署:①:冷部署--->把webapp复制到指定路径,启动tomcat

                          stop  停止服务,不再提供服务

                          start  停止状态的webapp进行启动

                          redeploy  重新部署

                  ②:热部署--->基于部署工具(manager、ant脚本、tcd等部署工具)

反部署(undeploy):停止webapp,并从tomcat实例并从tomcat实例拆除其部分文件和部署名。

tomcat图形化部署工具--->manager app(属于应用程序管理工具)

需要配置部署管理员的账号、密码 vim conf/tomcat-user.xml

【注】:默认除了本机不被支持,如需支持需要修改webapps/manager/META-INF/context.xml 文件进行更改(或注释也可)

Tomcat虚拟主机图形管理工具  Host Manager

同样如需要远程登录,需要更改对应的管理配置文件

 Port:8005 本机连接自己实现实例管理,最好进行更改,不然有安全风险

面对此问题要进行安全加固,有两种解决方案:

①把port改成随机数

②把这个端口,进行关闭port:-1

3.Tomcat主配置文件server.xml结构和详解

定义Engine组件

<Engine name="Catalina" defaultHost="localhost">

默认定义在server.xml中的catalina

定义Host组件

appBase:Host的webapps目录,可以使用基于定义好catalina环境变量后的相对路径。

autoDeploy:在Tomcat处于运行时放置于appBase目录中的应用程序文件是否能够自动部署,默认为true

unpackWars:在启用此webapps时,是否对WAR格式的归档文件先进行展开;默认为true

Host组件中定义虚拟主机

<Host name="web.xxhf123.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="false">

          <Value className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"

              prefix="web_access_log" suffix=".txt"

              pattern="% %l %u %t &quot; %r&quot; %s %b" />

</Host>

【注】:定义虚拟主机,可以将默认定义在相对的ROOT中,其他单独存放

                大写的ROOT,代表应用默认的程序,不需要接uri

               开服状态下,不要检查配置文件,否则语法错误

             

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/527401.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用新版FLIR (FLIR_ADAS_v2) 数据集创建yolo格式数据集(目标检测)

FLIR在2022.1.19发布了新版的FLIR_ADAS_v2&#xff0c;有着更多的类别和数量更丰富的图像。数据集同步注释热图像和无注释RGB图像供参考。本文章主要介绍如何使用FLIR_ADAS_v2中的rgb图像和thermal图像来制作yolo格式数据集。 1.官方数据集下载&#xff1a;FLIR_ADAS_v2数据集…

Leetcode 6. Z 字形变换

将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a; P A H N A P L S I I G Y I R 之后&#xff0c;你的输出需要从左往右逐行读取&#xff0…

【鸿蒙开发】ArkTS和组件

1. 初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性。 当前&#xff0c;ArkTS在TS的基础上主要扩展了如下能力&#xff1a; 基本语法&#xff1a;ArkTS定义了声明式UI描述、自…

AI日报:北大Open Sora视频生成更强了;文心一言可以定制你自己的声音;天工 SkyMusic即将免费开放;

&#x1f916;&#x1f4f1;&#x1f4bc;AI应用 北大Open Sora视频生成更强了!时长可达10秒&#xff0c;分辨率更高 【AiBase提要:】 ⭐️ Open-Sora-Plan v1.0.0模型发布 显著提升视频生成质量和文本控制能力 ⭐️ 支持华为昇腾910b芯片&#xff0c;提升运行效率和质量。 ⭐…

智慧安防系统EasyCVR视频汇聚平台接入大华设备无法语音对讲的原因排查与解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流&#xff0c;视频画面1、4、9、16个可选&#xff0c;支持自定义视频轮播。EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标…

CasaOS玩客云部署AList+Aria2结合内网穿透实现公网离线下载文件至网盘

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-cdH8fnSF05FmvunX {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

React - 请你说一说setState是同步的还是异步的

难度级别:中高级及以上 提问概率:70% 在React项目中,使用setState可以更新状态数据,而不能直接使用为this.state赋值的方式。而为了避免重复更新state数据,React首先将state添加到状态队列中,此时我们可以通过shouldComponentUpdate这个钩…

AutoDev 1.8 融合 DevOps 规范和实践,构建演进式 AI 辅助编码

在新版本的 AutoDev 中&#xff0c;我们又融入了一系列软件开发的实践&#xff0c;以更好地辅助开发人员的日常工作。这些新的特性&#xff0c;融合了我们对于 AI 辅助编码的新理解。诸如于&#xff1a; 重构&#xff1a;AI 重命名、坏味道重构、重构建议。提交信息优化&#x…

【Python】OPC UA 服务器扫描工具

引言 OPC UA&#xff08;开放平台通信统一架构&#xff09;是一种跨平台的、开放的数据交换标准&#xff0c;广泛用于工业自动化领域。在工业4.0的大背景下&#xff0c;OPC UA服务器在网络中的部署日益增多&#xff0c;如何快速有效地发现这些服务器成为了一个实际需求。本文将…

【opencv】示例-create_mask.cpp 通过鼠标交互产生掩膜图像(黑白图像)

/* * create_mask.cpp * * Author: * Siddharth Kherada <siddharthkherada27[at]gmail[dot]com> * * 这个教程演示了如何制作掩膜图像&#xff08;黑白图像&#xff09;。 * 该程序将输入图像作为源图像&#xff0c;并输出对应的掩膜图像。 */#include "opencv2/im…

【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...

#include "opencv2/core/utility.hpp" // 包含OpenCV核心工具库的头文件 #include "opencv2/imgproc.hpp" // 包含OpenCV图像处理的头文件 #include "opencv2/imgcodecs.hpp" // 包含OpenCV图像编码解码的头文件 #include "opencv2/highgui…

3.1_2 内存管理的概念

3.1_2 内存管理的概念 重要考点

不使用 Docker 构建 Triton 服务器并在 Google Colab 平台上部署 HuggingFace 模型

Build Triton server without docker and deploy HuggingFace models on Google Colab platform EnvironmentBuilding Triton serverDeploying HuggingFace models客户端推荐阅读参考 Environment 根据Triton 环境对应表 &#xff0c;Colab 环境缺少 tensorrt-8.6.1&#xff0…

matlab读/写文本数据(矩阵格式)

1、背景介绍 文本格式的点云数据是一种常见的形式,其形式一般如下:x y z。后面可能带有标签、颜色等信息。在使用matlab进行数据处理时,常用的2个操作:读取与写入。有时,点云之间用逗号‘,’进行间隔。 2、数据读取 对于上述两种形式,均可使用load函数进行读取,如下:…

Kali系统的常用安装后开机配置(都是实用的配置)

目录 一.查看当前操作系统的所有版本信息 二.开启root并修改密码 二.启动 Apache 服务&#xff08;用不到可忽略&#xff09; 三.开启Secure Shell&#xff08;ssh&#xff09;服务&#xff0c;才可以使用远程工具&#xff08;xshell&#xff0c;finalshell&#xff09;连接…

(虚拟DOM)前端八股文修炼Day10

一 虚拟 DOM 是什么 虚拟 DOM (Virtual DOM) 本质上是真实 DOM 的一个轻量级的 JavaScript 表示形式。它是一个在内存中的抽象&#xff0c;用于描述真实 DOM 的结构和内容。虚拟 DOM 提供了一种机制&#xff0c;允许开发者通过操作 JavaScript 对象来间接更新页面&#xff0c;…

Clip论文学习

学习过程如上 学习时&#xff0c;图片与文本对应&#xff08;句子&#xff09;&#xff0c;共有n个句子与n个文本&#xff0c;进行对比学习 测试时&#xff0c;将标签句子化&#xff0c;再将其放入encoder中操作。最后找出特征最相似的。 特点&#xff1a;泛化能力强&#x…

点击上传文件

一、页面样式&#xff1a; &#xff08;1&#xff09;点击前&#xff1a; &#xff08;2&#xff09;点击后&#xff1a; 设计&#xff1a;①自定义elementPlus图标&#xff1b;②使用Tooltip实现鼠标悬浮按钮上出现文字提示&#xff1b;③上传与更换的切换样式&#xff1b;…

蓝桥备赛——素数

素数定义 试除法判断 from math import * def if_prime(n):if n==1:return Falsem=int(sqrt(n)+1)for i in range(2,m): #范围是2到根下n+1if n%i==0:return Falsereturn True print(if_prime(5)) 试除法判断素数。就是判断是否除了1和本身还有其他可以整除自己的数,…

模块十三 异常_Object

回顾与重点 模块十二回顾 权限修饰符&#xff1a; public → protected → 默认 → private a. 构造一般用public&#xff1a;便于new对象 b. 成员方法一般用public&#xff1a;便于调用 c. 属性一般用private&#xff1a;封装思想 final&#xff1a;最终的 a. 修饰类&#x…