Web服务器之Tomcat的相关说明(Web访问中的角色与协议问题和JavaWeb项目的程序结构问题)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web服务器之Tomcat的相关说明(Web访问中的角色与协议问题和JavaWeb项目的程序结构问题)相关的知识,希望对你有一定的参考价值。

1、C/S架构和B/S架构的概念:

a、C/S架构:

-  C/S,Client/Server,客户端/服务器,客户端需要安装专用的客户端软件。客户端是针对某以具体业务专门开发的软件。

-  由于客户端是专用的软件,所以客户端程序一般也具有对具体业务进行处理的能力。从而减轻对服务端的处理压力,使得服务端的运算速度更快,对客户端的响应更快。

-  也正是由于客户端是需要专门安装的专用软件,所以导致C/S架构的系统也出现了致命的问题:版本升级成本异常地高。无论是由于客户端软件本身功能的升级,或者是由于服务端的升级导致客户端也必须进行升级,无论什么原因导致客户端需要升级,每一个客户端机器上都必须先获取到新版本软件,再将老版本进行卸载替换。C/S架构系统的每一次客户端升级,都需要企业为之付出人力、物力和财力上的成本代价。


b、B/S架构:

-  B/S,Browser/Server,浏览器/服务器。B/S架构,其实也是一种特殊的C/S架构,只不过,这个Client特指的是浏览器。

-  对于B/S架构的系统,需要客户端安装有浏览器,那么客户端就可以访问服务器。而整个系统的升级,只需要升级服务器端程序即可。所以,B/S架构的系统最大的优点就是不存在客户端升级问题。

-  由于客户端不是专门针对某一具体业务而设计,是一个通用的客户端,所以客户端几乎没有任何对具体业务进行处理运算的能力。而对于具体业务的处理压力,全部加在了服务端,从而导致服务器程序运算速度降低,对客户端的响应速度降低,影响了客户体验。

-  另外,B/S架构系统还存在一个问题:浏览器兼容问题。虽然客户端只需要一个浏览器即可访问服务端,但由于现在浏览器品牌、版本很多,而其实现技术千差万别,所以导致服务端需要想办法兼容各种浏览器版本。这无形中又增加了服务器端的压力。


2、Web访问中的角色与协议:

-  Web访问中的角色与协议示意图:(角色有4个,浏览器,Web服务器,服务器端程序和DB;协议有3个,HTTP协议,Servlet协议,JDBC协议。)

技术分享

-  所谓协议,即是规范、规则,是通信双方事先的约定。

-  HTTP协议要求,通行双方,即浏览器与服务器双方,都需要按照指定的格式发出请求与响应。对方按照协议,即事先的约定,对对方发送来的信息进行解析。

-  Servlet协议要求,若程序员要开发完成某一个具体业务的服务端程序,则必须实现Servlet接口,使用ServletAPI进行数据传递。

-  JDBC协议要求,服务器端程序若要连接并操作数据库,则需要按照JDBC协议中的规定的方式(接口方法)获取DB连接,进行SQL的执行、进行结果的获取。而JDBC协议(接口)的实现,均由数据库厂商来完成。放于数据库厂商提供的数据库驱动jar包即可。所以,我们连接不同的数据库,就需要导入不同的数据库驱动jar包。

-  此外,还有JavaEE协议:Servlet协议是JavaEE协议里的一部分。JavaEE协议即进行JavaWeb开发的一套API,除了包含Servlet协议外,JSTL协议、JPA协议等。目前使用较多的版本是JavaEE5.0。JavaEE5.0包含的是Servlet2.5协议。JavaEE6.0包含的是Servlet3.0协议。而Servlet2.5与Servlet3.0版本的一个很大的区别在于:Servlet3.0支持对Servlet、Filter、Listener类的注解式开发。


3、Web服务器之Tomcat的相关说明:

a、Tomcat的简单认识:

-  实际应用中实现了JavaEE规范的Web浏览器有很多,如Oracle的WebLogic(需购买)、IBM的WebSphere(需购买)、RedHat公司的JBoss(不支持Servlet规范,开源免费)等,这些都称为重量级服务器。

