Java-Tomcat

news2024/11/26 16:25:01

一、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

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

             

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

峥嵘九载,逐云而上:青果乔迁新址,乘风破浪再起新篇

4月1日&#xff0c;近百名员工和诸多合作伙伴齐聚&#xff0c;共同见证了青果九周年庆典暨乔迁仪式这一里程碑式的时刻。 新起点&#xff0c;新征程&#xff0c;再启航&#xff01; 以新为序&#xff0c;共赴新征程 在典礼上&#xff0c;青果创始人和高管分别发表了致辞&#…

python实现OCR:pytesseract和pyddleocr(附代码)

文章目录 背景pytesseractpaddleocr百度apipaddleocr 背景 OCR是光学字符识别&#xff08;Optical Character Recognition&#xff09;的缩写&#xff0c;通过扫描等光学输入方式和文字识别将图片中的文字提取出来&#xff0c;非常适用于提取网络截图或扫描pdf等文件里的文本。…

2014最新AI智能系统ChatGPT网站源码+Midjourney绘画网站源码+搭建部署教程文档

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

关于OpenFeign的返回类型包装问题

在一天夜里。我在使用feign的调用时&#xff0c;突然出现了一点点问题。 就是对于feign类型的包装问题。产生了疑问。 在后来&#xff0c;也就是今天。在网上取取经。看到了一个答案。说&#xff1a;feign的调用会有一个编码器和解码器。 使用feign的解码器。他的原理也很简…

c++有趣代码(游戏)(续集)

19.忍者三(参考:c++高级游戏集游戏_c++游戏库-CSDN博客) #include<bits/stdc++.h> #include<windows.h> #include<stdio.h> #include<conio.h> #include<time.h> #define Nor if(B[b].x<5) B[b].x=5; #define Out1 Bx1-

【JavaEE框架技术】spring-1

目录 一、使用maven管理spring项目 1.1搭建开发环境 1.1.1修改settings.xml文件 1.1.2把该文件拷入.m2目录 1.1.3打开ecplise&#xff0c;建立maven项目 1.1.4向pom.xml文件中添加spring的坐标&#xff1a; 1.4.1.1代码含义 1.4.1.2代码说明 1.2创建spring配置文件 二…

7.1.4 Selenium 爬取京东商品信息实战

目录 1、实战内容 2、思路 3、分析 url 4、开始操作 1、得到 Cookies 2、访问页面&#xff0c;得到 response 3、解析页面 4、存入 MySQL 5、1-3步总代码 1、实战内容 爬取京东笔记本电脑商品的信息(如&#xff1a;价格、商品名、评论数量)&#xff0c;存入 MySQL 中…

RAG基础知识及应用

简单介绍下RAG的基础知识和RAG开源应用 “茴香豆" 一. RAG 基础知识 1. RAG工作原理 RAG是将向量数据库和大模型问答能力的有效结合&#xff0c;从而达到让大模型的知识能力增加的目的。首先将知识源存储在向量数据库中&#xff0c;当提出问题时&#xff0c;去向量数据库…

ENVI实战-影像的下载和矢量边界裁剪

实验1&#xff1a;学会使用不同的遥感数据检索和下载平台 目的&#xff1a;学会使用不同的数据平台&#xff0c;检索和下载所需的遥感数据。 过程&#xff1a; ①基于地理空间数据云的数据检索和下载方法&#xff1a; A.网站进入&#xff1a;网络搜索&#xff1a;https://w…

Notepad++软件安装及配置说明

Notepad是 Windows操作系统下的一套文本编辑器&#xff0c;有完整的中文化接口及支持多国语言编写的功能。 Notepad功能比 Windows自带记事本强大&#xff0c;除了可以用来制作一般的纯文字说明文件&#xff0c;也十分适合编写计算机程序代码。Notepad不但可以显示行号&#xf…

ABC库存分类管理法

ABC库存分类管理法&#xff1f; ABC分类法是根据物品在技术或经济方面的主要特征&#xff0c;进行分类排队&#xff0c;将分析对象划分成A、B、C三类&#xff0c;从而有区别地确定管理方式的分析方法。 ABC分类法来源与定义 1951年美国通用公司经理戴克将“关键的少数和次要的…

day76 jquery

知识点: 1 在HTML中引入jQuery 2 jQuery中就绪函数 3 jQuery中选择器 4 使用jQuery获取表单元素的值 及标签中间的内容 5 jQuery中获取标签属性 6 jQuery设置和获取标签样式 ----------------------------------- 一 在HTML中引入jQuery 1 1) 把jQue…

3.C++ Make

1.Makefile 1.1 什么是 Makefile 一个工程中有很多文件&#xff0c;文件之间都是相辅相成有着编译的先后顺序&#xff0c;但是如果自己手动根据编译顺序编译文件造成速度非常慢。Makefile 是”自动化编译“&#xff0c;只需一个 make 指令系统就会根据编译顺序帮自己编译文件…

excel散点图怎么每个点添加名称

最终效果图&#xff1a; 添加图标元素->数据标签->其他数据标签选项 选择单元格中的值 手动拖动数据标签&#xff0c;调整到合适的位置。

Spring学习笔记:IOC控制反转、AOP面向切面

挺快的&#xff0c;框架这一部分 文章目录 一、Spring概述入门案例导入依赖包在src下写配置文件创建普通类和测试类 二、IOC&#xff08;控制反转&#xff09;2.1 IOC bean 的XML操作&#xff08;创建对象&#xff0c;注入属性2.2 IOC bean 的 注解 操作 三、AOP&#xff08;面…

《UE5_C++多人TPS完整教程》学习笔记31 ——《P32 角色移动(Character Movement)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P32 角色移动&#xff08;Character Movement&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

用国内版Devin:DevOpsGPT开发一个简易官网

前言&#xff1a; 世界上第一个AI程序员Devin想必已经给大家带来了不小的震撼&#xff0c;这种L4级的技术也许已经昭示着AGI离我们或许真的不远了。 这里先给大家普及一个概念&#xff1a; L4是谷歌对AGI划分的第四个等级&#xff0c;把代码丢给 AI 改这个是 L1 或者 L2 级别的…

CentOS7安装Docker及禅道

https://blog.csdn.net/weixin_46453070/article/details/136183615?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171246925816800222886233%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id171246925816800222886233&biz_i…

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验

1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码&#xff1b;HAL_QSPI_MapInit; 这里注意&#xff1a;你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的&#xff0c;如果不是你需要将引脚…

Spring Security——13,认证成功失败注销成功处理器

认证成功&&失败&&注销成功处理器 说明&#xff1a;一、认证成功处理器1.1 自定义成功处理器1.2 配置自定义成功处理器 二、认证失败处理器2.1 自定义失败处理器2.2 配置自定义失败处理器 三、登出成功处理器3.1 自定义登出处理器3.2 配置登出处理器 四、完结撒…