【tomcat】1、 tomcat安装与配置部署

一.web环境搭建

1.1. Web服务器

(1) Web服务器主要用来接收客户端发送的请求和响应客户端请求。

(2) 作为JavaWeb程序来说,还需要有Servlet容器,容器的主要作用就是调用java程序处理用户发送的请求,并响应指定的资源,关于Servlet容器我们还需要一点一点学习。

(3) 开发JavaWeb项目Web服务器和Servlet容器是必须的,通常情况二者是合在一起的。

(4) 常见的JavaWeb服务器:

  • Tomcat(Apache):当前应用最广的JavaWeb服务器;
  • JBoss(Redhat红帽):支持JavaEE,应用比较广;
  • GlassFish(Orcale):Oracle开发JavaWeb服务器,应用不是很广;
  • Resin(Caucho):支持JavaEE,应用越来越广;
  • Weblogic(Orcale):要钱的!支持JavaEE,适合大型项目;
  • Websphere(IBM):要钱的!支持JavaEE,适合大型项目;

1.2. Tomcat

1.2.1 Tomcat概述

(1). Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是9.0。

Tomcat服务器是一个免费的开源代码的web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选

JSP全称Java Server Pages称为java服务器页面,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

(2) Tomcat6.0 支持Servlet 2.5

(3) Tomcat7.0 支持Servlet3.0

(4) Tomcat8.0 支持Servlet 3.1

1.2.2 安装、启动、配置Tomcat

1.2.2.1 下载

(1) Tomcat官方网站:http://tomcat.apache.org/

(2) 安装版:需要安装,一般不考虑使用。一个电脑只能安装一个!卸载也比较麻烦!

(3) 解压版: 直接解压缩使用,我们使用的版本。

(4) 版本:目前Tomcat的最新版本为8.0。我们使用的是7.0版本。

1.2.2.2 安装

(1) 直接把Tomcat的压缩包解压到安装目录,例如:D:\tomcat-7。卸载时删除这个文件夹即可。

(2) D:\tomcat-7,这个目录下直接包含Tomcat的bin目录,conf目录等,我们称之为Tomcat的安装目录或根目录。

卸载:删除目录就行了

1.2.2.3启动和停止

环境变量的配置:

JAVA_HOME:jdk的安装目录,**Tomcat依赖于JDK,所以必须指定该环境变量。**Tomcat只需要这一个环节变量

img

CATALINA_HOME:tomcat的安装目录,在终端(CMD)启用时,需要配置,不必须。

③PATH:安装jdk的bin目录,%JAVA_HOME%\bin

img

④启动:在Tomcat安装目录下的bin目录,双击startup.bat

⑤停止:在Tomcat安装目录下的bin目录,双击shutdown.bat或 ctrl+c

在windows和linux下都是差不多的,先配置好java的环境变量,然后解压到某个目录即可

问题解决

注意: startup.bat会调用catalina.bat,而catalina.bat会调用setclasspath.bat,setclasspath.bat会使用JAVA_HOME环境变量,所以我们必须在启动Tomcat之前把JAVA_HOME配置正确。如果JAVA_HOME配置不正确,就会导致startup.bat一闪而过!

问题1:如果双击startup.bat后窗口一闪而过,请查看JAVA_HOME是否配置正确。不要一下全在path里写

问题2:启动报错。看日志报错修改,可能是端口冲突的问题。

netstat -ano查看端口,最后一列是pid,在任务管理器里面查看进程。点进程,查看中勾选 pid才显示pid

  1. 暴力:找到占用的端口号,并且找到对应的进程,杀死该进程netstat -ano
  2. 温柔:修改自身的端口号,修改conf/server.xml
  • 一般会将tomcat的默认端口号修改为80。80端口号是http协议的默认端口号。
  • 好处:在访问时,就不用输入端口号
1.2.2.4访问Tomcat

不要关闭之前打开的cmd,然后打开浏览器地址栏输入:http://localhost:8080 (IE中不能省略http)

1.2.2.5 配置端口号

打开Tomcat安装目录下的conf/server.xml

(1) 端口:web服务器在启动时,实际上是监听了本机上的一个端口,当有客户端向该端口发送请求时,web服务器就会处理请求。但是如果不是向其所监听的端口发送请求,web服务器不会做任何响应。tomcat默认的端口是8080。例如:Tomcat启动监听了80端口,而访问的地址是http://localhost:8080,将不能正常访问。

