zoukankan      html  css  js  c++  java
  • Tomcat常用操作

    • 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>confserver.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-INFclasses包名下)。 

     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:	est1" 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:	est1" debug="0" privileged="true"></Context>
    这种方法有个优点,可以定义别名。服务器端运行的项目名称为path,外部访问的URL则使用XML的文件名。这个方法很方便的隐藏了项目的名称,对一些项目名称被固定不能更换,但外部访问时又想换个路径,非常有效。比如上面这行代码部署项目以后,该应用的URL地址为:http://<server_address>:<port>/linkin


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


    6,myeclipse中配置tomcat


         
      
  • 相关阅读:
    6-Python爬虫-分布式爬虫/Redis
    ES 查询时 排序报错(fielddata is disabled on text fileds by default ... )解决方法
    Intellij Idea webstorm 激活
    Intellij Idea 配置jdk
    java 获取(格式化)日期格式
    js 跳转 XSS漏洞 预防
    CSS去掉背景颜色
    js对象无法当成参数传递 解决方法
    Elasticsearch java api
    java多条件查询SQL语句拼接的小技巧
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233089.html
Copyright © 2011-2022 走看看