-  Apache的Tomcat(Apache软件基金会的一个开源项目,可以在其官网http://www.apache.org/中下载),只是JavaEE规范中Servlet/JSP规范的实现者(也包括EL和WebSocket协议 ),所以其实是一个轻量级的服务器,它是开源免费的。Tomcat也称之为Web容器,或者是Servlet容器,但是不能够称之为JavaEE容器。

-  官网中的Tomcat9.0安装包和源码包下载图片截取:

技术分享


-  引申出的一个概念:JCP(官网为http://jcp.org),Java Community Process,Java审核社区,是一个开放的国际组织,主要负责规范、监督Java的发展,其他个人、企业、机构等制定的Java规范,必须通过JCP审核后,才能够被认定为Java规范,JCP的创始者为SUN公司。

b、Tomcat的安装与目录结构:

-  Tomcat的安装,即将其解压缩包即可,无需向导式的安装过程。解压缩后可以对Tomcat的根目录更名。

c、Tomcat的运行环境配置:

-  Tomcat安装完毕后,需要安装JDK或者JRE。对于Tomcat5以及以前版本,要求必须安装JDK,而对于Tomcat6及其之后版本可以只安装JRE而不需要安装JDK。

-  在安装JDK时配置系统环境变量JAVA_HOME,将其bin目录添加到path变量即可。(Tomcat不需要其他配置)

技术分享

技术分享

-  如果没有配置系统环境变量,则在命令行中会显示如下错误:

技术分享


d、Tomcat的启动和访问:

-  在设置完前面的环境变量之后,Tomcat即可进行启动。

-  进入命令行窗口的Tomcat目录的bin目录下,执行startup.bat命令,即可看到Tomcat的启动过程。当然,也可以在Window窗口中,找到Tomcat目录的bin目录,直接双击startup.bat文件启动Tomcat。(shutdown.bat文件为关闭Tomcat)

-  可以通过在浏览器地址栏上键入localhost:8080来访问Tomcat。

技术分享

技术分享


4、JavaEE规范要求JavaWeb项目的程序结构是:

-  在当前应用所在目录中可以直接存放资源文件,如.html、.jpg等,也可以将其放入到子目录中访问。

-  若Web项目中包含Serlvet代码,则Servlet的字节码文件必须存放在当前应用所在子目录/WEB-INF/classes中。

-  在/WEB-INF/下可以包含web.xml配置文件,定义请求URI与所要访问的Serlvet间的映射关系、指定欢迎页面等。

-  在/WEB-INF下可以包含子目录lib,用于存放当前Web应用所使用的外部jar包。

-  在/WEB-INF/目录中的资源不能被浏览器直接访问。

-  如下所示:

--- 项目根目录

   ---html、jsp、js、css、jpg等资源文件

   ---子目录

       ---相关资源文件

   ---WEB-INF

       ---classes

       ---lib

       ---web.xml

       ---html、jsp等资源文件


5、解读server.xml文件:

-  Tomcat服务器是由一系列可配置的组件构成,Tomcat的组件可以在<CALTALINA_HOME>(即Tomcat安装的根目录)/conf/server.xml文件中进行配置,每个Tomcat组件和server.xml文件中的一种配置元素向对应,下面就一些常用的元素做介绍:

a、<Server>元素:代表整个Catalina Servlet容器,它是Tomcat实例的顶层元素,可以包含一个或者多个<Service>元素。

b、<Service>元素--不同端口部署不同应用则复制多个Service。(包含一个<Engine>元素,以及一个或者多个<Connection>元素,这些<Connection>元素共享一个<Engine>元素。)

c、<Connector>元素:代表和客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果。

d、<Engine>元素--虚拟主机:每个<Service>元素只能包含一个<Engine>元素、<Engine>元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求。

e、<Host>元素:一个<Engine>元素中可以包含多个<Host>元素,每个<Host>元素定义了一个虚拟主机,它可以包含一个或者多个Web应用。

f、<Context>元素--同一端口部署多个应用则复制多个Context:每个 <Context>元素代表运行虚拟主机上的单个Web应用,一个<Host>元素中可以包含多个<Context>元素。

-  在tomcat中的server.xml元素详解:

技术分享


6、Tomcat中的context.xml说明、Context标签讲解:

a、在tomcat5.5之前:Context体现在/conf/server.xml中的Host里的<Context>元素中,它由Context接口定义。每个<Context>元素代表了运行在虚拟主机上的单个Web应用。

-  server.xml文件,如<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true"> 。

-  path表示要创建的虚拟目录,它指定访问Web应用的上下文根,如http://localhost:8080/kaka/...;docBase:为应用程序的路径或者WAR文件存放的路径,可以是绝对路径,也可以是相对路径(相对路径是相对于<Host>)。

-  reloadable:如果这个属性设置为true,Tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录class文件的改变,如果监视到有class文件被更新,服务器自动重新加载Web引用,这样我们可以在不重启tomcat的情况下改变应用程序。

-  一个Host元素中嵌套任意多个的Context元素。每个Context的路径必须是唯一的,由path属性定义。另外,你必须定义一个path=""的Context,这个Context称之为该虚拟主机的缺省web应用,用来处理那些不能够匹配任何Context的Context路径的请求。


b、在tomcat5.5之后:

-  不推荐在server.xml中进行配置,而是在/conf/context.xml中进行独立的配置。因为server.xml是不可动态重加载的资源,服务器一旦启动以后,要修改这个文件,就得重新启动服务器才能够重新加载。而context.xml文件则不然,tomcat服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变),就会自动重新加载这个文件,而不需要重启服务器。

-  如下所示:

    <Context path="/kaka" docBase="kaka" debug="0" reloadbale="true" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/kaka.xml</WatchedResource> 监控资源文件,如果web.xml || kaka.xml改变了,则自动重新加载该应用。
    <Resource name="jdbc/testSiteds" 表示指定的jdbc名称
    auth="Container" 表示认证方式,一般为Container
    type="javax.sql.DataSource"
    maxActive="100" 连接池支持的最大连接数
    maxIdle="30" 连接池中最多可空闲maxIdle个连接
    maxWait="10000" 连接池中连接用完时,新的请求等待时间,毫秒
    username="root" 表示数据库用户名
    password="root" 表示数据库用户的密码
    driverClassName="com.mysql.jdbc.Driver" 表示JDBC DRIVER
    url="jdbc:mysql://localhost:3306/testSite" /> 表示数据库URL地址
    </Context> 


c、附录:context.xml的三个作用范围:

-  tomcat server级别:在/conf/context.xml里配置。

-  Host级别:在/conf/Catalina/${webAppName}.xml,继而进行配置。

-  web app级别:在/conf/Catalina/$(hostName}里添加${webAppName}.xml,继而进行配置。




本文出自 “12392717” 博客,请务必保留此出处http://12402717.blog.51cto.com/12392717/1972421

以上是关于Web服务器之Tomcat的相关说明(Web访问中的角色与协议问题和JavaWeb项目的程序结构问题)的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb之web服务器软件

(Tomcat)服务器之web应用的虚拟目录映射和主机搭建

创建一个web项目

JavaWeb入门详解(第三篇)web服务器之Tomcat简介

Web架构之单机时代

Web服务器相关