(2)80端口:80端口是http协议默认的端口号,也就是说如果在url中不指定端口号那默认会向80端口发送请求。所以我们不想输入端口号时候可以改为80,而不是原来的8080

处理tomcat端口占用问题

(1)打开cmd输入命令:netstat -ano|findstr 8080

查看占用8080端口的进程pid

(2)输入命令:taskkill /pid 8768 /f,将占用端口号结束进程

或者修改70行左右的<Connector port="",需要重启tomcat

1.2.2.6 Tomcat目录结构

(1) bin:该目录下存放的是二进制的可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出GUI窗口启动Tomcat;

如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;

(2) conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:

  • server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;下面会详细介绍这个文件;
  • tomcatusers.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
  • web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!

修改群殴自己拍卖行init-param中的参数可以看到Web下所有的工程。

  • context.xml:对所有应用的统一配置,通常我们不会去配置它。

(3) lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的jar包了,所以建议只把Tomcat需要的jar包放到这个目录下;

(4) logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。

(5) temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!

(6) webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。

(7) work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个work目录下。(存放由jsp翻译成的java,以及编辑成的class文件jsp ->java ->class)

(8) LICENSE:许可证。

(9) NOTICE:说明文件。

二 Eclipse、Tomcat、Web集合

IDEA版本的请参考https://blog.youkuaiyun.com/hancoder/article/details/102184703

2.1 Eclipse配置Tomcat

此时无需点击startup.bat

配置步骤:

思路:先创建Server,再把

前提:环境变量中必须有JAVA_HOME,这是在配置sdk时进行的。

  1. 首次配置的时候,需要先把Tomcat导入Eclipse。 将 tomcat 的目录和 Myeclipse 集成起来,这样 eclipse在帮我们复制更改的代码的时候,就知道复制到哪个服务器中。进入Eclipse后在菜单栏中点击:Prefrence–Sercer–Runtime Environment—Add

    选择Add后再Apache中选择对应的Tomcat版本,下一步。

    点击Fiinish后的效果就是图1的效果。
    此时eclipse其实赋值了一份tomcat到eclipse工作空间,所以我们后续创建的项目其实都在eclipse工作空间下,而不是第一步的tomcat安装目录下。

部署好的 项目,每次在 Myeclipse 中进行更 改后只要点击
ctrl+s 进行保存,eclipse 会自动重新复制文件到服务器,并覆盖原有在服务器中的文件。
发布项目:
在 eclipse 的 servers 窗口中选择集成的 tomcat 然后点击启动按钮启动即可:

2.2 创建一个Web项目(Web应用)

菜单栏点击:File—New–Ohter–Dynamic Web Project

注意下面这个Context root,是项目的新名称

2.3 创建Web Server,将创建好的Web项目部署到Tomcat中

打开Server视图

注在上步点击No Server...的意义与New的操作等价:在Eclipse的菜单File中选择New—Other—搜索到Server。如下图

返回下方的“Servers”面板,右键单击该面板中的“Tomcat v8.0 Server at localhost”节点,在弹出的快捷菜单中单击“Start”,即可启动指定的Web服务器。如果此时直接启动访问http://localhost:8080/day1 ,会发现会报404的错误。这是因为我们没有添加主页,在WebContent文件夹下面添加主页index.jsp,内容为:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="ISO-8859-1">
	<title>Insert title here</title>
</head>
<body>
	<h1>123123</h1>
</body>
</html>

显示结果如下:

注意点:

  • 为什么我们输入的是day1而不是WebTest1呢?因为我们在2.2的这张图中把项目映射了,如果之前没有修改的话,输入项目名可以访问,改了之后不能用项目名访问了。
  • 上图还有一个细节是WebContent,不管你修改为什么,我们的文件都是放在修改后的文件中,才能访问到,不加文件的话默认访问的就是index.jsp
  • Tomcat修改xml文件后需要restart
部署项目的其他3种方式:
  • 放到TOMCAT目录下:直接将项目放到webapps中,然后访问loacalhost:8080/项目名/文件名.后缀。也可以在别的地方把项目压缩成zip包,然后把包后缀改成war。war包传的笔记快,把war包放到webapps后,tomcat会自动解压缩包。卸载项目的时候删除war包后,tomcat会自动删除原来解压缩的内容。
  • 修改server.xml(不好):修改150行左右的,在标签间加入:,此时我们访问项目必须写虚拟路径,原路径不可使用。但是这样会破坏tomcat环境让别的项目无法访问。
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false">
    <!-- 配置方法<Context path="/访问目录名" docBase="e:/项目/WebRoot" debug="0" reloadable="true"/>-->
    
    <!-- 第一个项目-->
    <Context path="/struts" docBase="D:\Struts2\WebRoot" reloadable="true"> 
    </Context>
    
    <!--第二个项目-->
    <!--
    <Context path="/robot" docBase="D:\My Documents\MyEclipseWorkspace\robot\WebRoot" reloadable="true">
    </Context> 
    -->  
