javaweb入门详解(第三篇)web服务器之tomcat简介(代码片段)

穆瑾轩 穆瑾轩     2023-01-19     123

关键词:

JavaWeb入门详解(第三篇)web服务器之Tomcat简介

1、web服务器概述

1.1、什么是服务器

    服务器:就是安装了服务器软件的计算机。

    服务器软件:接收用户请求、处理请求以及响应请求的软件。而web服务器,可以部署web项目,让用户通过浏览器来访问这些项目。

1.2、常见的web服务器

    webLogic:oracle公司的,大型的javaEE服务器,支持有所的javaEE规范,收费的。

    webSphere:IBM公司的,大型的javaEE服务器,支持有所的javaEE规范,收费的。

    JBOSS:JBOSS公司的,大型的javaEE服务器,支持有所的javaEE规范,收费的。

    Tomcat:Apache基金组织,中小型的javaEE服务器,支持部分javaEE规范,全面支持serlvet/jsp规范,开源的、免费的。

1.3、什么是javaWeb

    Internet上供外界访问的Web资源分为:

    静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。

    动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。

    静态web资源开发技术:Html、css、img

    常用动态web资源开发技术:JSP+Servlet、ASP、PHP等,在Java中,动态web资源开发技术统称为Javaweb。

    在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器:Tomcat,该服务器支持全部JSP以及Servlet规范。Tomcat三大功能:

    1)web服务器(底层是Socket的一个程序);

    2)JSP容器

    3)servlet容器

2、Tomcat目录结构

目录/文件说明
bin启动和关闭tomcat的bat文件。startup.bat/shutdown.bat、startup.sh/shutdown.sh用于windows和linux下的启停脚本。
conf

配置文件:

Catalina:用于存储针对每个虚拟机的Context配置

context.xml:定义所有web应用均需加载的context配置,如果web应用指定了自己的context.xml,该文件将被覆盖

catalina.properties:Tomcat的环境变量配置 logging.properties:Tomcat的日志配置 server.xml:服务器的核心配置,该文件用于配置和 server 相关的信息, 比如 tomcat启动端口后,配置Host, 配置Context 即web应用

web.xml:该文件配置所有web应用(web应用就相当于是一个 web站点)描述文件,如servlet。 tomcat-users.xml:该文件用户配置tomcat 的用户密码 和 权限。

如:管理员权限配置 <role rolename="manager"/> <user username="admin" password="admin" roles="manager"/>

lib该目录放置运行tomcat 运行需要的jar包
logs存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息.
webapps该目录下,放置我们的web应用(web 站点), 比如:建立 web1 目录 下面放置我们的html 文件 jsp 文件..图片... 则 web1就被当做一个web应用管理起来(☞ 特别说明tomcat 6.0 以后支持 tomcat 5 版本 还有别的设置)
work该目录用于存放jsp被访问后 生成的对应的 server文件 和.class文件

3、web应用组织结构和web.xml文件的作用

    web.xml文件为web应用的配置文件,它必须放在web应用目录/WEB-INF目录下 。

4、配置Tomcat

4.1、配置JDK

    配置JDK运行环境JAVA_HOME变量配置。Tomcat会通过JAVA_HOME找到所需要的JDK。

注:不同版本的Tomcat对JDK的依赖不同,可以在DOS窗口中使用命令运行。如果版本不匹配可能会出现各种问题甚至无法启动。我使用tomcat:apache-tomcat-9.0.41、JDK:1.8.0_181。

     例如:我的环境变量如果配置JDK1.6

    就会出现: Unsupported major.minor version 52.0,不受支持的主要版本52.0,也就是说JDK低版本不兼容高版本。  

Tomcat 10.0.x  supported Java Versions  8 and later   JDK编译器内部版本号:J2SE 8 = 52.0,
Tomcat 9.0.x   supported Java Versions  8 and later   JDK编译器内部版本号:J2SE 8 = 52.0,
Tomcat 8.5.x   supported Java Versions  7 and later   JDK编译器内部版本号:J2SE 7 = 51.0,
Tomcat 8.0.x   supported Java Versions  7 and later   JDK编译器内部版本号:J2SE 7 = 51.0,
Tomcat 7.0.x   supported Java Versions  6 and later   JDK编译器内部版本号:J2SE 7 = 50.0,
Tomcat 6.0.x   supported Java Versions  5 and later   JDK编译器内部版本号:J2SE 7 = 49.0,
Tomcat 5.5.x   supported Java Versions  1.4 and later JDK编译器内部版本号:J2SE 7 = 48.0,
Tomcat 4.1.x   supported Java Versions  1.3 and later JDK编译器内部版本号:J2SE 7 = 47.0,
Tomcat 3.3.x   supported Java Versions  1.1 and later JDK编译器内部版本号:J2SE 7 = 45.0,

    如果我不想修改我本地的JDK环境变量,我们可以修改Tomcat的配置,指定JDK版本:

1)在tomcat的安装目录的bin目录下找到:setclasspath.sh
2)加入如下配置即可:
set JAVA_HOME=D:\\program files\\Java\\jdk1.8.0_181
set JRE_HOME=D:\\program files\\Java\\jdk1.8.0_181\\jre
注:启动tomcat可以通过运行bin下的startup.bat,startup.bat会调用catalina.bat文件,而catalina.bat会调用setclasspath.bat文件来获取JAVA_HOME和JRE_HOME这两个环境变量的值

4.2、在IDE中配置Tomcat服务器

    菜单Window下选择Preferences,找到Server,选择Runtime Environments。

 配置完成后:

    然后在IDE中启动Tomcat即可。我的项目的工作目录是servlet,项目的部署目录我们可以在D:\\servlet.metadata.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps目录下找到,如果访问不了http://localhost:8080/,可以将Tomcat目录下的ROOT替换掉这个。

4.3、直接在Tomcat安装目录中使用

    我们将D:\\servlet.metadata.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps下的JspWeb项目直接拷贝到Tomcat的webapps目录下,然后启动(startup.bat):

访问项目:

 

5、Tomcat整体架构分析

    Tomcat本质上就是一款servlet容器,Catalina(Servlet容器)是Tomcat的核心,其他模块都是为Catalina提供支撑的。比如:通过Coyote模块提供链接通信,Jasper 模块提供JSP引擎,Naming提供JDNI服务,Juli提供日志服务。

注:JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。

    Catalina负责管理Server,而Server代表整个Tomcat容器。Server下面有多个Services,每个服务都包含着多个连接器Connector(Coyote实现)和一个容器组件Container。在Tomcat启动的时候,就会创建一个Catalina的实例。

    我们也可以通过Tomcat的配置server.xml文件来窥测Tomcat的设计。当然有时间可以去研究下源码。

<?xml version="1.0" encoding="UTF-8"?>
<!--Server代表整个整个Tomcat容器。只有一个。一个Server元素中可以有一个或多个Service元素。
    shutdown属性表示关闭Server的指令
    port属性表示Server接收shutdown指令的端口号
    Server的主要任务,就是提供一个接口让客户端能够访问到这个Service
-->
<Server port="8005" shutdown="SHUTDOWN">
  <!--监听器:
      VersionLoggerListener:监听器记录Tomcat、Java和操作系统的信息;
      AprLifecycleListener:检查APR库,如果存在则加载。
      JasperListener:在Web应用启动之前初始化Jasper,Jasper是JSP引擎,把JVM不认识的JSP文件解析成java文件,然后编译成class文件供JVM使用。
      JreMemoryLeakPreventionListener:与类加载器导致的内存泄露有关。
      GlobalResourcesLifecycleListener:初始化< GlobalNamingResources>标签中定义的全局JNDI资源;如果没有该监听器,任何全局资源都不能使用。
      ThreadLocalLeakPreventionListener:当Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新。
  -->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
    
  <!--Service的作用,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;
      Server中包含一个名称为“Catalina”的Service
      Tomcat可以提供多个Service,不同的Service监听不同的端口。

      配置多个Service服务,可以实现通过不同的端口号来访问同一台机器上部署的不同Web应用。可以在:Service下面在加<Service name="Catalina2"></Service>
  -->
  <Service name="Catalina">
      <!-- Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;
           然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。
           通过配置Connector,可以控制请求Service的协议及端口号。
           客户端可以通过8080端口号使用http协议访问Tomcat。protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort表示当强制要求https而请求是http时,重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间。
-->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
     <!--
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
    --> 
      <!-- Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。
-->
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
        <!--Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。
            Host组件代表的虚拟主机,对应了服务器中一个网络名实体(IP或域名)。
            name属性指定虚拟主机的主机名
            unpackWARs指定了是否将代表Web应用的WAR文件解压;如果为true,通过解压后的文件结构运行该Web应用,如果为false,直接使用WAR文件运行Web应用。
-->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

javaweb详解(第一篇)之web入门(代码片段)

JavaWeb详解(第一篇)之Web入门1、JavaWeb概述  Internet上供外界访问的Web资源分为:静态web资源、动态web资源。  静态web资源(如html页面、css):指web页面中供人们浏览的数据始终是不变。  动态web资源&#x... 查看详情

javaweb开发之spring详解之——spring的入门以及ioc容器装配bean(xml和注解的方式)spring整合web开发整合junit4测试

Spring框架学习路线Spring的IOCSpring的AOP,AspectJSpring的事务管理,三大框架的整合Spring框架概述什么是Spring? Spring是分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。所谓分层:SUN提供的EE的三层结构:web层、业务层、数据访问层... 查看详情

