面试官:Tomcat是如何处理Http请求的?

admin 行业动态 2024-10-09 35

摘要:Servlet技术是我们java后端工程师必须掌握的,这里我们可以把java web技术路线可以大致归纳为如下过程: 因为tomcat实现了Servlet规范,所以我们得掌握什么是Servlet?什么是Servlet规范? 什么是Servlet呢? Servlet是JavaEE规范的一种,主要是为了扩展Java作...

 Servlet技术是我们java后端工程师必须掌握的,这里我们可以把java web技术路线可以大致归纳为如下过程:

因为tomcat实现了Servlet规范,所以我们得掌握什么是Servlet?什么是Servlet规范?

什么是Servlet呢?

Servlet是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能,统一接口。由其他内部厂商如tomcat,jetty内部实现web的功能。如一个http请求到来:容器将请求封装为servlet中的HttpServletRequest对象,调用init(),service()等方法输出response,由容器包装为httpresponse返回给客户端的过程。

什么是Servlet规范?

从 Jar 包上来说,Servlet 规范就是两个 Jar 文件。servlet-api.jar 和 jsp-api.jar,Jsp 也是一种 Servlet。 从package上来说,就是 javax.servlet 和 javax.servlet.http 两个包。 从接口来说,就是规范了 Servlet 接口、Filter 接口、Listener 接口、ServletRequest 接口、ServletResponse 接口等。类图如下:

为什么我们将tomcat称为Web容器或者Servlet容器 ?

我们用一张图来表示他们之间的关系:

简单的理解:启动一个ServerSocket,监听8080端口。Servlet容器用来装我们开发的Servlet。

tomcat架构介绍

tomcat架构图

架构图与tomcat中conf下面的server.xml中内容对比:

<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN">   <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 name="Catalina">     <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />     <Engine name="Catalina" defaultHost="localhost">       <Realm className="org.apache.catalina.realm.LockOutRealm">         <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 &quot;%r&quot; %s %b" />         <Context docBase="F:/workspace/my-web-maven/target" path="/" reloadable="true" />          <Context docBase="F:/workspace/my-web-maven/target" path="/tian" reloadable="true" />    </Host>     </Engine>   </Service> </Server> 

相关推荐

评论列表
关闭

用微信“扫一扫”