</Host>
path:浏览器访问时的路径名,如第一个项目,浏览器访问时路径名是(我的是80端口):localhost/struts/index.jsp
docBase:web项目的WebRoot所在的路径,注意是WebRoot的路径,不是项目的路径。
debug:值为0的话,表示不打印日志
reloadble:设定项目有改动时,tomcat是否重新加载该项目

  • tomcat/conf/Catalina/localhost目录下,创建任意名.xml,写入<Context docBase="项目路径" />,此时虚拟目录就是xml文件的名称。

2.4 Eclipse使用Tomcat的原理

(1) 当我们使用Eclipse将项目部署到Tomcat的时,我们发现,在Tomcat下的webapps目录下并没有我们创建好的项目,但是当通过Eclipse启动服务器后,项目却真的可以访问到,这是为什么呢?

(2) 实际上,Eclipse在使用Tomcat时,并没有将项目部署到Tomcat的目录下,而是在其工作空间中,创建了一个Tomcat的镜像,Eclipse启动的Tomcat是他自己配置的镜像。Eclipse会自己下载所需tomcat最简单结构。

(3) Eclipse镜像所在目录

Eclipse的工作空间目录\.metadata\.plugins\org.eclipse.wst.server.core\tmp0

(4) 在这个目录下,我们会发现一个和Tomcat安装目录几乎一模一样的目录结构。项目在问题wtpwebapps文件夹中

(5) 在这里Eclipse中Tomcat镜像配置文件也是独立的,而我们所创建的项目是部署到wtpwebapps目录下的,这样做的好处是Eclipse中Tomcat和我们本机的Tomcat可以保持相互独立,不会影响彼此。

三 Web应用的目录结构

项目在 webapps目录

静态项目和动态项目目录结构

java动态项目的目录结构:

<webDemo动态项目项目名>
|	WebContent项目内容
    | - WEB-INF //Web容器会包含WEB-INF文件下的内容,但客户端浏览器无法访问WEB-INF下的内容
    |	| - classes //保存*.class文件
    |	| - lib //保存打包后的JAR文件
    |	| - web.xml //web项目的核心配置文件
    | - <a.jsp>//这里存放任意多个JSP界面,与WEB-INF同级

四 深入Tomcat原理

4.1 Tomcat层次结构:

层次关系为:

Server
	Service
		Connector
		Engine
			Host
				Context

在Tomcat的、CONF/server.xml中可以看到类似上面的组件关系。

(1)Server层

对应Server组件,逻辑上表示整个Tomcat,即整个Catalina Servlet容器。它处于Tomcat顶层,可以包含一个或多个Service层。Tomcat提供了该层接口的一个默认实现,所以通常不需要用户自己去实现。

(2)Service层

对应Service组件,是包含在Server层中的一个逻辑功能层。它包含一个Engine层,以及一个或多个连接器(Connector)。Service组件将一个或多个Connector组件绑定到Engine层上,Connector组件侦听端口,获得用户请求,并将请求交给Engine层处理,同时把处理结果发给用户,从而实现一个特定的实际功能。Tomcat提供了Service接口的默认实现,所以通常也不需要用户定制。

(3)Engine层

对应Engine组件,该层是请求分发处理层,可以连接多个Connector。它从Connector接收请求后,解析出可以完成用户请求的URL,根据该URL可以把请求匹配到正确的Host上,当Host处理完用户请求后,Engine层把结果返回给适合的连接器,再由连接器传输给用户。该层的接口一般不需要用户来定制,特殊情况下,用户可以通过实现该接口来提供自定义的引擎。

(4)Host层

对应Host组件,该层表示一个虚拟主机,一个Engine层可以包含多个Host层,每个Host层可以包含一个或多个Context层,对应不同的Web应用。因为Tomcat给出的Host接口的实现(类StandardHost)提供了重要的附加功能,所以用户通常不需要定制Host。

(5)Context层(重要)

对应Context组件,该层代表某个虚拟主机上的实际目录或一个WAR,即单个Web应用程序,它运行在特定的虚拟主机中,使用最为频繁。一个Host层包含多个Context层,每一个Context都有唯一的路径,Host层接到请求后,根据用户请求的URL,将请求定位到Context层。

