LinkinPark
当你的才华撑不起你野心时,那么请潜下心继续学习,心无旁骛,愿多年以后你们我都能成为自己想象的模样。

  • Tomcat简介

TOMCAT是APACHE JAKARTA软件组织的一个子项目,TOMCAT是一个JSP/SERVLET容器,它是在SUN公司的JSWDK(JAVA SERVER WEB DEVELOPMENT KIT)基础上发展起来的一个JSP和SERVLET规范的标准实现,使用TOMCAT可以体验JSP和SERVLET的最新规范。经过多年的发展,TOMCAT不仅是JSP和SERVLET规范的标准实现,而且具备了很多商业JAVA SERVLET容器的特性,并被一些企业用于商业用途。 

Tomcat在严格意义上并不是一个真正的应用服务器,它只是一个可以支持运行Serlvet/JSP的Web容器,不过Tomcat也扩展了一些应用服务器的功能,如JNDI,数据库连接池,用户事务处理等等。Tomcat 是一种具有JSP环境的Servlet容器。Servlet容器是代替用户管理和调用 Servlet的运行时外壳。

  • 在这里有一个概念,就是说什么是servlet容器?

容器负责处理客户请求。当客户请求来到时,SERVLET容器获取请求,然后调用某个SERVLET,并把Servlet的执行结果返回给客户。当客户请求某个资源时,Servlet容器使用ServletRequest对象把客户的请求信息封装起来,然后调用Java Servlet API中定义的Servlet的一些生命周期方法,完成Servlet的执行,接着把Servlet执行的要返回给客户的结果封装到ServletResponse对象中,最后Servlet容器把客户的请求发送给客户,完成为客户的一次服务过程。


关于Tomcat的原理我会单独在写一篇博客,在这里不做多的重复。在这里我们应该知道的就是说,Tomcat提供了web容器的基本功能,还支持JAAS和JNDI绑定,但是他没有应用服务器(比如WebLogic)那么强大,比如他不提供EJB等支持。


  • Tomcat目录结构
Tomcat是纯java实现的,所以他可以跨平台使用。解压刚下载到的压缩包,有如下的文件结构:



  • server.xml

TOMCAT是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的给件是CATALINA SERVLET容器,其他的组件按照一定的格式要求配置在这个顶层容器中。TOMCAT的各个组件是<TOMCAT_HOME>\conf\server.xml文件中配置的,TOMCAT服务器默认情况下对各种组件都有默认的实现,下面通过分析server.xml文件来理解TOMCAT的各个组件是如何组织的。

<Server>      顶层元素,代表一个服务器
	<Service>  顶层元素,是Connector的集合,只有一个Engine
		<Connectior/>        连接器类元素,代表通信接口
			<Engine>   容器类元素,为特定的Service组件处理所有客户请求,可包含多个Host
				<Host>    为特定的虚拟主机处理所有客户请求
					<Context>     为特定的WEB应用处理所有客户请求
					</Context>
				</Host>
 			</Engine>
<span style="white-space:pre">	</span></Service>
</Server>

TOMCAT中真正处理客户请求与生成响应的三个组件是Engine 、Host、 Context


  • Tomcat包含三个主要的部分

  * Catalina :一个符合ServletAPI规范2.3的Servlet Container

* Jasper:一个符合JSP规范1.2的JSP编译器和运行环境
* Webapps:Tomcat中包含的一些例子和用于测试的web例程,以及相关文档。


  • 按照Tomcat的规范,Tomcat的Web应用程序应该由如下目录组成

1,页面内容等文件的存放位置:*.html, *.jsp等可以有许多目录层次,由用户的网站结构而定,实现的功能应该是网站的界面,也就是用户主要的可见部分。除了HTML文件、JSP文件外,还有js(JavaScript)文件和css(样式表)文件以及其他多媒体文件等。 

2,Web-INF/web.xml这是一个Web应用程序的描述文件。这个文件是一个XML文件,描述了Servlet和这个Web应用程序的其他组件信息,此外还包括一些初始化信息和安全约束等等。 

