当前位置: 首页 > news >正文

网站建设结课小论文吉安网站设计

网站建设结课小论文,吉安网站设计,傻瓜式wordpress,十堰城市建设网站优质博文#xff1a;IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server#xff0c;代表着整个服务器#xff0c;从上图中可以看出#xff0c;一个Server可以包含至少一个Service#xff0c;用于具体提供服务。Service主要包含两个部分#xff1a;Connector和…优质博文IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server代表着整个服务器从上图中可以看出一个Server可以包含至少一个Service用于具体提供服务。Service主要包含两个部分Connector和Container。从上图中可以看出Tomcat的心脏就是这两个组件他们的作用如下 【1】Connector用于处理连接相关的事情并提供Socket与Request和 Response相关的转化 【2】Container用于封装和管理Servlet以及具体处理Request请求 一个Tomcat中只有一个Server一个Server可以包含多个Service一个 Service只有一个Container但是可以有多个Connectors这是因为一个服务可以有多个连接如同时提供Http和Https链接也可以提供向相同协议不同端口的连接示意图如下Engine、Host、Context下边会说到 多个Connector和一个Container就形成了一个Service有了Service就可以对外提供服务了但是Service还要一个生存的环境必须要有人能够给她生命、掌握其生死大权那就非Server莫属了所以整个Tomcat的生命周期由 Server控制。另外上述的包含关系或者说是父子关系都可以在tomcat的 conf目录下的 server.xml 配置文件中看出。 二、简要解释下 server.xml 配置文件的信息 server.xml是Tomcat中最重要的配置文件server.xml的每个元素都对应了 Tomcat中的一个组件通过对xml文件中元素的配置可以实现对Tomcat中各个组件的控制。 ?xml version1.0 encodingUTF-8? Server port8005 shutdownSHUTDOWNListener classNameorg.apache.catalina.startup.VersionLoggerListener/Listener SSLEngineon classNameorg.apache.catalina.core.AprLifecycleListener/Listener classNameorg.apache.catalina.core.JasperListener/Listener classNameorg.apache.catalina.core.JreMemoryLeakPreventionListener/Listener classNameorg.apache.catalina.mbeans.GlobalResourcesLifecycleListener/Listener classNameorg.apache.catalina.core.ThreadLocalLeakPreventionListener/GlobalNamingResourcesResource authContainer descriptionUser database that can be updated and saved factoryorg.apache.catalina.users.MemoryUserDatabaseFactory nameUserDatabase pathnameconf/tomcat-users.xml typeorg.apache.catalina.UserDatabase//GlobalNamingResourcesService nameCatalinaConnector port8080 protocolHTTP/1.1 connectionTimeOut20000 redirectPort8443/Connector port8009 protocolAJP/1.3 redirectPort8443/Engine defaultHostlocalhost nameCatalinaRealm classNameorg.apache.catalina.realm.LockOutRealmRealm classNameorg.apache.catalina.realm.UserDatabaseRealm resourceNameUserDatabase//RealmHost appBasewebapps autoDeploytrue namelocalhost unpackWARstrueValve classNameorg.apache.catalina.valves.AccessLogValve directorylogs pattern%h %l %u %t quot;%rquot; %s %b prefixlocalhost_access_log. suffix.txt/Context docBasecas-server-webapp path/cas reloadabletrue sourceorg.eclipse.jst.j2ee.server:cas-server-webapp/Context docBaseportal path/portal reloadabletrue sourceorg.eclipse.jst.jee.server:portal//Host/Engine/Service /Serverserver.xml的整体架构简洁版 ServerServiceConnector /Connector /EngineHostContext /!-- 现在常常使用自动部署不推荐配置Context元素Context小节有详细说明 --/Host/Engine/Service /Server【1】顶层元素元素是整个配置文件的根元素元素代表一个Engine元素以及一组与之相连的Connector元素。 【2】连接器 代表了外部客户端发送请求到特定Service的接口同时也是外部客户端从特定Service接收响应的接口。 【3】容器容器的功能是处理Connector接收进来的请求并产生对应的响应。Engine包含HostHost包含Context。一个 Engine组件可以处理Service中的所有请求一个Host组件可以处理发向一个特定虚拟主机的所有请求一个Context组件可以处理一个特定Web应用的所有请求。 三、Tomcat 都有哪些核心组件 【1】ServerServer元素在最顶层代表整个 Tomcat容器因此他必须是server.xml中唯一一个最外层的元素。一个Server元素可以有一个或多个Service元素。 Server port8005 shutdownSHUTDOWN /Server可以看到最外层有一个 元素shutdown属性表示关闭Server的指令port属性表示Server接收shutdown指令的端口号设置为-1可以禁掉该端口。Server 的主要任务就是提供一个接口让客户端能够访问到这个 Service集合同时维护它所包含的所有的 Service的生命周期包含如何初始化如何结束服务如何找到客户端要访问的 Service。 【2】Service在Connector和Engine外面包一层把它们组合在一起对外提供服务。一个Service可以包含多个Connector但是只能包含一个Engine其中Connector的作用是从客户端接收请求Engine的作用是处理接收进来的请求。 Server port8005 shutdownSHUTDOWNService nameCatalina/Service /Server如上图Server中包含一个名称为Catalina的Service。实际上Tomcat可以提供多个Service不同的Service监听不同的端口。 【3】Connector接收连接请求创建Request和 Response对象用于和请求端交换数据然后分配线程让Engine来处理这个请求并把产生的Request和Response对象传给Engine。通过配置 Connector可以控制请求 Service的协议及端口号。 Server port8005 shutdownSHUTDOWNService nameCatalinaConnector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 /Connector port8009 protocolAJP/1.3 redirectPort8443 //Service /Server通过配置第一个Connector客户端可以通过8080端口号协议访问Tomcat。其中protocol属性规定了请求的协议port规定了请求的端口号redirectPort表示当强制要求https而请求是 http时重定向至端口号为8443的ConnectorconnectionTimeout表示连接的超时时间。 在这个例子中Tomcat监听Http请求使用的是8080端口而不是正式的 80端口实际上在正式的生产环境中Tomcat也常常监听8080端口。而不是80端口。这是因为在生产环境中很少讲Tomcat直接对外开放接收请求而是在Tomcat和客户端之间加一层代理服务器如Nginx用于请求的转发、负载均衡、处理静态文件等通过代理服务器访问Tomcat时是在局域网中因为一般仍使用8080端口。 第二个配置Connector客户端可以通过8009端口使用AJP协议访问 Tomcat。AJP协议负责和其他的Http服务器如Apache建立连接在把 Tomcat与其他服务器集成时就需要用到这个连接器之所以使用 Tomcat和其他服务器集成是因为Tomcat可以用作Servlet/JSP容器但是对静态资源处理速度较慢不如Apache和IIS等HTTP服务器因此常常将 Tomcat和Apache等集成前者做Servlet容器后者处理静态资源而AJP协议便负责Tomcat与Apache的连接。Tomcat和Apache等集成的原理如下图 【4】EngineEngine 组件在Service组件有且只有一个Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收并处理并将完成的响应返回给Connector最终传递给客户端。前面说到Engine、Host和Context都是容器但是它们不是平行关系而是父子关系Engine包含HostHost包含Context。 Server port8005 shutdownSHUTDOWNService nameCatalinaConnector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 /Connector port8009 protocolAJP/1.3 redirectPort8443 /Engine nameCatalina defaultHostlocalhost/Engine/Service /Server其中name属性用于日志和错误信息在整个Server中应该是唯一的。defalutHost属性指定了默认的host名称当发往本机的请求指定的host名称不存在时一律使用defaultHost指定的host进行处理因此defaulthost的值必须与Engine中的一个Host组件的name属性值匹配。 【5】Engine和HostHost是Engine的子容器。Engine组件中可以内嵌1个或者多个Host组件每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个且其中一个的name必须与 Engine组件中的defaultHost属性相匹配。 【6】Host的作用Host虚拟主机的作用是运行多个Web应用一个Context代表一个Web应用并负责安装、展开、启动、结束每个Web应用。Host组件代表的虚拟主机对应服务器中一个网络名实体如www.test.com](https://links.jianshu.com/go?tohttp%3A%2F%2Fwww.test.com)或IP地址116.25.25.25为了使用户可以通过网络名连接Tomcat服务器这个名字应该在DNS服务器上注册。 客户端通常使用主机名来标识它们希望连接的服务器该主机名也会包含在 HTTP请求头中Tomcat从HTTP头中提取出主机名寻找名字匹配的主机。如果没有匹配请求会发送至默认的主机。因此默认主机不需要再DNS服务器中注册网络名因为任何与所有Host名称不匹配的请求都会路由至默认主机。 【7】Host的配置name属性指定虚拟主机的主机名一个Engine有且只有一个Host组件的name属性和Engine组件的 defaultHost属性相匹配一般情况下主机名需要是在DNS服务器中注册网络名但是Engine指定的defaultHost不需要。 Server port8005 shutdownSHUTDOWNService nameCatalinaConnector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 /Connector port8009 protocolAJP/1.3 redirectPort8443 /Engine nameCatalina defaultHostlocalhostHost namelocalhost appBasewebapps unpackWARstrue autoDeploytrue/Host/Engine/Service /ServerunpackWARs指定了是否将代表Web应用的WAR文件解压如果是true通过解压后的文件结构运行该Web应用如果是false直接使用WAR文件运行Web应用。 【8】ContextContext元素代表在虚拟主机上运行的一个Web应用。在后文中提到Context、应用或Web应用他们都代指Web应用每个Web应用基于WAR文件或WAR文件解压后对应的目录这里称为应用目录Context是Host的子容器每个Host都可以定义任意多的Context元素。元素的配置Context元素最重要的属性是 docBase和path此外reloadable属性也比较常用。 docBase指定了该Web应用使用war包路径或应用目录。需要注意的是在自动部署场景下配置文件位于xmlBase中docBase不在appBase目录中才需要指定如果docBase指定的war包或应用目录就在appBase中则不需要指定。因为Tomcat会自动扫描appBase中的war包和应用目录制定了反而造成问题。 path指定了访问该Web应用上下文路径当请求到来时Tomcat根据Web应用的path属性与 URL匹配程度来选择Web应用处理相应请求。例如Web 应用app1的path属性是/app1Web应用app2的path属性是/app2那么请求/app1/index.html会交由app1来处理而请求/app2/index.html会交由 app2来处理。如果一个Context元素的path属性为那么这个Context是虚拟主机的默认的Web应用当请求的uri与所有的path都不匹配时使用该默认Web应用来处理。 但是需要注意的是在自动部署场景配置文件位于xmlBase中不能指定path属性path属性由配置的文件的文件名WAR文件的文件名或应用目录的名称自动推导出来。如扫描Web应该时发现xmlBase目录下的app1.xml或appBase目录下的app1.WAR或app1应用目录则该Web用于的path属性是app1。如果名称不是app1而是ROOT则该Web应用时虚拟主机默认的Web应用此时path属性推导为。 reloadable属性指示tomcat是否在运行时监控在WEB-INF/classes和WEB-INF/lib目录下class文件的改动。如果值为true那么当class文件改动时会重新web应用的重新加载。在开发环境下reloadable设置为ture便于调试但是在生产环境中设置为true会给服务器带来性能压力因此reloadable参数的默认值为false。在该例子中docBase位于Host的appBase目录之外path属性没有指定而是根据app1.xml自动推导为app1。 Context docBaseD:\Program Files\app1.war reloadabletrue/Context若是自动部署即autoDeploytrue那么server.xml配置文件中没有Context元素的配置。这是因为Tomcat开启了自动部署Web应用没有在 server.xml中配置静态部署而是由Tomcat通过特定的规则自动部署。 四、Web 的自动部署 要开启Web应用的自动部署需要配置所在的虚拟主机配置的方式就是在配置Host元素的 deployOnStartup和autoDeploy属性。如果deployOnStartup和autoDeploy设置为true则tomcat启动自动部署当检测到新的Web应用或Web应用更新时会触发应用的部署或重新部署。 二者的主要区别在于 【1】deployeOnStartup为true时Tomcat在启动时检查Web应用且检测到所有的Web应用都试做新应用 【2】autoDeploy为true时Tomcat在运行时定期检查新的Web应用或Web应用的更新 通过配置deployOnStartup和autoDeploy可以开启虚拟主机自动部署Web应用实际上自动部署依赖于检查是否有新的或更改过的Web应用而Host元素中的appBase和xml配置设置了检查Web应用更新的目录。 其中appBase属性指定Web应用所在的目录默认值是webapps这是一个相对路径代表 Tomcat根目录下的webapps文件夹。xmlBase属性指定Web应用的XML配置文件所在的目录默认值为conf/engine_nameengine_name例如上面例子中主机localhost的xmlBase的默认值是$TOMCAT_HOME/conf/Catalina/localhost。 五、appBase 和 docBase的区别 【1】appBase这个目录下面的子目录将自动被部署为应用且war文件将被自动解压缩并部署为应用默认为tomcat下webapps目录。 【2】docBase指定需要关联的项目自动解压并部署到appBase目录下。项目的名称由path属性决定。 先部署 需要注意docBase所在的文件或者war包必须存在。否则项目启动找不到对应的目录。此时文件解压到appBase目录下根据path属性决定解压后的文件名。 若采用了Host namelocalhost appBasewebapp autoDeploytrue 配置那么appBase目录下的应用目录将会再次部署。此时项目是部署了两遍。解决办法设置autoDeployfalse。 六、Tomcat 顶层架构小结 【1】Tomcat中只有一个Server一个Server可以有多个Service一个Service可以有多个 Connector和一个Container 【2】Server掌管着整个Tomcat的生死大权 【3】Service是对外提供服务的 【4】Connector用于接受请求并将请求封装成Request和Response来具体处理 【5】Container用于封装和管理Servlet以及具体处理Request请求 知道了整个Tomcat顶层的分层架构和各个组件之间的关系以及作用对于绝大多数的开发人员来说 Server和Service对我们来说确实很远而我们开发中绝大部分进行配置的内容是属于Connector和 Container的所以接下来介绍一下Connector和Container。 七、Connector 和 Container的微妙关系 由上述内容我们大致可以知道一个请求发送到Tomcat之后首先经过Service然后会交给我们的 ConnectorConnector用于接收请求并将接收的请求封装为Request和Response来具体处理Request和Response封装完之后再交由Container进行处理Container处理完请求之后再返回给 Connector最后在由Connector通过Socket将处理的结果返回给客户端这样整个请求的就处理完了 Connector最底层使用的是Socket来进行连接的Request和Response是按照HTTP协议来封装的所以Connector同时需要实现TCP/IP协议和HTTP协议。Tomcat既然处理请求那么肯定需要先接收到这个请求接收请求这个东西我们首先就需要看一下Connector。 八、Container 架构分析 Container用于封装和管理Servlet以及具体处理Request请求在Connector内部包含了4个子容器结构图如下 4个子容器的作用分别是 【1】Engine引擎用来管理多个站点一个Service最多只能有一个Engine 【2】Host代表一个站点也可以叫虚拟主机通过配置Host就可以添加站点 【3】Context代表一个应用程序对应着平时开发的一套程序或者一个WEB-INF目录以及下面的web.xml文件 【4】Wrapper每一Wrapper封装着一个Servlet 下面找一个Tomcat的文件目录对照一下如下图所示 Context和Host的区别是Context表示一个应用我们的Tomcat中默认的配置下webapps下的每一个文件夹目录都是一个Context其中ROOT目录中存放着主应用其他目录存放着子应用而整个 webapps就是一个 Host站点。我们访问应用Context的时候如果是ROOT下的则直接使用域名就可以访问例如www.ledouit.com如果是Hostwebapps下的其他应用则可以使用 www.ledouit.com/docs 进行访问当然默认指定的根应用ROOT是可以进行设定的只不过Host站点下默认的主营用是ROOT目录下的。 看到这里我们知道Container是什么但是还是不知道Container是如何进行处理的以及处理完之后是如何将处理完的结果返回给Connector的。 十、Container 如何处理请求的 Container处理请求是使用Pipeline-Valve管道来处理的Valve是阀门之意Pipeline-Valve是责任链模式责任链模式是指在一个请求处理的过程中有很多处理者依次对请求进行处理每个处理者负责做自己相应的处理处理完之后将处理后的请求返回再让下一个处理着继续处理。 但是Pipeline-Valve使用的责任链模式和普通的责任链模式有些不同区别主要有以下两点 【1】每个Pipeline都有特定的Valve而且是在管道的最后一个执行这个Valve叫做BaseValveBaseValve是不可删除的 【2】在上层容器的管道的BaseValve中会调用下层容器的管道。 我们知道Container包含四个子容器而这四个子容器对应的BaseValve分别在StandardEngineValve、StandardHostValve、StandardContextValve、StandardWrapperValve。Pipeline的处理流程图如下 【1】Connector在接收到请求后会首先调用最顶层容器的Pipeline来处理这里的最顶层容器的 Pipeline就是EnginePipelineEngine的管道 【2】在Engine的管道中依次会执行EngineValve1、EngineValve2等等最后会执行 StandardEngineValve在StandardEngineValve中会调用Host管道然后再依次执行Host的 HostValve1、HostValve2等最后在执行StandardHostValve然后再依次调用Context的管道和 Wrapper的管道最后执行到StandardWrapperValve。 【3】当执行到StandardWrapperValve的时候会在StandardWrapperValve中创建FilterChain并调用其 doFilter方法来处理请求这个FilterChain包含着我们配置的与请求相匹配的Filter和Servlet其 doFilter方法会依次调用所有的Filter的doFilter方法和Servlet的service方法这样请求就得到了处理 【4】当所有的Pipeline-Valve都执行完之后并且处理完了具体的请求这个时候就可以将返回的结果交给Connector了Connector在通过Socket的方式将结果返回给客户端。 十一、tomcat 容器是如何创建 servlet类实例用到了什么原理 当容器启动时会读取在webapps目录下所有的web应用中的web.xml文件然后对xml文件进行解析并读取servlet注册信息。然后将每个应用中注册的servlet类都进行加载并通过反射的方式实例化。有时候也是在第一次请求时实例化在servlet注册时加上如果为正数则在一开始就实例化如果不写或为负数则第一次请求实例化。 十二、共享 session处理 目前的处理方式有如下几种 【1】使用Tomcat本身的Session复制功能。参考http://ajita.iteye.com/blog/1715312Session复制的配置方案的有点是配置简单缺点是当集群数量较多时Session复制的时间会比较长影响响应的效率 【2】使用第三方来存放共享Session目前用的较多的是使用memcached来管理共享Session借助于memcached-sesson-manager来进行Tomcat的Session管理。参考http://ajita.iteye.com/blog/1716320使用MSM管理Tomcat集群session 【3】使用黏性session的策略对于会话要求不太强不涉及到计费失败了允许重新请求下等的场合同一个用户的session可以由nginx或者apache交给同一个Tomcat来处理这就是所谓的 session sticky策略目前应用也比较多。参考http://ajita.iteye.com/blog/1848665tomcat session stickyNginx默认不包含session sticky模块需要重新编译才行windows下我也不知道怎么重新编译优点是处理效率高多了缺点是强会话要求的场合不合适。 十三、关于 Tomcat 的 session数目 这个可以直接从Tomcat的web管理界面去查看即可或者借助于第三方工具Lambda Probe来查看它相对于Tomcat自带的管理稍微多了点功能但也不多 十四、Tomcat 一个请求的完整过程 首先DNS解析机器一般是ng服务器ip地址然后ng根据server的配置寻找路径为yy/的机器列表ip和端口。最后 选择其中一台机器进行访问。下面为详细过程 【1】请求被发送到本机端口8080被在那里侦听的Coyote HTTP/1.1 Connector获得 【2】Connector把该请求交给它所在的Service的Engine来处理并等待来自Engine的回应 【3】Engine获得请求localhost/yy/index.jsp匹配它所拥有的所有虚拟主机Host 【4】Engine匹配到名为 localhost 的 Host即使匹配不到也把请求交给该 Host处理因为该Host被定义为该 Engine的默认主机 【5】localhost Host获得请求/yy/index.jsp匹配它所拥有的所有Context 【6】Host匹配到路径为/yy的Context如果匹配不到就把该请求交给路径名为”“的Context去处理 【7】path”/yy”的Context获得请求/index.jsp在它的mapping table中寻找对应的servlet 【8】Context匹配到URL PATTERN为*.jsp的servlet对应于JspServlet类 【9】构造HttpServletRequest对象和HttpServletResponse对象作为参数调用JspServlet的doGet或 doPost方法 【10】Context把执行完了之后的HttpServletResponse对象返回给Host 【11】Host把HttpServletResponse对象返回给Engine 【12】Engine把HttpServletResponse对象返回给Connector 【13】Connector把HttpServletResponse对象返回给客户browser 十五、Tomcat 工作模式 Tomcat是一个JSP/Servlet容器。其作为Servlet容器有三种工作模式独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类 【1】Tomcat作为应用程序服务器请求来自于前端的web服务器这可能是Apache, IIS, Nginx等 【2】Tomcat作为独立服务器请求来自于web浏览器 Tomcat的工作一般分为三种 【1】bio 传统的Java I/O操作同步且阻塞I/O一个线程处理一个请求并发量高时线程数较多浪费资源已经很少有人在使用 【2】nio JDK1.4开始支持同步阻塞或同步非阻塞IO可以通过少量的线程来处理大量的请求从Tomcat 8版本开始默认就是这种模式 【3】apr 以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作从而大大地提高Tomcat对静态文件的处理性能企业中使用较多 十六、如何对 Tomcat 进行优化 【1】关闭Manager管理页面默认已经关闭 【2】关闭host-mangent管理页面默认已经关闭 【3】对Tomcat日志进行分割 【4】定义Tomcat 404错误返回的页面 【5】对JVM进行优化 【6】对Tomcat线程池进行优化 十七、如何对 Tomcat 进行优化 【1】关闭Manager管理页面默认已经关闭 【2】关闭host-mangent管理页面默认已经关闭 【3】对Tomcat日志进行分割 【4】定义Tomcat 404错误返回的页面 【5】对JVM进行优化 【6】对Tomcat线程池进行优化 【7】更改Tomcat的工作的模式
http://www.w-s-a.com/news/517415/

