java web学习笔记1

来源:互联网 发布:centos nfs安装配置 编辑:程序博客网 时间:2024/06/11 01:11

为了规范格式,把内容全部放到代码中

[Tomcat服务器的启动分析]1.startup.bat,首先判断CATALINA环境变量是否为空,如果为空,就将当前目录设为CATALINA_HOME(Tomcat的安装目录)的值。如果环境变量CATALINA_HOME存在,则通过这个环境变量调用bin目录下的catalina.bat。    在Tomcat4以前,用的是TOMCAT_HOME表示Tomcat的安装目录,在Tomcat4以后,采用了新的Servlet容器Catalina,所以环境变量的名字改成了CATALINA_HOME。2.catalina.bat,真正负责启动Tomcat服务器的文件。它调用了setclasspath.bat,在setclasspath.bat中检查JAVA_HOME环境变量是否存在,找到java.exe,用于启动Tomcat。[Tomcat调试与常见问题]*无法启动Tomcat  -环境变量设置不正确    -没有设置JAVA_HOME    -没有设置TOMCAT_HOME*端口冲突    *Tomcat是通过监听端口来提供服务的,通常会有以下几种类型的端口冲突错误。      -HTTP的8080端口冲突,需要修改server.xml中端口的值      -启动多个Tomcat端口冲突:Address in use:JVM_Bind      -用netstst -p tcp命令查看TCP监听端口      -用netstat -a显示所有的连接和监听端口*版本冲突    *Tomcat5.5后需要JDK1.5支持*什么是web应用?  -Web应用时多个web资源的集合。  -Web应用通常也称之为web应用程序,或web工程。*一个web应用由多个web资源或其他文件组成,包括html文件、css文件、js文件、动态web页面、java程序、支持jar包、配置文件等。开发人员在开发web应用时,应按照下图所示的目录结构存放这些文件。否则,在把web应用交给web服务器管理时,不仅可能会使web应用无法访问,还会导致web服务器启动报错。[Tomcat的目录层次结构]----------------------bin ------→存放启动和关闭Tomcat的脚本文件conf -----→存放Tomcat服务器的各种配置文件lib ------→存放Tomcat服务器的支撑jar包logs -----→存放Tomcat的日志文件temp -----→存放Tomcat运行时的临时文件webapps --→web应用所在目录,提供外接访问的web资源的存放目录work -----→Tomcat的工作目录[Tomcat的目录结构]CATALINA_HOME-------------  |--bin/  |--server/  |--common/ ---- lib/  |--conf/   ---- Catalina/  -- localhost/  |--webapps/  |- server.xml  |--work/     |- web.xml  |--logs/     |- tomat-users.xml[虚拟目录]  *虚拟目录的概念*虚拟目录的映射原理  -一个web站点必须有而且只能有一个虚拟根目录  -同一个文件系统目录是可以被映射成为多个虚拟web目录的。  -虚拟web子目录名称可以是多级目录结构的形式。[设置web站点的根目录]*<Host>元素的appBase属性所设置的应用程序基准目录中的ROOT子目录。*使用server.xml文件中的<Context>元素。  -<Context path="" docBase="d:\javaweb" debug="0"/>  -一个Host元素代表一个web站点,每一个Context元素代表站点下面的一个虚拟目录,当path属性设置成"",代表这个虚拟目录就是这个web站点的根目录。************************************<Host name="localhost" appBase="webapps"/> (查看自server.xml ,appBase配置的是根目录)一个web站点必须有而且只能有一个虚拟根目录,可以有多个虚拟目录。一个Host元素代表一个web站点,上面这个web站点虚拟路径是localhost(127.0.0.1),appBase属性所设置的应用程序的基准目录中的ROOT子目录。也就是说名字是localhost的web站点的虚拟根目录是webapps/ROOT************************************我的Tomcat安装目录:D:\jsp2014\apache-tomcat-6.0.41D:\jsp2014\apache-tomcat-6.0.41\webapps\ROOT\index.html打开的网页==localhost一个WEB站点默认初始页面或者叫做欢迎页面是index.html或index.jsp(接下来是配置虚拟目录:)在server.xml中填写如下内容创建一个虚拟目录:<Context path="/lasolmi" docBase="e:\javaweb" />然后在e:\javaweb中创建hello.index内容,在http://localhost:8080/lasolmi/hello.html就能看到网页内容。*tomcat6服务器会自动管理webapps目录下的所有web应用,并把他映射成虚拟目录。换句话说,只要把web项目放置到tomcat服务器的webapps目录中,不需要做其他设置,这个web应用就可以直接被外界访问了。(Host)*对计算机中的任意位置的WEB应用,若想被外界访问,就需要手工通知web服务器去管理,即通知web服务器把其映射成虚拟目录,这样才能供外界访问。(Context)[Context元素]|----------|----------------------------------------------------------------------||          |指定web应用程序的文档及目录或者jar文件的路径名。可以指定目录的或者jar || docBase  |文件的绝对路径名。也可以指定相对于Host元素的appBase目录的路径名。该属 ||          |是必须的。                                                            ||----------|----------------------------------------------------------------------||          |指定Web应用的上下文路径,在一个特定的虚拟主机中,所有的上下文路径都必须 || path     |是唯一的。如果指定一个上下文路径为空字符串(""),则定义了这个虚拟主机的 ||          |默认Web应用程序,负责处理所有的没有分配给其他Web应用程序的请求。      ||----------|----------------------------------------------------------------------||          |如果设置为true,Tomcat服务器在运行时,会监视Web-INF/classes和Web-INF/l ||reloadable|ib目录下类的改变,如果发现有类被更新,Tomcat服务器将自动重新加载该Web ||          |应用程序。这个特性在Web程序的开发阶段非常有用,但是它需要额外的运行时 ||          |开销,所以在产品发布时不建议使用,该属性的默认值为false。             ||----------|----------------------------------------------------------------------||          |如果为true,Tomcat在运行Web应用程序前将展开所有的Web应用程序,默认值是||unpackWAR |true。                                                                ||----------|----------------------------------------------------------------------|标准Web应用程序,在根目录下一定要有一个WEB-INF文件夹,里面必须有一个web.xml文件。[部署描述符]web.xml文件为Web应用的配置文件,它必须放在Web应用目录/WEB-INF目录下。web.xml文件用于对Web应用下的Web资源进行配置,例如将某个Web资源配置为网站首页、将servlet程序映射到某个url低智商等等。举例:通过web.xml文件配置网站首页。[Tomcat服务器的体系结构]                           ---------------------------------------                          |Server                                 |                          |   ----------------------------------  |                          |  |Service                           | |   --------     HTTP协议  |  |    ---------    ---------------  | |  | 浏览器 |←-----------------→|Connector|→|Engine         | | |       --------               |  |    ---------   |   ----------  | | |                          |  |                |  |Host      | | | |                          |  |                |  |  ------- | | | |   --------     HTTPS协议 |  |    ---------   |  | |context|| | | |  | 浏览器 |←-----------------→|Connector|→|  |  ------- | | | |   --------               |  |    ---------   |  |  ------- | | | |                                    |  |                |  | |context|| | | |   ----------   AJP协议   |  |    ---------   |  |  ------- | | | |  |JK连接程序|←---------------→|Connector|→|   ----------  | | |                 ----------             |  |    ---------   |   ----------  | | |                          |  |                |  |Host      | | | |     ------------ 其他协议  |  |    ---------   |  |  ------- | | | |   |其他连接程序|←-------------→|Connector|→|  | |context|| | | |                   ------------           |  |    ---------   |  |  ------- | | | |                          |  |                |  |  ------- | | | |                          |  |                |  | |context|| | | |                          |  |                |  |  ------- | | | |                          |  |                |   ----------  | | |                          |  |                 ---------------  | |                          |   ----------------------------------  |                           ---------------------------------------                     *Server  -Server代表整个容器(Container),他可以包含一个或多个Service,还可以包含一个GlobalNamingResources。*Service  -Service中可以含有一个或多个Connector,但只能含有一个Engine(单独的引擎)。这使得不同的Connector可以共享一个Engine。*Connector  -连接器(Connector)处理与客户端(Client)的通信。负责接收来自客户端的请求以及向客户端返回响应结果。比较常见的是HTTPConnector。*Engine  -每个Service只能包含一个Servlet引擎(Engine)。Engine负责接收和处理来自他所属的Service中的所有Connector的请求,将响应返回给适合的Connector,通过Connector传输给用户。*Host  -Host表示一个虚拟主机,一个Engine可以包含多个Host。并和一个服务器的网络名关联。注意Engine中必须有一个Host的名字和Engine的defaultHost属性匹配。[Tomcat服务器的体系结构]*Context  -Context表示在虚拟主机中运行的Web应用程序。  -在Sun公司发布的Java Servlet规范中,对Web应用程序做出了如下定义:一个Web应用程序是由一组Servlet、HTML页面、类,以及其他的资源组成的运行在Web服务器上的完整的应用程序。它可以再多个供应商提供的实现了Servlet规范的Web容器中运行。  -一个Host可以包含多个Context(代表Web应用程序),每个Context都有一个唯一的路径。  -查看Servlet.xml和catalina.jar。Tomcat服务器默认情况下对各种组件都有默认实现,可以通过分析server.xml文件来理解Tomcat的各个组件是如何组织的。<Server>    顶层类元素,课包含多个Service  <Service> 顶层类元素,可包含一个类元素和多个Connector    <Connector>  连接器元素,代表通信接口      <Engine>   容器元素,为Service处理客户请求,可包含多个Host        <Host>  容器元素,为Service处理客户请求,可包含多个Context          <Context>  容器元素,为Web处理客户请求          </Context>        </Host>        </Engine>    </Connector>  </Service></Server>[Tomcat服务器的配置文件](/conf目录下)*Server.xml:核心配置文件,用于配置服务器。*Web.xml:Servlet的标准配置文件,作用于所有的站点。*Tomcat-user.xml:用于配置Tomcat用户验证的角色、用户和密码。以上三个文件都采用XML的格式,在Tomcat启东市被加载。Tomcat启动时会读取server.xml,读到信息以后存储到相对应的对象当中,其实就是放在内存当中,等待用户访问,继而协同工作。[Server.xml]*Tomcat按照面向对象的方式运行,并根据配置文件server.xml动态建立配置对象。在server.xml中的每一个元素都被创建一个对象,并通过一定的顺序和结构进行调研和组织。Server.xml指挥着Tomcat的运行,Tomcat的运行完全受他的控制。*Server.xml是Tomcat的主配置文件,用以完成两个目标:  -1.提供Tomcat组建的初始配置  -2.提供说明Tomcat的结构、含义,是的Tomcat通过实例化组建完成构建和启动。[Server.xml中的元素]*Server:顶层元素,代表整个容器,可包含一个或多个service。*Service:连接器元素,他由一个或者多个Connector和一个Engine组成,负责处理所有Connector所获得的客户请求。这些Connector共享一个Engine;*Connector:实际和客户交互的组件。一个connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户。Engine:容器类元素,可以包含多个Vitual Host元素,每个虚拟主机都有一个域名。当Engine收到一个connector发出的http请求时,他把该请求匹配到某个Host上,然后把请求交给该Host来处理。Engine有一个默认虚拟主机localhost,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理。*Host:定义一个虚拟主机,每个虚拟主机都和某个DNS相匹配。每个虚拟主机下都可以部署(deploy)一个或多个Web App,每个Web App对应于一个context,有一个context path。当Host获得一个请求时,将把该请求匹配到某个context上,然后把该请求交给该context来处理。匹配的方法是“最长匹配”,path=“”的context将成为该Host默认的context,所有无法和其他context的路径名匹配的请求都将最终和该默认context匹配。默认的虚拟机localhost的根目录appBase指向webapps。*Context:使用最频繁的元素,每个context代表运行在虚拟主机上的一个应用。一个context对应于一个Web App,一个Web App有一个或者多个Servlet组成。Context在创建的时候将根据配置文件web.xml载入Servlet类。当context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类。如果找到,则执行该类,获得请求的回应,并返回。[客户端访问服务器的过程]*对于一次客户端请求访问过程,主要有以下几个步骤:  假设来自客户的请求为:http://localhost:8080/test/index.jsp  -1.请求被发送到本机端口8080,被在那里侦听的HTTP connector获得;  -2.Connector把该请求交给它所在的service的Engine来处理,并等待来自Engine的回应;  -3.Engine获得请求localhost/test/index.jsp,匹配它所拥有的所有虚拟主机Host;  -4.Engine匹配到名为localhost的Host(即使匹配不到也把请求交给Host处理,因为该Host被定义为当前Engine的默认主机);  -5.Localhost Host获得请求/test/index.jsp,匹配它所拥有的所有context;  -6.Host匹配到路径为/test的context(如果匹配不到就把该请求交给路径名为“”的context处理);  -7.Path=/test"的context获得请求/index.jsp,在它的mapping table中寻找对应的servlet。  -8.Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类;  -9.HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法;  -10.Context把执行完了之后的HttpServletRequest对象返回给Host;  -11.Host把HttpServletRequest对象返回给Engine。  -12.Engine把HttpServletRequest对象返回给connector。  -13.Connector把HttpServletRequest对象返回给客户端浏览器。[虚拟主机及实现原理]*目的  -在一台计算机上实现多个Web站点,并为每个Web站点设置不同的主目录和虚拟子目录,每个Web站点作为各自独立的网站分配给不同的公司或部门。*好处  -多个公司的网站就可以共用一台服务器,而用户感觉每个公司都有各自独立的网站。多个没有实力在Internet上假设自己专用服务器的中小公司可以联合租用一台Web服务器,对外提供各自的Web服务二互不影响。*原理  -Web服务器上的每个Web站点必须设置有不同的标识信息。  -Web浏览器发出的连接和请求信息中包含Web站点的标识信息。*Web站点的标识信息:  -IP地址、端口号、主机名[建立基于主机名的虚拟主机]*Server.xml  -Engine:标识一个处理客户端请求的引擎。一个Engine包含(管理)多个Host。  -Host:用于建立一个Web站点。    *appBase:指定Web站点下面的应用程序的基准目录。也就是说appBase指定的目录下面的子目录可以被自动部署成为该站点下面的虚拟子目录。    *name:指定Host元素所创建的Web站点的属性名。  -<Host name="www.lasolmi.com" appBase="D:\jsp2014\hello">[建立基于主机名的虚拟主机]1.在E:\javaweb下面建立一个文件夹lasolmi2.在lasolmi下面建立一个ROOT目录,下面再建WEB-INF文件夹和hello.html,WEB-INF文件夹下面见web.xml。3.配置:     <Host name="www.lasolmi.com"  appBase="d:\javaweb\lasolmi"            unpackWARs="true" autoDeploy="true"            xmlValidation="false" xmlNamespaceAware="false"><Context path="/lasolmi" docBase="e:\javaweb" />      </Host>4.当在浏览器敲www.lasolmi.com的时候,tomcat如何知道www.lasolmi.com映射的是哪个ip地址?  在C:\WINDOWS\system32\drivers\etc下的hosts文件里面加上  127.0.0.1 www.lasolmi.com5.访问:http://www.lasolmi.com:8080/hello.html6.end[建立基于端口号的虚拟主机]*一个<Connector>元素用于配置一个对外的连接器,连接器用于接收多种访问请求。对于Web服务器上的每一个监听端口号,都要使用单独的<Connector>元素。*一个<Connector>元素对应的连接器必须有一个相关的<Engine>元素。<Service>  <Connector port=""> //port代表监听器所监听的端口号    <Engine>      <Host>        <Context>        </Context>      </Host>    </Engine></Service>建立基于端口号的虚拟主机1.新配置一个Service。2.Connector port="80"3.其他同上


0 0
原创粉丝点击