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

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

             

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

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

相关文章

UE4_动画基础_角色的缩放

以第三人称模板进行制作。 一、首先为角色缩放新建粒子效果 1、新建niagara system&#xff0c;重命名为NS_Shrink。 2、双击打开设置参数&#xff1a; 发射器重命名&#xff1a; Emitter State&#xff1a; 发射器一次喷发数量&#xff1a; 粒子初始大小&#xff0c;生命周…

Go协程池gopool源码解析

1、gopool简介 Repository&#xff1a;https://github.com/bytedance/gopkg/tree/develop/util/gopool gopool is a high-performance goroutine pool which aims to reuse goroutines and limit the number of goroutines. It is an alternative to the go keyword. gopool的…

【Linux进阶之路】地址篇

文章目录 一、ipv4地址1. 基本概念2. 分类3.CIDR4.特殊的ip地址 二、IP协议1. 协议字段2.分片与重组3.路由 三、NAT技术1.公有和私有2.NAT3.NAPT 四、ARP协议1.MAC地址2.ARP 五、DHCP协议六、DNS协议尾序 一、ipv4地址 1. 基本概念 概念&#xff1a;IP地址&#xff0c;英文全…

从零自制docker-8-【构建实现run命令的容器】

文章目录 log "github.com/sirupsen/logrus"args...go moduleimport第三方包失败package和 go import的导入go build . 和go runcli库log.SetFormatter(&log.JSONFormatter{})error和nil的关系cmd.Wait()和cmd.Start()arg……context.Args().Get(0)syscall.Exec和…

【Leetcode每日一题】 递归 - 验证二叉搜索树(难度⭐⭐)(53)

1. 题目解析 题目链接&#xff1a;98. 验证二叉搜索树 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 中序遍历是二叉树遍历中的一种重要方式&#xff0c;它按照左子树、根节点、右子树的顺序访问每个节点。这种方式…

2024mathorcup妈妈杯数学建模A题思路模型

2024mathorcup妈妈杯数学建模A题思路模型&#xff1a;比赛开始后第一时间更新&#xff0c;更新见文末名片&#xff0c;下面对2022年B题进行介绍&#xff1a; 2022Mathorcup B题题目介绍 ​ B题无人仓的搬运机器人调度问题本题考在无人仓内的仓库管理问题之一&#xff0c;搬运机…

机场数据治理系列介绍(5)民用机场智慧能源系统评价体系设计

目录 一、背景 二、体系设计 1、评价体系设计维度 2、评价体系相关约定 3、评价指标体系框架设计 4、能源利用评价指标 5、环境友好评价指标 6、智慧管控评价指标 7、安全保障评价指标 三、具体落地措施 一、背景 在“双碳”国策之下&#xff0c;各类机场将能源系统建…

深入解析template,掌握C++模板的精髓!

掌握C模板&#xff08;template&#xff09;的优雅之道&#xff01; 一、什么是模板&#xff1f;二、模板如何工作&#xff1f;三、C 中的模板类型3.1、 类模板3.2、 函数模板 四、模板参数推导4.1、模板参数推导示例4.2、函数模板参数推导4.3、类模板参数推导&#xff08;C17 …

2024年MathorCup妈妈杯数学建模思路C题思路解析+参考成品

1 赛题思路 (赛题出来以后第一时间在群内分享&#xff0c;点击下方群名片即可加群) 2 比赛日期和时间 报名截止时间&#xff1a;2024年4月11日&#xff08;周四&#xff09;12:00 比赛开始时间&#xff1a;2024年4月12日&#xff08;周五&#xff09;8:00 比赛结束时间&…

GPU部署ChatGLM3

首先&#xff0c;检查一下自己的电脑有没有CUDA环境&#xff0c;没有的话&#xff0c;去安装一个。我的电脑是4060显卡&#xff0c;买回来就自带这些环境了。没有显卡的话&#xff0c;也不要紧&#xff0c;这个懒人安装包支持CPU运行&#xff0c;会自动识别没有GPU&#xff0c;…

启明智显M4核心板驱动17寸屏 为您打造无与伦比的视觉盛宴

近日&#xff0c;启明智显推出M4核心板驱动17寸屏&#xff0c;8 Link LVDS接口下1280*1024分辨率为用户展现了超强的视觉体验。 M4核心板采用纯国产架构&#xff0c;内置了16位DDR内存&#xff0c;为设备提供强大的数据处理能力和高效的运行速度。无论是处理复杂的任务还是进…

【简单讲解下C++max函数的使用】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Java | Leetcode Java题解之第13题罗马数字转整数

题目&#xff1a; 题解&#xff1a; class Solution {Map<Character, Integer> symbolValues new HashMap<Character, Integer>() {{put(I, 1);put(V, 5);put(X, 10);put(L, 50);put(C, 100);put(D, 500);put(M, 1000);}};public int romanToInt(String s) {int …

考研数学|刷题用汤家凤《1800》还是张宇《1000》?看完这篇你就懂了

考研数学的复习是一个系统的过程&#xff0c;不同的习题集有各自的特点和适用场景。汤家凤的1800题和张宇的1000题都是非常受欢迎的考研数学复习资料&#xff0c;它们各有侧重点和优势。 汤家凤的1800题以其全面性和基础性著称&#xff0c;题目覆盖了考研数学的各个知识点&…

缓存穿透问题

缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的两种解决方案&#xff1a; 1.缓存空对象 优点&#xff1a;实现简单&#xff0c;维护方便 缺点&#xff1a;占用…

【40分钟速成智能风控4】传统风险管理体系

目录 人工审核 纸质材料评估 电话回访 线下走访尽调 专家模型 业务规则库 专家调查权重法 熵权法 随着大数据和机器学习技术的发展与成熟&#xff0c;智能风控已经逐步取代传统风控&#xff0c;成为国内互联网金融机构主流的风险管理模式。一方面&#xff0c;传统风控是…

U盘中病毒了会影响电脑吗 U盘中病毒了怎么恢复数据 easyrecovery数据恢复软件免费版 easyrecovery绿色版破解版激活密钥无需注册

EasyRecovery是世界著名数据恢复公司 Ontrack 的技术杰作&#xff0c;EasyRecovery破解版是一个威力非常强大的硬盘数据恢复工具&#xff0c;能够帮你恢复丢失的数据以及重建文件系统。您只需要按软件提示一步一步操作&#xff0c;就能恢复出你电脑上的文档、表格、图片、音频、…

LeetCode 热题 100 | 多维动态规划(一)

目录 1 多维动态规划 2 62. 不同路径 3 64. 最小路径和 菜鸟做题&#xff0c;语言是 C&#xff08;细品动态规划 ing&#xff09; 1 多维动态规划 目前的感觉&#xff1a;抽象为二维数组。 2 62. 不同路径 题眼&#xff1a;“机器人每次只能向下或者向右移动一步”。…

什么是sso?

SSO&#xff08;Single Sign-On&#xff09;&#xff0c;即单点登录&#xff0c;是一种安全协议&#xff0c;它允许用户在多个应用程序之间使用同一组登录凭据进行身份验证。这意味着用户只需要登录一次&#xff0c;就可以访问多个需要身份验证的应用程序。 SSO的工作原理如下…

亚信安慧AntDB数据库分享“UltraSync特性介绍”技术演讲,助力客户降本增效

3月30日&#xff0c;由中国开源软件联盟组织的PostgreSQL技术峰会活动在南京举办&#xff0c;各数据库厂商研发带头人、企业资深DBA和众多技术爱好者齐聚一堂。湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧&#xff09; AntDB-T产品线研发负责人梁博受邀参会…