相关文章:

  • 网站的需求分析都有哪些内容济南营销型网站建设团队
  • 怎么选择优秀的网站建设公司生鲜网站开发
  • 如何编写网站建设销售的心得网站的权限管理怎么做
  • 网站业务员好做吗无忧网站优化
  • 网站随机代码网站建设费 账务处理
  • 商洛网站建设哪家好网站建设 织梦者
  • 怎么创建收费网站宁夏住房和城乡建设部网站
  • 怎么确认网站是什么语言做的用php和mysql做网站
  • 安徽做网站的公司有哪些星子网络公司
  • 肥西县重点工程建设管理局网站wordpress界面菜单怎么弄
  • 宁夏网站开发设计说明书wordpress主题背景图片
  • 同一个阿里云可以做两个网站吗织梦 帝国 学校网站
  • 城阳网站建设培训网站后台怎么上传文件
  • 重庆茂尔建设集团有限公司网站网页制作教程软件
  • 金湖建设工程质量监督网站高端网站建设公司哪里济南兴田德润实惠吗
  • 站酷设计网站官网入口文字设计seo网站推广工具
  • 专业移动网站建设网站建设软件dw
  • 摄影网站设计思想视觉传达毕业设计作品网站
  • 需要优化的网站有哪些设计装修app
  • 数据型网站建设东莞好的网站国外站建设价格
  • 网络营销方法有哪些举例seo应用领域有哪些
  • 建设银行官方网站官网做网站的专业叫什么
  • 矿区网站建设濮阳做网站的公司有哪些
  • 有什么网站可以自己做书甘肃建设厅网站首页
  • 门户网站建设哪专业怎么把自己做的网站登录到网上
  • 如何做网站小编餐饮业手机php网站
  • 备案 网站商城网站设计公司排名
  • 汕头做网站优化公司seo软件简单易排名稳定
  • 如何做众筹网站微网站设计平台
  • 富平做网站十堰优化seo