Tomcat架构设计及Servlet作用规范讲解_Tomcat

来源:脚本之家  责任编辑:小易  
目录
1.Servlet规范1.1 Servlet作用讲解1.2 Servlet核心API1.3 ServletRequest1.4 ServletResponse2.Tomcat的设计2.1 什么是Tomcat2.2 Tomcat的架构结构2.3 组件分类

1.Servlet规范

1.1 Servlet作用讲解

Servlet是JavaEE规范中的一种,主要是为了扩展Java作为Web服务的功能,统一定义了对应的接口,比如Servlet接口,HttpRequest接口,HttpResponse接口,Filter接口。

然后由具体的服务厂商来实现这些接口功能,比如Tomcat,jetty等。

在规范里面并不会有具体的实现。

可以自行看下源码,而在Servlet规范中规定了一个http请求到来的执行处理流程:

对应的服务器容器会接收到对应的Http请求,然后解析该请求,然后创建对应的Servlet实例,调用对应init方法来完成初始化,把请求的相关信息封装为HttpServletRequest对象来调用Servlet的service方法来处理请求,然后通过HttpServletResponse封装响应的信息交给容器,响应给客户端。

1.2 Servlet核心API

我们再来回顾下Servlet中的核心API,这块对我们更好的掌握Tomcat的内容还是非常有帮助的。

API描述
ServletConfig获取servlet初始化参数和servletContext对象。
ServletContext在整个Web应用的动态资源之间共享数据。
ServletRequest封装Http请求信息,在请求时创建。
ServletResponse封装Http响应信息,在请求时创建。

ServletConfig

容器在初始化servlet时,为该servlet创建一个servletConfig对象,并将这个对象通过init()方法来传递并保存在此Servlet对象中。核心作用:

获取初始化信息;获取ServletContext对象。

ServletContext

一个项目只有一个ServletContext对象,可以在多个Servlet中来获取这个对象,使用它可以给多个Servlet传递数据,该对象在Tomcat启动时就创建,在Tomcat关闭时才会销毁!作用是在整个Web应用的动态资源之间共享数据。

在实际的Servlet开发中,我们会实现HttpServlet接口,在该接口中会实现GenericServlet,而在GenericServlet会实现ServiceConfig接口,从而可以获取ServletContext容器对象

所以在Servlet中我们可以很容易的获取到ServletContext对象,从而完成对应的操作。

public class ServletTwoImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        // 1、参数传递
        ServletContext servletContext = this.getServletContext() ;
        String value = String.valueOf(servletContext.getAttribute("name")) ;
        System.out.println("value="+value);
        // 2、获取初始化参数
        String userName= servletContext.getInitParameter("user-name") ;
        System.out.println("userName="+userName);
        // 3、获取应用信息
        String servletContextName = servletContext.getServletContextName() ;
        System.out.println("servletContextName="+servletContextName);
        // 4、获取路径
        String pathOne = servletContext.getRealPath("/") ;
        String pathTwo = servletContext.getRealPath("/WEB-INF/") ;
        System.out.println("pathOne="+pathOne+";pathTwo="+pathTwo);
        response.getWriter().print("执行:doGet; value:"+value);
    }
}

1.3 ServletRequest

HttpServletRequest接口继承ServletRequest接口,用于封装请求信息,该对象在用户每次请求servlet时创建并传入servlet的service()方法,在该方法中,传入的servletRequest将会被强制转化为HttpservletRequest 对象来进行HTTP请求信息的处理。核心作用:

获取请求报文信息;获取网络连接信息;获取请求域属性信息。

1.4 ServletResponse

HttpServletResponse继承自ServletResponse,封装了Http响应信息。客户端每个请求,服务器都会创建一个response对象,并传入给Servlet.service()方法。核心作用:

设置响应头信息;发送状态码;设置响应正文;重定向;

2.Tomcat的设计

通过上面Servlet规范的介绍,其实我们发下我们要实现Servlet规范的话,很重要的就得提供一个服务容器来获取请求,解析封装数据,并调用Servlet实例相关的方法。也就是如下图中的部分

这块的内容其实就是Tomcat,具体的我们来看看。

2.1 什么是Tomcat

Tomcat是一个容器,用于承载Servlet,那么我们说Tomcat就是一个实现了部分J2EE规范的服务器。J2 EE和Jakarta EE(Eclipse基金会)这两是啥?用于Tomcat10以后都是Jakarta EE,而9之前就是J2EE.

2.2 Tomcat的架构结构

我们通过上面的分析,知道Tomcat是一个Servlet规范的实现,要接收请求和响应请求,那么具体是如何实现的呢?这块我们可以通过conf下的server.xml得出对应的结论。

server.xml是Tomcat中最重要的配置文件,server.xml 的每一个元素都对应了Tomcat 中的一个组件 ;通过对xml文件中元素的配置,可以实现对Tomcat中各个组件的控制。因此,学习server.xml文件的配置,对于了解和使用Tomcat至关重要.

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <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 "%r" %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

极简模式

