- Tomcat简介
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目录结构
- 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
在配置过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