3,Web-INF/classes/这个目录及其下的子目录应该包括这个Web应用程序的所有JavaBean及Servlet等编译好的Java类文件(*.class)文件,以及没有被压缩打入JAR包的其他class文件和相关资源。注意,在这个目录下的Java类应该按照其所属的包层次组织目录(即如果该*.class文件具有包的定义,则该*.class文件应该放在.\WEB-INF\classes\包名下)。 

 4,通常Web-INF/classes/这个目录下的类文件也可以打包成JAR文件,并可以放到WEB-INF下的lib目录下。如将 classes目录下的各个*.class文件打包成WebMis.jar文件(jar cvf WebMis.jar *.*)

 值得注意的是:

(1)WEB-INF目录中包含应用软件所使用的资源,但是WEB-INF却不在公共文档根目录之中。在这个目录中所包含的文件都不能被客户机所访问。

(2)类目录中(在WEB-INF下)包含运行Web应用程序时所需的Servlets,Beans等类。

(3)lib目录(在WEB-INF下)包含有Java archive files (JARs),例如标签库或者Servlets,Beans等类的*.jar文件。

(4)如果一个类出现在JAR文件中同时也出现在类的目录中,类加载器会加载位于类目录中的那一个。

common/lib/ 这个目录下包含了所有压缩到JAR文件中的类文件和相关文件。比如:第三方提供的Java库文件、JDBC驱动程序等。其中msbase.jar、mssqlserver.jar、msutil.jar文件为SqlServer2000的JDBC驱动程序。其中servlet-api.jar和jsp-api.jar为Servlet和JSP的API所在的包


  • 运行Tomcat
运行Tomcat只需要一个环境变量,就是JAVA_HOME。不管是window还是Linux,只需要增加该环境变量就可以了,在实际的开发过程中我一般都是使用myEclipse来直接启动和停止Tomcat服务器,在设置Path的时候我直接将JDK下面的BIN目录配置在了Path中,没有设置JAVA_HOME,所以直接运行Tomcat的BIN目录下的startup.bat指令并不能启动Tomcat,所以以后要记住了,在直接运行Tomcat中必须要配置过JAVA_HOME,也只需要配置一个JAVA_HOME而已。


在配置过JAVA_HOME以后,将Tomcat解压后随便丢一个地方,进入bin目录下的点击startup.bat就是启动Tomcat,shutdown.bat就是停止Tomcat。启动Tomcat后,在页面上输入Http://localhost:8080测试有没有启动成功。成功启动Tomcat可以访问,页面如下:

  



  • 配置Tomcat服务器


1,配置Tomcat的服务端口
Tomcat默认的端口号是8080,当然我们也可以自己修改,而且还可以同时开启好几个端口来服务。
打开Tomcat的conf目录,找到server.xml配置文件,在69行可以看到如下代码:
<Connector port="8080"   protocol="HTTP/1.1"      connectionTimeout="20000"    redirectPort="8443" />
我们可以直接修改port这个端口号来改变端口。
另外,如果需要tomcat运行多个服务,只需要复制server.xml文件中的<Service>元素,并修改相应的参数便可以实现一个Tomcat运行多个服务,当然必须在不同的端口提供服务。


2,开始tomcat的列功能
在web应用的开发阶段,通常希望tomcat可以列出web应用根路径下的所有页面,这样子可以更加方便的选择需要调试的JSP页面,默认情况下,可能是出于安全的考虑,Tomcat并不会列出web应用根路径下的所有页面,为了让tomcat列出根路径下的所有的页面,可以打开Tomcat的conf目录下的web.xml文件,在104行这里将listings这个参数由默认的false变成true即可。
<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

3,修改tomcat默认编码格式
默认情况下,tomcat使用的是iso8859-1的编码编码方式。同样也是下面这行代码,
<Connector port="8080"   protocol="HTTP/1.1"      connectionTimeout="20000"    redirectPort="8443" />
这段代码规定了Tomcat监听HTTP请求的端口号等信息。可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat(默认ISO-8859-1编码)以UTF-8的编码处理get请求。注意这里只是get请求,对于post不生效的。更改后的代码如下:
<Connector port="8080"   protocol="HTTP/1.1"      connectionTimeout="20000"    redirectPort="8443" URIEncoding="UTF-8" />

