Java Servlet 详解:(二)Tomcat服务器-5300字匠心出品

1.JavaEE 应用服务器(JavaEE Application Server)

  • 应用服务器是 Java EE 规范的具体实现, 可以执行/驱动基于 JavaEE 平台开发的 web 项目。绝大部分的应用服务器都是付费产品
  • 常见的应用服务:
    1.Weblogic(BEA Oracle 收费)
    2.Webshpere(IBM 收费)
    3.JBoss(RedHad 收费)
    4.Resin(Caucho 收费)
    5.JRun(Macromedia 收费)
    6.Geronimo(Apache 免费)

2.Web 容器(Web Server)

  • 只实现了 JavaEE 平台下部分技术标准,如 Servlet,Jsp,JNDI,JavaMail。Web 容器是开源免费的。
  • Tomcat(Apache 开源免费)
  • Jetty(Jetty 开源免费)

3.Tomcat 的使用

1.Tomcat 下载与安装

------------官方下载地址------------

  • Tomcat 是绿色软件,解压就可使用。

2.配置环境变量

  • Tomcat 是用 Java 语言开发的 Web 容器,所以在使用 Tomcat 时需要在操作系统中正确配置环境变量
  • JAVA_HOME:C:\Program Files\Java\jdk1.8.0_171
  • PATH:%JAVA_HOME%\bin;
  • CLASS_PATH:%JAVA_HOME%\lib;

3.Tomcat 目录结构与介绍

  • bin
    bin 目录主要是用来存放 tomcat 的命令文件,主要有两大类,一类是以.sh 结尾的(linux 命令),另一类是以.bat 结尾的(windows 命令)。
  • conf
    conf 目录主要是用来存放 tomcat 的一些配置文件。
  • lib
    lib 目录主要用来存放 tomcat 运行需要加载的 jar 包
  • logs
    logs 目录用来存放 tomcat 在运行过程中产生的日志文件。
  • temp
    temp 目录用户存放 tomcat 在运行过程中产生的临时文件。(清空不会对 tomcat 运行带来影响)
  • webapps
    webapps 目录用来存放应用程序,当 tomcat 启动时会去加载 webapps 目录下的应用程序。可以以文件夹、war 包的形式发布应用。
  • work
    work 目录用来存放 tomcat 在运行时的编译后文件,例如 JSP 编译后的文件

4.Tomcat 启动与关闭

  • Tomcat 的启动与关闭需要执行 bin 目录中的命令脚本

Tomcat 启动:
运行 startup.bat 文件

Tomcat 关闭
运行 shutdown.bat 文件
------------OR------------
直接关闭掉启动窗口

5.访问 Tomcat

  • 访问 Tomcat 的 URL 格式:http://ip:port
  • 访问本机 Tomcat 的 URL 格式:http://localhost:8080

6.Tomcat 的配置

Tomcat 的配置文件由 4 个 xml 组成,分别是 context.xml、web.xml、server.xml、 tomcat-users.xml。每个文件都有自己的功能与配置方法。

  • context.xml
    Context.xml 是 Tomcat 公用的环境配置。 Tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器
  • web.xml
    Web 应用程序描述文件,都是关于是 Web 应用程序的配置文件。所有 Web 应用的 web.xml 文件的父文件
  • server.xml
    是 tomcat 服务器的核心配置文件,server.xml 的每一个元素都对应了 tomcat 中的一个组件,通过对 xml 中元素的配置,实现对 tomcat 中的各个组件和端口的配置。
  • tomcat-users.xml
    配置访问 Tomcat 的用户以及角色的配置文件。

7.解决控制台乱码

控制台产生乱码的原因是在 Tomcat 在输出日志中使用的是 UTF-8 编码,而我们中文的 Windows 操作系统使用的是 GBK 编码。由于编码格式不统一,所以出现了乱码

解决方式:
修改 conf 目录中的 logging.properties 文件重新指定的编码方式。

java.util.logging.ConsoleHandler.encoding = GBK

8.修改 Tomcat 监听端口

Tomcat 默认监听端口为 8080。可以通过修改 server.xml 文件来改变 Tomcat 的监听端口。

<Connector port="8080" protocol="HTTP/1.1" 
			connectionTimeout="20000" 
			redirectPort="8443" />

9.配置 Tomcat Manager

  • Tomcat Manager 是 Tomcat 自带的、用于对 Tomcat 自身以及部署在 Tomcat 上的应用进行管理的 web 应用。默认情况下,Tomcat Manager 是处于禁用状态的。准确的说,Tomcat Manager 需要以用户角色进行登录并授权才能使用相应的功能,不过 Tomcat 并没有配置任何默认的用户,因此我们需要先进行用户配置后才能使用 Tomcat Manager。
  • Tomcat Manager 中没有默认用户,我们需要在 tomcat-users.xml 文件配置。Tomcat Manager 的用户配置需要配置两个部分:角色配置、用户名及密码配置

