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

网络公司网站设计方案ppt网站做的好的

网络公司网站设计方案ppt,网站做的好的,专门做顶账房的网站,上小学网站建设Tomcat介绍 Tomcat是Apache Software Foundation#xff08;Apache软件基金会#xff09;开发的一款开源的Java Servlet 容器。它是一种Web服务器#xff0c;用于在服务器端运行Java Servlet和JavaServer Pages (JSP)技术。它可 以为Java Web应用程序提供运行环境#x…Tomcat介绍 Tomcat是Apache Software FoundationApache软件基金会开发的一款开源的Java Servlet 容器。它是一种Web服务器用于在服务器端运行Java Servlet和JavaServer Pages (JSP)技术。它可 以为Java Web应用程序提供运行环境并通过HTTP协议处理客户端请求。Tomcat也支持多种Web应 用程序开发技术例如JavaServer Faces (JSF)、Java Persistence API (JPA)等。总的来说Tomcat 是一款高效、稳定和易于使用的Web服务器。 Tomcat核心 Http服务器Servlet容器 web应用部署的三种方式 1.拷贝到webapps目录下 //指定appBase Host namelocalhost appBasewebapps unpackWARstrue autoDeploytrue 2.server.xml 的Context标签下配置Context Context docBaseD:\mvc path/mvc reloadabletrue / path:指定访问该Web应用的URL入口context-path docBase:指定Web应用的文件路径可以给定绝对路径也可以给定相对于的appBase属性的相对路径。 reloadable:如果这个属性设为truetomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动如果监测到有class文件被更新的服务器会自动重新加载Web应用。 3.在$CATALINA_BASE/conf/[enginename]/[hostname]/ 目录下默认conf/Catalina/localhost创建xml文 件文件名就是contextPath。 比如创建mvc.xmlpath就是/mvc Context docBaseD:\mvc reloadabletrue /Tomcat整体架构分析 Tomcat 要实现 2 个核心功能 处理 Socket 连接负责网络字节流与 Request 和 Response 对象的转化。加载和管理 Servlet以及具体处理 Request 请求。 因此 Tomcat 设计了两个核心组件连接器Connector和容器Container来分别做这两件事情。 连接器负责对外交流容器负责内部处理。 Tomcat架构图 Tomcat的架构分为以下几个部分 ConnectorTomcat的连接器用于接收请求并将其发送给容器。ContainerTomcat的容器负责管理Servlet、JSP和静态资源的生命周期。EngineTomcat的引擎管理容器的生命周期和分配请求。HostTomcat的主机可以管理多个Web应用程序。ContextTomcat的上下文用于管理单个Web应用程序的配置信息。ServletTomcat的Servlet负责处理请求并生成响应。 总的来说Tomcat的架构是一个分层的架构每一层都有其自己的功能和职责。该架构可以提高 Tomcat的性能和可维护性并使得Tomcat可以支持大量的Java Web应用程序。 Tomcat核心组件详解 Server 组件 指的就是整个 Tomcat 服务器包含多组服务Service负责管理和启动各个Service同时监听 8005 端口发过来的 shutdown 命令用于关闭整个容器 。 Service组件 每个 Service 组件都包含了若干用于接收客户端消息的 Connector 组件和处理请求的 Engine 组件。 Service 组件还包含了若干 Executor 组件每个 Executor 都是一个线程池它可以为 Service内所有组件提供线程池执行任务。 Tomcat 内可能有多个 Service这样的设计也是出于灵活性的考虑。通过在 Tomcat 中配置多个 Service可以实现通过不同的端口号来访问同一台机器上部署的不同应用。 连接器Connector组件 Tomcat 与外部世界的连接器监听固定端口接收外部请求传递给 Container并将Container处理的结果返回给外部。连接器对 Servlet 容器屏蔽了不同的应用层协议及 I/O 模型无论是 HTTP 还是 AJP在容器中获取到的都是一个标准的 ServletRequest 对象。 容器Container组件 容器顾名思义就是用来装载东西的器具在 Tomcat 里容器就是用来装载 Servlet 的。 Tomcat 通过一种分层的架构使得 Servlet 容器具有很好的灵活性。Tomcat 设计了 4 种容器分别是 Engine、Host、Context 和 Wrapper。这 4 种容器不是平行关系而是父子关系。 Engine引擎Servlet 的顶层容器用来管理多个虚拟站点一个 Service 最多只能有一个 EngineHost虚拟主机负责 web 应用的部署和 Context 的创建。可以给 Tomcat 配置多个虚拟主机地址而一个虚拟主机下可以部署多个 Web 应用程序ContextWeb 应用上下文包含多个 Wrapper负责 web 配置的解析、管理所有的 Web 资源。一个Context对应一个 Web 应用程序。Wrapper表示一个 Servlet最底层的容器是对 Servlet 的封装负责 Servlet 实例的创建、执行和销毁。 请求定位 Servlet 的过程 Tomcat 是用 Mapper 组件来完成这个任务的。Mapper 组件的功能就是将用户请求的 URL 定位 到一个 Servlet它的工作原理是Mapper 组件里保存了 Web 应用的配置信息其实就是容器组件 与访问路径的映射关系比如 Host 容器里配置的域名、Context 容器里的 Web 应用路径以及 Wrapper 容器里 Servlet 映射的路径你可以想象这些配置信息就是一个多层次的 Map。当一个请求 到来时Mapper 组件通过解析请求 URL 里的域名和路径再到自己保存的 Map 里去查找就能定 位到一个 Servlet。一个请求 URL 最后只会定位到一个 Wrapper 容器也就是一个 Servlet。 Tomcat架构设计分析 Tomcat连接器需要实现的功能 监听网络端口。接受网络连接请求。读取请求网络字节流。根据具体应用层协议HTTP/AJP解析字节流生成统一的 Tomcat Request 对象。将 Tomcat Request 对象转成标准的 ServletRequest。调用 Servlet 容器得到 ServletResponse。将 ServletResponse 转成 Tomcat Response 对象。将 Tomcat Response 转成网络字节流。将响应字节流写回给浏览器。 分析连接器详细功能列表我们会发现连接器需要完成 3 个高内聚的功能 网络通信。应用层协议解析。Tomcat Request/Response 与 ServletRequest/ServletResponse 的转化。 因此 Tomcat 的设计者设计了 3 个组件来实现这 3 个功能分别是 EndPoint、Processor 和 Adapter。 EndPoint 负责提供字节流给 ProcessorProcessor 负责提供 Tomcat Request 对象给 AdapterAdapter 负责提供 ServletRequest 对象给容器。 由于 I/O 模型和应用层协议可以自由组合比如 NIO HTTP 或者 NIO2 AJP。Tomcat 的设计者将网络通信和应用层协议解析放在一起考虑设计了一个叫 ProtocolHandler 的接口来封装这两种变化点。 连接器 ProtocolHandler 连接器用 ProtocolHandler 来处理网络连接和应用层协议包含了 2 个重要部件EndPoint 和 Processor。 连接器用 ProtocolHandler 接口来封装通信协议和 I/O 模型的差异ProtocolHandler 内部又分为 EndPoint 和 Processor 模块EndPoint 负责底层 Socket 通信Proccesor 负责应用层协议解析。连接器通过适配器 Adapter 调用容器。 EndPoint EndPoint 是通信端点即通信监听的接口是具体的 Socket 接收和发送处理器是对传输层的抽象因此 EndPoint 是用来实现 TCP/IP 协议的。 EndPoint 是一个接口对应的抽象实现类是 AbstractEndpoint而 AbstractEndpoint 的具体子类比如在 NioEndpoint 和 Nio2Endpoint 中有两个重要的子组件Acceptor 和 SocketProcessor。其中 Acceptor 用于监听 Socket 连接请求。SocketProcessor 用于处理接收到的 Socket 请求它实现 Runnable 接口在 Run 方法里调用协议处理组件 Processor 进行处理。为了提高处理能力SocketProcessor 被提交到线程池来执行而这个线程池叫作执行器Executor)。 Processor Processor 用来实现 HTTP/AJP 协议Processor 接收来自 EndPoint 的 Socket读取字节流解析成 Tomcat Request 和 Response 对象并通过 Adapter 将其提交到容器处理Processor 是对应用层协议的抽象。 Processor 是一个接口定义了请求的处理等方法。它的抽象实现类 AbstractProcessor 对一些协议共有的属性进行封装没有对方法进行实现。具体的实现有 AJPProcessor、HTTP11Processor等这些具体实现类实现了特定协议的解析方法和请求处理方式。 Adapter 由于协议不同客户端发过来的请求信息也不尽相同Tomcat 定义了自己的 Request 类来“存放”这些请求信息。ProtocolHandler 接口负责解析请求并生成 Tomcat Request 类。但是这个 Request 对象不是标准的 ServletRequest也就意味着不能用 Tomcat Request 作为参数来调用容 器。Tomcat 设计者的解决方案是引入 CoyoteAdapter这是适配器模式的经典运用连接器调用CoyoteAdapter 的 Sevice 方法传入的是 Tomcat Request 对象CoyoteAdapter 负责将 Tomcat Request 转成 ServletRequest再调用容器的 Service 方法。 Pipeline-Valve 责任链模式设计 连接器中的 Adapter 会调用容器的 Service 方法来执行 Servlet最先拿到请求的是Engine 容器Engine 容器对请求做一些处理后会把请求传给自己子容器 Host 继续处理依次类推最后这个请求会传给 Wrapper 容器Wrapper 会调用最终的 Servlet 来处理。 Vavle接口设计 理解它的设计第一步就是阀门设计。Valve 表示一个处理点比如权限认证和记录日志。 public interface Valve { public Valve getNext(); public void setNext(Valve valve); public void invoke(Request request, Response response) throws IOException,ServletException; }Pipline接口设计 由于Pipline是为容器设计的所以它在设计时加入了一个Contained接口, 就是为了制定当前Pipline所属的容器 public interface Pipeline extends Contained {// 基础的处理阀 public Valve getBasic(); public void setBasic(Valve valve);// 对节点阀门增删查 public void addValve(Valve valve); public Valve[] getValves(); public void removeValve(Valve valve);// 获取第一个节点遍历的起点所以需要有这方法 public Valve getFirst();// 是否所有节点阀门都支持处理Servlet3异步处理 public boolean isAsyncSupported();// 找到所有不支持Servlet3异步处理的阀门 public void findNonAsyncValves(SetString result); }Pipeline 中维护了 Valve 链表Valve 可以插入到 Pipeline 中对请求做某些处理。整个调用链的触发是 Valve 来完成的Valve 完成自己的处理后调用 getNext.invoke() 来触发下一个 Valve 调用。每一个容器都有一个 Pipeline 对象只要触发这个 Pipeline 的第一个 Valve这个容器里Pipeline 中的 Valve 就都会被调用到。Basic Valve 处于 Valve 链表的末端它是 Pipeline 中必不可少的一个 Valve负责调用下层容器的 Pipeline 里的第一个 Valve。 Valve 和 Filter 的区别 Valve 是 Tomcat 的私有机制与 Tomcat 的基础架构 /API 是紧耦合的。Servlet API 是公有的标准所有的Web 容器包括 Jetty 都支持 Filter 机制。Valve 工作在 Web 容器级别拦截所有应用的请求而 Servlet Filter 工作在应用级别只能拦截某个 Web 应 用的所有请求。 Tomcat生命周期设计 如果想让Tomcat能够对外提供服务我们需要创建、组装并启动Tomcat组件在服务停止的时候我们还需要释放资源销毁Tomcat组件这是一个动态的过程。Tomcat 需要动态地管理这些组件的生命周期。 一键式启停LifeCycle 接口 系统设计就是要找到系统的变化点和不变点。这里的不变点就是每个组件都要经历创建、初始化、启动这几个过程这些状态以及状态的转化是不变的。而变化点是每个具体组件的初始化方法也就是启动方法是不一样的。因此我们把不变点抽象出来成为一个接口这个接口跟生命周期有关叫作 LifeCycle。LifeCycle 接口里应该定义这么几个方法init()、start()、stop() 和 destroy()每个具体的组件去实现这些方法。 public interface Lifecycle { /** 第1类针对监听器 **/ // 添加监听器 public void addLifecycleListener(LifecycleListener listener); // 获取所有监听器 public LifecycleListener[] findLifecycleListeners(); // 移除某个监听器public void removeLifecycleListener(LifecycleListener listener);/** 第2类针对控制流程 **/ // 初始化方法 public void init() throws LifecycleException; // 启动方法 public void start() throws LifecycleException; // 停止方法和start对应 public void stop() throws LifecycleException; // 销毁方法和init对应 public void destroy() throws LifecycleException;/** 第3类针对状态 **/ // 获取生命周期状态 public LifecycleState getState(); // 获取字符串类型的生命周期状态 public String getStateName(); }在父组件的 init() 方法里需要创建子组件并调用子组件的 init() 方法。同样在父组件的 start() 方法里也需要调用子组件的 start() 方法因此调用者可以无差别的调用各组件的 init() 方法和 start() 方法这就是组合模式的使用并且只要调用最顶层组件也就是 Server 组件的 init() 和 start() 方法整个 Tomcat 就被启动起来了。 可扩展性LifeCycle 事件 因为各个组件 init() 和 start() 方法的具体实现是复杂多变的比如在 Host 容器的启动方法里需要扫描 webapps 目录下的 Web 应用创建相应的 Context 容器如果将来需要增加新的逻辑直接修改 start() 方法这样会违反开闭原则那如何解决这个问题呢开闭原则说的是为了扩展系统的功能你不能直接修改系统中已有的类但是你可以定义新的类。组件的 init() 和 start() 调用是由它的父组件的状态变化触发的上层组件的初始化会触发子组件的初始化上层组件的启动会触发子组件的启动因此我们把组件的生命周期定义成一个个状态把状态的转变看作是一个事件。而事件是有监听器的在监听器里可以实现一些逻辑并且监听器也可以方便的添加和删除这就是典型的观察者模式。 具体来说就是在 LifeCycle 接口里加入两个方法添加监听器和删除监听器。 重用性LifeCycleBase 抽象基类 有了接口我们就要用类去实现接口。一般来说实现类不止一个不同的类在实现接口时往往会有一些相同的逻辑如果让各个子类都去实现一遍就会有重复代码。那子类如何重用这部分逻辑呢 其实就是定义一个基类来实现共同的逻辑然后让各个子类去继承它就达到了重用的目的。而基类中往往会定义一些抽象方法所谓的抽象方法就是说基类不会去实现这些方法而是调用这些方法来实现骨架逻辑。抽象方法是留给各个子类去实现的并且子类必须实现否则无法实例化。 Tomcat 定义一个基类 LifeCycleBase 来实现 LifeCycle 接口把一些公共的逻辑放到基类中去比如生命状态的转变与维护、生命周期事件的触发以及监听器的添加和删除等而子类就负责实现自己的初始化、启动和停止等方法。为了避免跟基类中的方法同名我们把具体子类的实现方法改个名字在后面加上 Internal叫 initInternal()、startInternal() 等。
http://www.yutouwan.com/news/178799/