项目部署的知识:

一个web容器可以运行多个web应用程序,每个web应用程序都有一个唯一的上下文根,上下文根如何部署是和具体的web容器相关的。

%CATALINA_HOME%\webapps目录下的每一个子目录都是一个独立的Web应用,子目录的名字就是该Web应用的上下文根。

例如:应用程序A和应用程序B分别位于%CATALINA_HOME%\webapps\a%CATALINA_HOME%\webapps\b,则a是A应用的,b是B应用的

当tomcat启动时,会自动加载webapps目录下的Web应用程序,所以在这个目录下的Web应用程序不需要进行其他的配置就可以直接访问了。

但是我们只在部署的时候才这么做,开发的适合在其他目录下开发,然后配置虚拟目录。配置可以在xml配置文件中通过元素完成。

Context元素属性描述
backgroundProcessorDelay这个值代表在context及其子容器(包括所有的wrappers)上调用backgroundProcess方法的延时,以秒为单位。如果延时值非负,子容器不会被调用,也就是说子容器使用自己的处理线程。如果该值为正,会创建一个新的线程。在等待指定的时间以后,该线程在主机及其 子容器上调用backgroundProcess方法。context利用后台处理session过期,监测类的变化用于重新载入。如果没有指定,该属性的缺省值是-1,说明context依赖其所属的Host的后台处理。
className实现的Java类名。该类必须实现org.apache.catalina.Context接口。如果没有指定,使用标准实现(在下面定义)。
cookies如果想利用cookies来传递session identifier(需要客户端支持cookies),设为ture。否则为false,这种情况下只能依靠URL Rewriting传递session identifier。
crossContext如果想在应用内调用ServletContext.getContext()来返回在该虚拟主机上运行的其他web application的request dispatcher,设为true。在安全性很重要的环境中,设为false,使得getContext()总是返回null。缺省值为false。
docBase该web应用的文档基准目录(Document Base,也称为Context Root),或者是WAR文件的路径。可以使用绝对路径,也可以使用相对于context所属的Host的appBase路径。
override如果想利用该Context元素中的设置覆盖DefaultContext中相应的设置,设为true。缺省情况下使用DefaultContext中的设置。
privileged设为true,允许context使用container servlets,比如manager servlet。
pathweb应用的context路径。catalina将每个URL的起始和context path进行比较,选择合适的web应用处理该请求。特定Host下的context path必须是惟一的。如果context path为空字符串(""),这个context是所属Host的缺省web应用,用来处理不能匹配任何context path的请求。
reloadable如果希望Catalina监视/WEB-INF/classes/和/WEB-INF/lib下面的类是否发生变化,在发生变化的时候自动重载web application,设为true。这个特征在开发阶段很有用,但也大大增加了服务器的开销。因此,在发布以后,不推荐使用。但是,你可以使用Manager应用在必要的时候触发应用的重载。
wrapperClassorg.apache.catalina.Wrapper实现类的名称,用于该Context管理的servlets。如果没有指定,使用标准的缺省值。

元素是元素的子元素,可以在conf/server.xml中设置Context元素。还可以把放在下列位置的文件中

  • conf/context.xml,将被所有的web应用程序加载
  • conf/[enginename]/[hostname]/context.xml.default。该路径下的信息将被属于该虚拟主机的所有web应用程序所加载。
    • enginename表示在server.xml文件中设置的元素name属性的值(一般Catalina)
    • hostname表示在server.xml文件中设置的元素name属性的值(一般localhost)
  • conf/[enginename]/[hostname]/xxx.xml文件,在这个文件中,元素的docBase属性通常是web应用程序的绝对路径名,或者是web应用程序归档文件的绝对路径名
  • 在web应用程序的目录下增加META-INF/context.xml文件。

在tomcat5.5开始,在conf/[enginename]/[hostname]/xxx.xml中配置,tomcat将以xml文件名作为web应用程序的上下文路径,而不管你再元素中配置的path是什么,

webapps目录下的web应用程序,如果没有在任何文件中配置元素,那么Tomcat将为这个web应用程序自动生成元素。自动生成的元素的上下文路径将以/开始,后面紧跟web应用程序所在目录的名字。如果目录的名字是ROOT,那么上下文路径僵尸一个空字符串""(将作为虚拟主机的默认web应用程序)。所以webapps目录下的web应用程序可以不经配置而直接使用