<Server>
    <Service>
        <Connector />
        <Connector />
        <Engine>
            <Host>
                <Context /><!-- 现在常常使用自动部署,不推荐配置Context元素,Context小节有详细说明 -->
            </Host>
        </Engine>
    </Service>
</Server>

梳理出的结构

对应的每个组件的作用。

2.3 组件分类

官网其实对上面的组件也做了分类:

顶级元素:

Server:是整个配置文件的根元素Service:代表一个Engine元素以及一组与之相连的Connector元素

连接器

代表了外部客户端发送请求到特定Service的接口;同时也是外部客户端从特定Service接收响应的接口。

容器

容器的作用是处理Connector接收进来的请求,并产生对应的响应,Engine,Host和Context都是容器,他们不是平行关系,而是父子关系。

每个组件的作用:

Engine:可以处理所有请求Host:可以处理发向一个特定虚拟主机的所有请求Context:可以处理一个特定Web应用的所有请求

核心组件的串联关系

当客户端请求发送过来后其实是通过这些组件相互之间配合完成了对应的操作。

Server元素在最顶层,代表整个Tomcat容器;一个Server元素中可以有一个或多个Service元素Service在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;Connector接收请求,Engine处理请求。Engine、Host和Context都是容器,且Engine包含Host,Host包含Context。每个Host组件代表Engine中的一个虚拟主机;每个Context组件代表在特定Host上运行的一个Web应用.

整体Tomcat的运行架构图

以上就是Tomcat架构设计及Servlet作用规范讲解的详细内容,更多关于Tomcat架构设计Servlet规范的资料请关注真格学网其它相关文章!

您可能感兴趣的文章:Tomcat生命周期详解Tomcat启动核心流程示例详解tomcat关于配置servlet的url-pattern的问题思路详解详解Tomcat是如何实现异步Servlet的详解如何通过tomcat的ManagerServlet远程部署项目Tomcat怎么实现异步Servlet

  • 本文相关:
  • windows系统下安装tomcat服务器和配置虚拟目录的方法
  • tomcat解决catalina.out文件过大的问题
  • tomcat配置gzip压缩提高浏览网站的速度
  • tomcat 7通过设置不同的端口部署两个项目
  • intellij?idea中配置tomcat超详细教程
  • 在windows10中安装tomcat的教程图解
  • idea 2020 配置tomcat服务器的详细步骤
  • windows下tomcat安装教程
  • 怎么减少本地调试tomcat重启次数你知道吗
  • tomcat实现session共享(session 会话复制)
  • tomcat是干什么的?
  • 高并发网站架构的设计方案是怎样的?
  • 谁有jsp的网上购物系统,mysql,tomcat,做毕业设计用,简单些就行...
  • 到底考系统分析师还是系统架构设计师
  • 系统规划与管理师和系统架构设计师哪个好考
  • 基于阿里云的上云架构设计
  • jettry和tomcat的区别
  • Tomcat中context的docbase和path指的什么,解包目录和war文件...
  • eclipse+tomcat开发环境 java白盒测试工具哪个更合适
  • oracle数据库的分布式和tomcat的集群式有什么区别
  • lvs和tomcat中间nginx有什么好处
  • 关于linux中利用nginx+tomcat配置负载均衡并实现session复制的...
  • 如何使用tomcat发布一个个人网页
  • 设计b/s架构系统,只能在一台电脑上进行,这台机上安装什么软...
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器tomcat tomcat生命周期详解tomcat启动核心流程示例详解tomcat关于配置servlet的url-pattern的问题思路详解详解tomcat是如何实现异步servlet的详解如何通过tomcat的managerservlet远程部署项目tomcat怎么实现异步servletwindows系统下安装tomcat服务器和配置虚拟目录的方法tomcat解决catalina.out文件过大的问题tomcat配置gzip压缩提高浏览网站的速度tomcat 7通过设置不同的端口部署两个项目intellij?idea中配置tomcat超详细教程在windows10中安装tomcat的教程图解idea 2020 配置tomcat服务器的详细步骤windows下tomcat安装教程怎么减少本地调试tomcat重启次数你知道吗tomcat实现session共享(session 会话复制)tomcat7.0安装配置详细(图文)直接双击启动tomcat中的startup.bat闪退原因及tomcat中更改网站根目录和默认页的配置方法在tomcat中部署web项目的操作方法(必看篇)如何修改tomcat默认端口号8080的方法关于tomcat的server.xml里host节点配置的一tomcat启动报错:java.util.zip.zipextomcat启动startup.bat一闪而过问题的解决方法tomcat环境变量详细配置步骤启动tomcat时 错误: 代理抛出异常 : java.rm如何提升idea启动速度与tomcat日志乱码问题tomcat实现session共享(session 会话复制)教你如何通过jconsoler监控tomcat的jvm内存tomcat正常启动但网页却无法访问的几种解决方法如何查看tomcat的控制台输出的方法intelli idea中配置tomcat找不到的解决办法iis tomcat共享80端口的解决方案解决eclipse最新版无法使用tomcat插件问题tomcat多实例与负载均衡示例详解tomcat进程假死问题排查
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved