zoukankan      html  css  js  c++  java
  • tomcat是什么?Tomcat 下载、安装、配置图文教程

    你用浏览器上网的所有操作,所有请求发送给服务器(tomcat),服务器通过请求,找相应的逻辑处理程序(jsp或servelet或java类,就是有关java语言的所有可以处理逻辑的代码,其中包括访问后台数据)然后通过你的需求,服务器把你需要的文字,图片,显示给你的页面

    Tomcat是web容器。它的作用稍后给你解释。
    你在做web项目时,多数需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索,
    那么百度服务器如何处理这个请求呢,他需要创建servlet来处理,servlet其实就是java程序,只是在服务器端的java程序,
    servlet通过配置文件拦截你的请求,并进行相应处理,然后展示给你相应界面,那么servlet如何创建? 这时候tomcat用到了,
    它就是帮助你创建servlet的东西,所以也称web容器,没有它,没法运行web项目。相对应的web容器有很多,
    比如JBOSS,WEBLOGIC等。
    Tomcat是一个应用服务器。他可以运行你按照J2EE中的Servlet规范编写好的Java程序。
    简单的说它是一个Web网站的运行容器,把你写好的网站放进去就可以运行。
    
    
    Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展,处理动态网页部分。
    Eclipse+tomcat=网络应用,如JSP类应用






    为了不让网络编程在自己看来是一个黑盒子
    在学习tomcat和servlet,jsp之前,需要了解这些

    一、tomcat是一个封装和实现了http传输协议的容器,那么http是什么?
    http全称是超文本传输协议
    即是指从万维网服务器端(http server端)传送超文本到本地浏览器的协议
    它是基于安全连接tcp/ip协议产生的
    所谓超文本传输,传输的即是html/css/js可视化前端代码

    http的特点



    1、socket是在底层封装了tcp/ip协议的java类
    2、http也是基于tcp/ip协议的传输协议
    3、如果尝试在socket中打开一个端口并等待,获取socket后输出这个socket对象通过字符流获取的请求,然后再在浏览器中输入127.0.0.1:portNum 会发现在控制台中输出了当前浏览器的配置信息,客户端ip地址等
    4、简单的说,socket和http都是封装了ip/tcp协议,在使用时不需要去在意那些从物理层到网络层等的实现(TTL包头等),只需要进行业务数据的处理即可
    5、那么http协议的三个特点,可以结合socket类的运行机制进行理解

    A.无连接
    结合socket进行理解,socket分为serversocket和socket,前者是服务器端的tcp接口,socket进行数据收发是监听机制,即服务器端的serversocket创建好了以后,会开放一个端口进行监听
    它的传输是通过流进行传输的,客户端socket封装了一个输入流一个输出流,服务器端serversocket封装了一个输入流和一个输出流,两个流建立连接后,AtoB,BtoA进行消息发送,但是如果!如果在一次请求和回应之后关闭当前的流,会导致获取了一个socket请求就将当前监听端口关闭了
    可以理解为http没有对数据进行循环监听和定时刷新验证的机制

    http大概是同理的,它每一次在载入页面,或者说获取超文本数据时,没有一个登陆状态或者说没有一个定时刷新的机制向服务端请求刷新当前的数据,超文本数据获取了就获取,如果需要对页面的内容进行变更,需要再次根据url/ajax等再次进行请求


    B.http是媒体独立的
    只要客户端知道如何进行数据处理,理论上可以接受任何形式的数据,这个很好理解,在socket中,传输的媒介 是通过流实现的,流分很多种,但究其本质都是字节流的包装,传输数据时本身肯定还是以字节为单位的

    C.http是无状态的
    这一点其实有一点重复,是根据第一点引申出来的,你每一次通信都要重新建立连接,传输过来的超文本对于客户来说是可修改的透明的,每一次获取数据都要重新发送请求,那自然是无状态,

    从这里大概可以猜测到比如网络游戏这一类需要保持连接的架构了,tcp/ip可以做成长连接,也可以做成短连接,但是长连接应该也是重复刷新的短连接吧,只要遵循tcp的长连接协议就可以保持登录状态,比如诸如java等语言对于长连接就封装了一个类来简单实现

    还有一个有趣的事是作为客户端向服务器端发送时,每次发送的端口都不同,并且都是50000+

    http报文格式

    这是http请求报文格式



    这是服务器响应消息格式


    下面是我通过浏览器向socket发送url链接请求获取的Http请求头


    二. 什么是tomcat
    一般的B/S架构web工程结构为下图:


    CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。(摘自百度百科)

    可不可以说Tomcat就是实现了CGI接口的web应用开发的容器?

    再直白一点,既然socket可以返回响应,那就也可以向客户端返回一个服务器相应的数据包,并且将业务需要的超文本内容放到其中,然后传输完成一次关一次流实现无连接双工通信。那么我也能做到B/S交互(事实上已经试验成功了)

    但是这样做很麻烦,更何况在http1.1协议下,还需要考虑到安全问题对不同的请求进行不同的回复和内容细分,比如Get请求发送过来,总不可能瞎回一个POST请求的数据包吧,还有一个web项目的基础逻辑也需要遵守
    等等

    这些内容就放到tomcat里面自行给我们封装好了,并且还将请求和回应按照业务划分成了GET/POST等方法,但是其本质(无连接的双工TCP/IP通信)是不变的!

    这是tomcat的文件结构


    tomcat除了实现了http协议以外,
    还针对javaweb项目做了很多业务优化,简单的说就是可以更好的管理java项目
    比如
    通过war包对工程jar包进行二次封装,区分公用lib文件和私有lib文件,多项目开发管理,JAVAWEB日志处理
    等等

    三、什么是Servlet
    Servlet是一个独立的开发标准,不是强耦合在Tomcat中的jar包

    JAVAEE是一个针对JAVA开发的B/S架构项目的框架,简单的说是一个jar包
    servlet是其中的一个接口,业务定义为用来处理一部分页面业务同时也是作为service层和前端html页面交互的桥梁

    其中包含的方法包括servlet生命周期,service服务,获取servlet配置信息
    继承关系

    GenericServlet抽象类继承了Servlet接口
    实现了除Service()以外的方法
    HTTPServlet继承了GenericServlet抽象类
    将Service()方法细分为了doGet(),doPost(),doHead(),doPull()方法
    不过除了doGet()和doPost(),其它几个和实现B/S交互业务不太相关
    ---------------------

    Tomcat 下载、安装、配置图文教程

    1.下载
    官网:https://tomcat.apache.org/

    在浏览器地址栏输入地址,进入下图页面。


    点击下图红色标记处(笔者选择的Tomcat 9下载,读者可根据需要自行选择)

     

    下图蓝色标记为绿色版(需要配置环境变量),红色标记为安装版。笔者选择绿色版下载(读者可根据需要自行选择)。

     

    下载后,解压到C盘(可任意选择)。

     

     

    2.配置环境变量
    右键我的电脑,点击属性,然后按下图标记1,2,3依次进行。

     

    接着按下图标记处顺序1,2,3执行。
    2:变量名(CATALINA_HOME)
    3:解压路径名(C:apache-tomcat-9.0.0.M22)

     

    启动Tomcat:
    进入Tomcat目录,双击startup.bat。

     


    上图界面代表启动成功,成功后不要关闭,否则就关掉了Tomcat。

    测试Tomcat是否启动成功:
    在地址栏输入http://locathost:8080/
    若出现下图界面,则启动成功。

     

    Tomcat9.0 安装与配置讲解完成……谢谢观看。
    ---------------------

  • 相关阅读:
    经典面试题(二)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
    ctype.h库函数
    结构体大小与内存对齐问题
    整数v,从高位到低位,取c位数,得到最大数 (其中:v>=10^c)
    32位与64 位下各类型长度对比
    C++容器类
    笔试题 相对位置不变的正负数排序
    composer 下载安装
    nginx 多进程 + io多路复用 实现高并发
    go 成长路上的坑(1)
  • 原文地址:https://www.cnblogs.com/lifangzhen/p/10063682.html
Copyright © 2011-2022 走看看