1.Servlet规范
1.1 Servlet功能解释Servlet是JavaEE规范的一种,主要用于扩展Java作为Web服务的功能,并定义了相应的接口,如Servlet接口、HttpRequest接口、HttpResponse接口、Filter接口等。
然后具体的服务提供商会实现这些接口功能,比如Tomcat、jetty等。
规范中不会有具体的实现。
你可以自己看看源代码,Servlet规范规定了http请求的一个执行流程:
对应的服务器容器会接收到对应的Http请求,然后解析请求,然后创建对应的Servlet实例,调用对应的init方法完成初始化,将请求的相关信息封装到一个HttpServletRequest对象中,调用Servlet的服务方法处理请求,然后将响应信息通过HttpServletResponse封装到容器中,响应客户端。
1.2 Servlet核心API我们来复习一下Servlet中的核心API,这对我们更好的掌握Tomcat的内容很有帮助。
描述获取servlet初始化参数和servletContext对象的API ServletConfig。Servlet在整个Web应用程序的动态资源之间共享数据。Servlet封装了Http请求信息,并在请求时创建。ServletResponse封装Http响应信息,在请求时创建。ServletConfig:
当容器初始化servlet时,它为servlet创建一个servletConfig对象,并通过init()方法传递它,然后保存在Servlet对象中。核心角色:
获取初始化信息;获取ServletContext对象。
servlet上下文
一个项目只有一个ServletContext对象,可以从多个servlets中获得。它可以用于向多个servlets传递数据。这个对象是在Tomcat启动时创建的,在Tomcat关闭时将被销毁!它用于在整个Web应用程序的动态资源之间共享数据。
在实际的Servlet开发中,我们会实现HttpServlet接口,其中会实现GenericServlet,在GenericServlet中会实现ServiceConfig接口,这样就可以获得ServletContext容器对象。
因此,在Servlet中,我们可以很容易地得到ServletContext对象来完成相应的操作。
公共类ServletTwoImpl扩展http servlet { @ Override protected void doGet(http servlet request请求,HttpServletResponse响应)抛出ServletException,io exception { response . set content type(" text/html;charset = ut F-8 ");// 1,参数传递servlet context servlet context = this . getservlet context();string value = string . value of(servlet context . get attribute(" name "));system . out . println(" value = "+value ");// 2.获取初始化参数字符串username = servlet context . getinititparameter(" user -name ");System.out.println("用户名= "+用户名");// 3.获取应用程序信息字符串servletContextName = servlet context . getservletcontextname();system . out . println(" servletContextName = "+servletContextName ");// 4.获取路径string pathone = servlet context . get realpath("/");string path two = servlet context . get realpath("/web -INF/");system . out . println(" path one = "+path one+";path two = "+path two);Response.getWriter()。print(" Execution:doGet;值:“+值”);}}
1.3 ServletRequest http servlet request接口继承了servlet request接口,用于封装请求信息。每次用户请求servlet时,都会创建这个对象并将其传递给servlet的service()方法。在此方法中,传入的ServletRequest将被强制转换为HttpservletRequest对象,以处理HTTP请求信息。核心角色:
获取请求消息信息;获取网络连接信息;获取请求的域属性信息。
1.4 servletresponsehttpServletResponse继承自servlet response,封装了Http响应信息。每次客户端请求时,服务器都会创建一个响应对象,并将其传递给Servlet.service()方法。核心角色:
设置响应头信息;发送状态代码;设置响应正文;重定向;
2.2的设计。上面的Servlet规范引入了Tomcat。事实上,如果我们要实现Servlet规范,提供一个服务容器来获取请求,解析封装的数据,调用与Servlet实例相关的方法是非常重要的。也就是下图中的部分。
这一块的内容其实是Tomcat。让我们来看看细节。
2.1什么是TomcatTomcat是托管Servlet的容器,所以我们说Tomcat是实现了一些J2EE规范的服务器。什么是J2 EE和雅加达EE(Eclipse Foundation)?Tomcat10之后是Jakarta EE,9之前是J2EE。
2.2 Tomcat架构通过上面的分析,我们知道Tomcat是一个Servlet规范的实现。接收和响应请求,是如何实现的?我们可以通过conf下的server.xml得出相应的结论。
Server.xml是Tomcat中最重要的配置文件,server.xml的每个元素都对应着Tomcat中的一个组件。通过配置xml文件中的元素,可以控制Tomcat中的组件。因此,学习server.xml文件的配置对于理解和使用Tomcat非常重要。
& lt?XML version = " 1.0 " encoding = " ut F-8 "?& gt& lt服务器端口="8005" shutdown="SHUTDOWN " >& ltService name = " Catalina " & gt& ltexecutor name = " tomcatThreadPool " name prefix = " catalina -exec -" max threads = " 150 " minSpareThreads = " 4 "/& gt;& lt连接器port = " 8080 " protocol = " HTTP/1.1 " connection time out = " 20000 " redirect port = " 8443 "/>& lt连接器执行器= " tomcatThreadPool " port = " 8080 " protocol = " HTTP/1.1 " connection time out = " 20000 " redirect port = " 8443 "/& gt;& ltengine name = " Catalina " default host = " localhost " >& ltrealm class name = " org . Apache . catalina . realm . lockoutrealm " & gt;& lt!--该领域使用在全局JNDI资源中“UserDatabase”键下配置的用户数据库。对该用户数据库执行的任何编辑都可以立即供该领域使用。-->& ltrealm class name = " org . Apache . catalina . realm . user database realm " resourceName = " user database "/& gt;& lt/Realm & gt;& lthost name = " localhost " app base = " web apps " unpack wars = " true " auto deploy = " true " & gt;& ltvalve class name = " org . Apache . catalina . valves . accesslogvalve " directory = " logs " prefix = " localhost _ access _ log " suffix = "。txt " pattern = " % h % l % u % t " % r " % s % b "/& gt;& lt/Host & gt;& lt/Engine & gt;& lt/Service & gt;& lt/Server & gt;极简模式
& lt服务器& gt& lt服务& gt& lt连接器/>;& lt连接器/>;& lt引擎& gt& lt主机& gt& lt上下文/>;& lt!目前--经常使用自动部署,不建议配置Context元素。上下文章节-->:有详细解释& lt/Host & gt;& lt/Engine & gt;& lt/Service & gt;& lt/Server & gt;精梳结构
每个组件对应的角色。
2.3组件分类官网实际上对以上组件进行了分类:
顶部元素:
Server:是整个配置文件的根元素。服务:表示一个引擎元素和一组连接到它的连接器元素连接器。
表示外部客户端向特定服务发送请求的接口;它也是外部客户端从特定服务接收响应的接口。容器:
容器的目的是处理连接器收到的请求,并生成相应的响应。引擎、主机和上下文都是容器。他们不是平行的,而是亲子关系。
每个组件的作用:
引擎:可以处理所有请求主机:可以处理发送到特定虚拟主机的所有请求上下文:可以处理特定Web应用程序的所有请求核心组件的串行关系:
当客户端请求发出时,相应的操作实际上是通过这些组件之间的协作来完成的。
Server元素在顶层,代表整个Tomcat容器;一个服务器元素中可以有一个或多个服务元素。服务被包装在连接器和引擎之外,它们被组装在一起向外界提供服务。一个服务可以包含多个连接器,但只能包含一个引擎;;连接器接收请求,引擎处理请求。引擎、主机、上下文都是容器,引擎包含主机,主机包含上下文。每个主机组件代表引擎中的一个虚拟主机;每个上下文组件代表一个在特定主机上运行的Web应用程序。Tomcat的整体运行架构图
这就是Tomcat架构设计和Servlet规范的细节。更多关于Tomcat架构设计Servlet规范的信息,请关注主机频道zhujipindao的其他相关文章。com!
评论前必须登录!
注册