如果想将开发的目录直接配置成web应用程序运行的目录,而不是放在webapps下。可以在两个地方配置。可以编辑conf/server.xml、设置元素。

<Host>
    <Context path="虚拟" docBase="绝对路径"  reloadable="true"/>
    

reloadable代表更改后tomcat会重新加载。就不需要频繁重启tomcat了。

也可以在conf/Catalina/localhost下创建虚拟路径.xml,编辑内容为

<Context path="虚拟" docBase="绝对路径"  reloadable="true"/>

此时注意把server.xml中之前配置的删去。

server.xml配置详解

/conf/server.xml 如果修改了conf/server.xml,就必须重新启动Tomcat。

<Server port="8005" shutdown="SHUTDOWN">  
<!-- 属性说明  
    port:指定一个端口,这个端口负责监听关闭Tomcat的请求  
    shutdown:向以上端口发送的关闭服务器的命令字符串  
-->  
  
  <Listener className="org.apache.catalina.core.AprLifecycleListener" />  
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />  
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  
  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>  
  
  <GlobalNamingResources>  
  
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>  
  
    <Resource name="UserDatabase" auth="Container"  
              type="org.apache.catalina.UserDatabase"  
       description="User database that can be updated and saved"  
           factory="org.apache.catalina.users.MemoryUserDatabaseFactory"  
          pathname="conf/tomcat-users.xml" />  
  
  </GlobalNamingResources>  
<!-- 
    每个Service元素只能有一个Engine元素.元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求 
-->  
  <Service name="Catalina">  
<!-- 属性说明  
    name:Service的名称  
-->  
  
    <!--  
        Connector元素:  
            由Connector接口定义.<Connector>元素代表与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果.  
    -->  
    <Connector port="80" maxHttpHeaderSize="8192"  
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
               enableLookups="false" redirectPort="8443" acceptCount="100"  
               connectionTimeout="20000" disableUploadTimeout="true" />  
    <!-- 属性说明  
        port:服务器连接器的端口号,该连接器将在指定端口侦听来自客户端的请求。  
        enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名;  
                    若为false则不进行DNS查询,而是返回其ip地址。  
        redirectPort:服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号。  
        acceptCount:当所有可以使用的处理请求的线程都被用光时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,而返回Connection refused错误。  
        connectionTimeout:等待超时的时间数(以毫秒为单位)。  
        maxThreads:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200。  
        protocol:必须设定为AJP/1.3协议。  
        address:如果服务器有两个以上IP地址,该属性可以设定端口监听的IP地址,默认情况下,端口会监听服务器上所有IP地址。  
        minProcessors:服务器启动时创建的处理请求的线程数,每个请求由一个线程负责。  
        maxProcessors:最多可以创建的处理请求的线程数。  
        minSpareThreads:最小备用线程 。  
        maxSpareThreads:最大备用线程。  
        debug:日志等级。  
        disableUploadTimeout:禁用上传超时,主要用于大数据上传时。  
    -->  
  
  
    <Connector port="8009"   
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />  
    <!-- 负责和其他HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时就需要用到这个连接器。 -->  
      
    <Engine name="Catalina" defaultHost="localhost">  
    <!-- 属性说明  
        name:对应$CATALINA_HOME/config/Catalina中的Catalina   
        defaultHost:对应Host元素中的name属性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost  
            缺省的处理请求的虚拟主机名,它至少与其中的一个Host元素的name属性值是一样的  
        debug:日志等级  
    -->  
  
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
             resourceName="UserDatabase"/>  
    <!--  
        由Host接口定义.一个Engine元素可以包含多个<Host>元素.  
            每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用.  
    -->  
    <Host name="localhost" appBase="webapps"  
       unpackWARs="true" autoDeploy="true"  
       xmlValidation="false" xmlNamespaceAware="false">  
      
    <!-- 属性说明  
        name:在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost虚拟主机名  
        debug:是日志的调试等级   
        appBase:默认的应用路径,也就是把应用放在一个目录下,并在autoDeploy为true的情况下,可自动部署应用此路径相对于$CATALINA_HOME/ (web applications的基本目录)  
        unpackWARs:设置为true,在Web应用为*.war是,解压此WAR文件.   
                   如果为true,则tomcat会自动将WAR文件解压;否则不解压,直接从WAR文件中运行应用程序.  
        autoDeploy:默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用   
    -->  
  
    <Context path="/demm" docBase="E:\\projects\\demm\\WebRoot" debug="0" reloadable="true" >   
        </Context>  
    <!-- 属性说明  
        path:访问的URI,如:http://localhost/是我的应用的根目录,访问此应用将用:http://localhost/demm进行操作,此元素必须,  
            表示此web application的URL的前缀,用来匹配一个Context。请求的URL形式为http://localhost:8080/path/*  
        docBase:WEB应用的目录,此目录必须符合Java WEB应用的规范,web application的文件存放路径或者是WAR文件存放路径。  
        debug:日志等级   
        reloadable:是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件,  
            如果为true,则Tomcat将支持热部署,会自动检测web application的/WEB-INF/lib和/WEB-INF/classes目录的变化,  
            自动装载新的JSP和Servlet,我们可以在不重起Tomcat的情况下改变web application  
    -->  
      </Host>  
    </Engine>  
  </Service>  