4,进入控制台
前面已经介绍过了,tomcat的webapps路径是web应用的存放位置,在这个目录下有一个叫做manager的项目,进入这个项目下找到WEB-INF,下面有一个web.xml文件,该路径存放了Manager应用的配置文件。查看里面的内容我们可以知道,登录manager控制台可能需要不同的manager角色,对于普通的开发者来说,通常需要匹配/text/*,/status/*的资源,因此为该用户分配一个manager-gui角色即可。
Tomcat的用户由conf路径下面的tomcat-users.xml文件控制,打开文件添加如下代码就可以配置一个用户。
 
<!-- 建立一个角色-->
 <role rolename="manager-gui"/>
 <!-- 建立一个用户-->
 <user username="LinkinPark" password="NightWish" roles="manager-gui"/>

 点击tomcat首页面左上方的manager控制台,输入账号和密码就可以进入了,页面如下。查看页面可以监控到所有部署到该服务器下的web应用,左边列出了所有部署在该web容器中内的Web应用,右边的4个按钮则用于控制,包括启动,停止,重启等。




5,部署web应用。一共有3种方法:

第一种方法:将web项目文件件拷贝到webapps目录中。这也是最常用的部署方式,实际开发中我们使用IDE工具自动部署的时候其实就是将我们自己的项目放到了tomcat的webapps目录下的。
Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。也可以将JSP程序打包成一个 war包放在目录下,服务器会自动解开这个war包,并在这个目录下生成一个同名的文件夹。一个war包就是有特性格式的jar包,它是将一个Web程序的所有内容进行压缩得到。具体如何打包,可以使用许多开发工具的IDE环境,如Eclipse、NetBeans、ant、JBuilder等。也可以用 cmd 命令:jar -cvf applicationname.war package.*。webapps这个默认的应用目录也是可以改变。打开Tomcat的conf目录下的server.xml文件,130行找到下面内容:
<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeloy="true" xmlValidation="falase" xmlNamespaceAware="false">

第二种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加:
<Context path="/hello" reloadable="true" docBase="E:\test1" debug="0" privileged="true"></Context>
其中path是其相对web URL的路径,是一个虚拟的路径虚拟,比如说:http://localhsot:8080/hello;
docBase是JSP应用程序的物理路径;workDir是这个应用的工作目录,存放运行是生成的于这个应用相关的文件;debug纪录调试信息的调试级别;reloadable是可重载的标志,开发Servlet时,重载更改后的Servlet。这是一个非常便利的特性,你可以调试或用Tomcat测试新代码而不用停止或重新启动Tomcat。要打开重载,把reloadable设为true即可。


第三种方法:很灵活,在conf目录中,新建 Catalina(注意大小写)\localhost目录,在该目录中新建一个xml文件,名字可以随意取,只要和当前文件中的文件名不重复就行了,该xml文件的内容为:
<Context path="/linkin" reloadable="true" docBase="E:\test1" debug="0" privileged="true"></Context>
这种方法有个优点,可以定义别名。服务器端运行的项目名称为path,外部访问的URL则使用XML的文件名。这个方法很方便的隐藏了项目的名称,对一些项目名称被固定不能更换,但外部访问时又想换个路径,非常有效。比如上面这行代码部署项目以后,该应用的URL地址为:http://<server_address>:<port>/linkin


注意:删除一个Web应用同时也要删除webapps下相应的文件夹祸server.xml中相应的Context,还要将Tomcat的conf
\catalina\localhost目录下相应的xml文件删除。否则Tomcat仍会按配置去加载。。。


6,myeclipse中配置tomcat


     
  
posted on 2015-03-04 11:05  LinkinPark  阅读(398)  评论(0编辑  收藏  举报