Tomcat Manager 中的角色分类:

  • manager-gui 角色:
    允许访问 HTML GUI 和状态页面(即 URL 路径为/manager/html/*)
  • manager-script 角色:
    允许访问文本界面和状态页面(即 URL 路径为/manager/text/*)
  • manager-jmx 角色:
    允许访问 JMX 代理和状态页面(即 URL 路径为/manager/jmxproxy/*)
  • manager- status 角色
    仅允许访问状态页面(即 URL 路径为/manager/status/*)

配置用户及角色:

<role rolename ="admin-gui"/> 
<user username ="tomcat" password ="tomcat" role ="admin-gui" />

4.Tomcat 版本说明

版本

5.Tomcat 工作原理

  • Tomcat 是一个能够处理请求并产生响应的应用程序。Tomcat 实现了 JavaEE 平台下的一些技术规范,所以我们可以在 Tomcat 中运行我们所编写的 Servlet、JSP。

原理图

6.Tomcat 架构讲解

架构图

1.Server 组件

启动一个 server 实例(即一个 JVM),它监听在 8005 端口以接收 shutdown 命令。Server 的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个 Server 实例,必须配置它们使用不同的端口

<Server port="8005" shutdown="SHUTDOWN">
  • port: 接收 shutdown 指令的端口,默认为 8005;
  • shutdown:发往此 Server 用于实现关闭 tomcat 实例的命令字符串,默认为 SHUTDOWN;

2.Service 组件

Service 主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收请求并将其转发至关联的引擎进行处理。困此,Service 要包含一个引擎、一个或多个连接器。

<Service name="Catalina">
  • name:此服务的名称,默认为 Catalina;

3.Connector 组件

  • 支持处理不同请求的组件,一个引擎可以有一个或多个连接器,以适应多种请求方式。默认只开启了处理 Http 协议的连接器。如果需要使用其他协议,需要在 Tomcat 中配置该协议的连接器
  • 在 Tomcat 中连接器类型通常有 4 种:
    1.HTTP 连接器
    2.SSL 连接器
    3.AJP 1.3 连接器
    4.proxy 连接器
<Connector port="8888" protocol="HTTP/1.1" 
			connectionTimeout="20000" 
			redirectPort="8443" />
  • port:监听的端口
  • protocol:连接器使用的协议,默认为 HTTP/1.1;
  • connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒;
  • redirectPort:如果某连接器支持的协议是 HTTP,当接收客户端发来的 HTTPS 请求时,则转发至此属性定义的端口;
  • maxThreads:支持的最大并发连接数,默认为 200 个;

4.Engine 组件

  • Engine 是 Servlet 处理器的一个实例,即 servlet 引擎,定义在 server.xml 中的 Service 标记中。Engine 需要 defaultHost 属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的 host 组件
<Engine name="Catalina" defaultHost="localhost">
  • name:Engine 组件的名称;
  • defaultHost:Tomcat 支持基于 FQDN(Fully Qualified Domain Name 全限定域名)的虚拟主机,这些虚拟主机可以通过在 Engine 容器中定义多个不同的 Host 组件来实现;但如果此引擎的连接器收到一个发往非非明确定义虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理,因此,在 Engine 中定义的多个虚拟主机的主机名称中至少要有一个跟 defaultHost 定义的主机名称同名;

5.Host 组件

位于 Engine 容器中用于接收请求并进行相应处理的虚拟主机。通过该容器可以运行 Servlet 或者 JSP 来处理请求

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
  • name:虚拟主机的名称,Tomcat 通过在请求 URL 中的域名与 name 中的值匹配,用于查找能够处理该请求的虚拟主机。如果未找到则交给在 Engine 中 defaultHost 指定的主机处理;
  • appBase:此 Host 的 webapps 目录,即指定存放 web 应用程序的目录的路径;
  • autoDeploy:在 Tomcat 处于运行状态时放置于 appBase 目录中的应用程序文件是否自动进行 deploy;默认为 true;
  • unpackWARs:在启用此 webapps 时是否对 WAR 格式的归档文件先进行展开;默认为 true;

6.Context 组件

  • Context是Host的子标签,代表指定一个Web应用,它运行在某个指定的虚拟主机(Host)上;每个 Web 应用都是一个 WAR 文件,或文件的目录;
<Context path="/test" docBase="D:\bjsxt\itbaizhan.war" />
  • path:context path 既浏览器访问项目的访问路径
  • docBase:相应的 Web 应用程序的存放位置;也可以使用相对路径,起始路径为此 Context 所属 Host 中 appBase 定义的路径

7.Tomcat 处理请求过程

过程

  • 用户访问 localhost:8080/test/index.jsp,请求被发送到 Tomcat,被监听 8080 端口并处理 HTTP/1.1 协议的 Connector 获得
  • Connector 把该请求交给它所在的 Service 的 Engine 来处理,并等待 Engine 的回应
  • Engine 获得请求 localhost/test/index.jsp,匹配所有的虚拟主机 Host
  • Engine 匹配到名为 localhost 的 Host 虚拟主机来处理/test/index.jsp 请求(即使匹配不到会请求交给默认 Host 处理),Host 会根据/test 匹配它所拥有的所有的 Context
  • 匹配到的 Context 获得请求/index.jsp。
  • 构造 HttpServletRequest 对象和 HttpServletResponse 对象,作为参数调用 JspServlet 的 doGet()或 doPost().执行业务逻辑、数据存储等程序
  • Context 把执行完之后的结果通过 HttpServletResponse 对象返回给 Host
  • Host 把 HttpServletResponse 返回给 Engine
  • Engine 把 HttpServletResponse 对象返回 Connector
  • Connector 把 HttpServletResponse 对象返回给客户 Browser
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地球村公民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值