相关文章:

  • 做网站那个搜索引擎好WordPress中文标题不显示
  • 网站建设与维护大作业河南省建设厅专业业务系统网站
  • 织梦搞笑图片网站源码网站设计价钱
  • 企业营销型网站建设的可行性分析网络营销方式有哪些分类
  • 网站建设步骤图项目管理软件开发案例
  • 大型做网站记事本做网站怎么加图片
  • wdcp创建多个网站网站建设贰金手指下拉贰壹
  • 佛山乐从网站建设网站开发的就业前景如何
  • 汤原建设局网站心理咨询网站
  • 怎么提升网站的流量吗网站开发顶岗实习报告
  • 建站平台 绑定域名建网站必须要服务器吗
  • 网络优化公司网站代码网站建设中网站制作包括哪些内容
  • 律师做几个网站wordpress qq邮件订阅
  • 福州仓前网站建设做网站需要什么专业
  • 河南省做网站的公司东阿聊城做网站的公司
  • 如何进行网页设计和网站制作 163com箱登录
  • app开发企业网站建设仿58网站源码
  • 做的好的商城网站设计网站建站行业新闻
  • 中国黑色网站模板天津的网站建设公司
  • 四川省住房和城乡建设厅网站不见了宝安公司网站建设比较好的
  • 深圳做棋牌网站建设哪家服务好网站被人抄袭怎么办
  • 郑州网站建设与设计网址大全2345色综合导航
  • 平面设计网站中文中小学校园网站开发技术
  • 国内美食网站欣赏做网站卖什么软件
  • o2o网站开发价格抚州公司做网站
  • 外贸电子网站建设注册电气工程师考试科目
  • 河南省建设监理协会官网站wordpress还是自己写
  • 西安门户网站建设高端网站定制
  • 中山网站专业制作家里电脑如何做网站
  • 衡阳网站开发有哪些公司成立公司股权怎么分配