数仓第三篇:详解维度建模之事实表!

目录导读:01、事实表基础1、事实表特征2、有事实的事实表3、无事实的事实表02、事实表设计规则03、事实表设计方法04、有事实的事实表1、事务事实表2、周期快照事实表05、无事实的事实表06、聚集型事实表1、基本原则2、... 查看详情

javaweb详解(第一篇)之servlet基础简介(代码片段)

...)之Servlet基础简介1、Serlvet概述   Servlet是运行在Web服务器或应用服务器上的java程序,它是一个中间层,负责连接来自web浏览器或其他HTTP客户程序和HTTP服务器上应用程序。是sun公司提供的一门用于开发动态web资源... 查看详情

springcloud连载第三篇补充之zuul

由于Zuul的内容较多所以单独列出一篇来讲。全是干货,如果学到东西的,动动小手给点个推荐^_^ 谢谢!1.RouterandFilter:Zuul(路由和过滤:Zuul)路由是微服务架构不缺少的一部分。例如“/”可能映射到web服务,“/api/users”映... 查看详情

javaweb入门详解(第二篇)之xml简介(代码片段)

JavaWeb入门详解(第二篇)之xml简介1、XML概述  XML(ExtensibleMarkupLanguage的缩写),被称作可扩展标记语言,是一种标记语言。XML也是W3C推荐的数据传输存放标准。XML也不是一出现就备受瞩目的,XML语言... 查看详情

javaweb之servlet入门

...p; Servlet(ServerApplet),全称JavaServlet,是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。2.第一个Servlet程序       1) 新建 查看详情

tomcat入门一文详解/精通javaweb(代码片段)

@[toc]一.为什么使用Tomcat?1.1大体介绍Tomcat服务器是一个免费的开源web应用服务器,它是一个轻量级应用服务器。它广泛应用于中小型系统以及并发访问用户不多的情况。它是开发和调试JSP程序的首选。对于初学者,可以认为当... 查看详情

第十三篇:html和css入门

一、HTML本质以及在WEB程序中的作用二、HTML的head内标签三、HTML的body内标签四、body内标签之lnput系列五、超链接六、图片及表格七、fieldset标签和label标签八、标签总结九、CSS选择器十、CSS之float样式十一、CSS之display样式十二、CSS... 查看详情

第三篇之消息的收发

...相关操作都进行了封装,本章节将主要介绍如何接收微信服务器发送的消息并做出响应。 明确在哪接收消息从微信公众平台接口消息指南中可以了解到,当用户向公众帐号发消息时,微信服务器会将消息通过POST方式提交给... 查看详情

第三篇:白话tornado源码之请求来了

...是未获取客户端请求信息。概述本篇就来详细介绍tornado服务器(socket服务端)是如何接收用户请求数据以及如果根据用户请求的URL处理并返回数据,也就是上图的3系列所 查看详情

第三篇:白话tornado源码之请求来了

概述本篇就来详细介绍tornado服务器(socket服务端)是如何接收用户请求数据以及如果根据用户请求的URL处理并返回数据,也就是上图的3系列所有步骤,如上图【start】是一个死循环,其中利用epoll监听服务端socket句柄,一旦客户... 查看详情

撩课-mysql详解1-数据库简介(代码片段)

...b系列3之MySQL][撩课-JavaWeb系列4之JDBC][撩课-JavaWeb系列5之web服务器-idea] 1、什么是数据库?数据库是按照数据结构来组织、存储和管理数据的仓库2、什么是DBMS?是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据... 查看详情

小白入门深度学习|第三篇:深度学习初体验

文章目录一、深度学习是什么二、实现过程1.准备数据2.构建神经网络模型3.编译模型4.训练模型5.预测三、总结课后练手项目(附代码+讲解) 查看详情

django框架之第三篇模板语法

Django框架之第三篇模板语法(重要!!!)一、什么是模板?只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板。二、模板语法分类一、模板语法之变量:语法为{{}}:在Django模板中遍历复杂数据结构的关键是句... 查看详情

java小白入门系列第三篇从新开始

...10月9日   17:47:51郑州  西北风SueJava小白入门系列第三篇从新开始  越过中秋,迈过国庆,这一个多月乱七八糟又不得不应对的事接踵而至,好在学习一直在持续,用户中心的项目今天终于收尾测试并开始复习... 查看详情

20160327javaweb之jsp入门

一、什么是JSP?JSP全称是JavaServerPages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在... 查看详情

django框架之第三篇模板语法(代码片段)

Django框架之第三篇模板语法(重要!!!)一、什么是模板?只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板。二、模板语法分类一、模板语法之变量:语法为:在Django模板中遍历复杂数据结构的关键是句点... 查看详情