天天看點

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入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只需要这一个环节变量

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理

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

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

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理

④启动:在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目录结构

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入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.csdn.net/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
    【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
    选择Add后再Apache中选择对应的Tomcat版本,下一步。
    【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
    【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入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

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理

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

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理

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

打开Server视图

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
注在上步点击

No Server...

的意义与New的操作等价:在Eclipse的菜单File中选择New—Other—搜索到Server。如下图
【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理

返回下方的“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>
           

显示结果如下:

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理

注意点:

  • 为什么我们输入的是day1而不是WebTest1呢?因为我们在2.2的这张图中把项目映射了,如果之前没有修改的话,输入项目名可以访问,改了之后不能用项目名访问了。
    【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理
  • 上图还有一个细节是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层。

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理

项目部署的知识:

一个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。
path web应用的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应用在必要的时候触发应用的重载。
wrapperClass org.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应用

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元素

【tomcat】1、 tomcat安裝與配置部署一.web環境搭建二 Eclipse、Tomcat、Web集合三 Web應用的目錄結構四 深入Tomcat原理

为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所识别。
           

繼續閱讀