</Server> 

context.xml配置

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

<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true">

1>path:即要建立的虚拟目录,,注意是/kaka,它指定访问Web应用的URL入口,如http://localhost:8080/kaka/

  1. 在tomcat 5.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" 表示指定的jndi名称 
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> 

conf/Context.xml是Tomcat公用的环境配置;若在server.xml中增加的话,则myApp/META-INF/Context.xml就没用了(被server.xml中的Context替代),

context.xml的三个作用范围

\1. tomcat server级别:

在/conf/context.xml里配置

\2. Host级别:

在/conf/Catalina/${hostName}里添加context.xml,继而进行配置

\3. web app 级别:

在/conf/Catalina/ h o s t N a m e 里 添 加 {hostName}里添加 hostName{webAppName}.xml,继而进行配置

Tomcat端点设置含义:

tomcat启动后会默认占用8080,8009和8005三个端口,占用的这三个端口的意义如下:

8080端口负责建立HTTP连接在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。

8009端口负责和其他HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时就需要用到这个连接器。

8005端口用来向Tomcat发布shutdown命令的。

web.xml

conf/web.xml为运行在同一个tomcat实例中高端所以web应用程序定义了默认值。当tomcat加载一个web应用程序的时候,首先读取conf/web.xml,在读取web应用程序目录下的WEB-INF/web.xml文件

WAR文件

压缩起来然后指定扩展名为.war

打包:

jar -cvf 名字.war webapps/hello/*

如果不想包含src目录及其下的java文件(发布时不应该把java源文件包含到WAR文件中),执行命令为

jar -cvf 名字.war webapps/hello/*.html WEB-INF/

把war包放到webapps下,tomcat启动时会自动解压war文件,生产同名文件

文件结构

WEB-INF/下有classes和lib。spring中的classpath就是对应这两个文件

Servlet类文件在WEB-INF/classes下,java库文件在WEB-INF/lib下。

web.xml在WEB-INF下。

根据WEB应用程序的需求,将JSP页面或静态HTML页面放到上下文根路径下或其子目录下。

如果有需要,可以META-INF/context.xml

Servlet元素

为Servlet指定一个文本描述

为Servlet指定一个简短的名字,可以被某些工具显示

为Servlet指定一个图标,该图标可以在某些图形界面工具中表示该Servlet

指定Servlet的名字,在同一Web应用中,该名字唯一

指定Servlet类的完整限定名

指定web应用中jsp文件的完整路径,以’/ '开头

定义Servlet的初始化参数 必须包含

指定web应用启动时Servlet的加载次序。元素内容必须为整数 如果没有设定该元素或设定为负数,Servlet容器将在客户端首次请求这个Servlet时加载它;如果该值为正数或0,容器将在Web应用部署时加载和初始化这个Servlet。并且先加载数值小的Servlet

指定用于执行组件的角色。必须包含元素指定角色名

声明在组件或部署组件的代码中安全角色的引用,必须包含元素 0或1个指定到一个安全角色的引用。

元素及其子元素

在Servlet和URL样式之间定义一个映射。包含两个子元素(必须和元素中的名字一致)和(指定对应于Servlet的URL路径,是相对于Web应用上下文根的路径)。Servlet 2.5规范允许子元素出现多次(配置错误会出现404找不到资源)

web相关概念回顾

1. 软件架构
	1. C/S:客户端/服务器端
	2. B/S:浏览器/服务器端

2. 资源分类
	1. 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析
		* 如: html,css,JavaScript
	2. 动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换为静态资源,在返回给浏览器
		* 如:servlet/jsp,php,asp....
需要遵守一定的规则(接口),才能被tomcat所识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值