Tomcat学习总结

1 Tomcat相关目录及配置文件总结
 


[bin]目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。
很多环境变量的设置都在此处,例如可以设置JDK路径、TOMCAT路径
startup 用来启动tomcat
shutdown 用来关闭tomcat
修改catalina可以设置tomcat的内存
[conf]目录主要是用来存放tomcat的一些配置文件。
server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码
web.xml可以设置tomcat支持的文件类型
context.xml可以用来配置数据源之类的
tomcat-users.xml用来配置管理tomcat的用户与权限
在Catalina目录下可以设置默认加载的项目
[lib]目录主要用来存放tomcat运行需要加载的jar包。
例如,像连接数据库的jdbc的包我们可以加入到lib目录中来。
[logs]目录用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响)
在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中
在linux环境中,控制台的输出日志在catalina.out文件中
[temp]目录用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响) 
[webapps]目录用来存放应用程序
当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包、jar包的形式发布应用。
当然,你也可以把应用程序放置在磁盘的任意位置,在配置文件中映射好就行。
[work]目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件。
清空work目录,然后重启tomcat,可以达到清除缓存的作用。
 
Tomcat的配置文件server.xml
<?xml version='1.0' encoding='utf-8'?>
 
<!-- 完整的HTTP请求过程
用户(这里指的是使用同一台电脑的用户)发出一个请求,如http://localhost:8080/hello/index.jsp。
Conector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给符合条件的Engine
Engine通过请求中的主机名localhost查找满足条件的虚拟主机(Host)
找到后就去此虚拟主机指定的appBase(指项目所存放的目录)中去找名称为hello的项目
找到后就去此hello项目中的配置文件web.xml中找满足条件的虚拟路径/index.jsp
查找方式为:遍历所有<servlet-mapping>元素,看谁的<url-pattern>的值和用户请求的/index.jsp匹配(匹配逻辑)
找到后就根据<servlet-mapping>元素的<servlet-name>的值找<servlet>元素,看谁的<servlet-name>的值和它是一样的
找到后就执行此<servlet>元素中 <servlet-class>的值所指定的本项目src目录下的servlet类,如com.itheima.bqt.Login
执行后将产生的结果返回给用户 -->
 
<Server port="8005" shutdown="SHUTDOWN">
 
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
 
  <GlobalNamingResources>   
    <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 name="Catalina"> <!-- 在<Server>中只能有一个<Service>元素,它表示服务 -->
     <!-- 在<Service>中可以有N个<Connector>元素,它表示连接,不同的Connector针对不同的协议,我们只需关心处理HTTP协议的元素 -->
     <!-- port表示端口号,默认值为8080,修改为80以后在访问项目时就不用再给出端口号了,因为80是HTTP默认端口 -->
    <Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
    <!-- 在<Service>中只能有一<Engine>元素,它是处理引擎,用户最终连接最终是由Connector导入的Engine处理的 -->
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <!-- 在<Engine>中可以有N个<Host>元素,每个<Host>元素表示一个虚拟主机,每个主机都有自己的主机名name和项目目录appBase -->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
            <!-- 在<Host>中可以有N个<Context>元素,其中path指定的是项目虚拟路径,可以随意给出,docBase指定你的项目的真实存放的路径。指定后,访问时就不再通过项目名访问资源,而是通过path的值访问  -->
            <Context path="" docBase="D:\JAVA\tomcat6\我的主页"/><!--配置为此虚拟主机(即某个网站)的主页-->
      </Host>
      
      <!--定义了另一个虚拟主机及其此主机的相对路径,相当于可以将搜狐和新浪的网站在同一台服务器中运行-->
      <Host name="localhost2"  appBase="webapps2"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
 
  </Service>
 
</Server>
 
web应用的配置文件web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
//每定义一个servlet,eclipse都会自动配置<servlet>和 <servlet-mapping>标签
  <servlet>
    <servlet-name>Login</servlet-name>  //随意起一个[名字],不要有空格和中文
    <servlet-class>com.itheima.bqt.Login</servlet-class>  //此名字对应的类(即要调用的servlet)
  </servlet>
 
  <servlet-mapping>
    <servlet-name>Login</servlet-name>  //和上面的那个 <servlet-name>完全一致
    <url-pattern>/servlet/Login</url-pattern>  //为此名称对应的servlet指定一个[虚拟路径]
//注意:不管怎么配置,访问的时候前面都必须加上web应用的名称,如http://localhost:8888[/Login]/servlet/Login
//注意:配置时不要忘了要在前面加上[“/”],另外如果在后面加了“/”,访问时此“/”也必须在后面加上才可以
//注意:配置时只有一种情况是不需要在前面加“/”的,那就是使用[*.扩展名]通配符,但访问时,此“/”也不能少
//另外一种统配符格式为:[/xxx/*],当然[/*]也是可以的,此时,仅http://localhost:8888/Login便可访问
//注意:[*]不可以!,另外[*.扩展名]的匹配级别最低!
//注意:[/*]和[/](缺省servlet)效果不太一样,都不建议配置
//解疑:之所以不和<servlet>组合成一个标签,是为了实现一个<servlet>可以对应多个<servlet-mapping>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>    //会自动生成一个名为index.jsp的文件,并设置为
  </welcome-file-list>
</web-app>
 
默认的Servlet
关于/conf/web.xml中的DefaultServlet
首先所有的请求进入tomcat,都会流经servlet,如果没有匹配到任何应用指定的servlet,那么就会流到默认的DefaultServlet
DefaultServlet被定义在/conf/web.xml中,配置文件中被定义的东西会在Tomcat启动的时候被加载,对所有的webapp都有效。
DefaultServlet在Tomcat中主要是做目录列表(Directory Listing)用。
静态资源(JSP,HTML等)都走这个DefaultServlet~
    <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>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>  
 
其他
tomcat的配置文件server.xml不支持中文注释的解决办法:

    1、问题原因:server.xml头指定了使用utf8来解释这个文档内容,但是当我使用编辑器编辑这个文档的时候,输入的中文却不是utf8编码(而是ANSI编码),这样自然会出错。
    2、解决:解决起来也很容易,使用记事本打开xml文件,输入中文注释,然后选择另存为,在弹出的对话框中选择utf-8编码。或者使用editplus,ultraedit等编辑器打开xml文件,在相关的菜单中修改文件的编码为utf-8格式,然后保存,这样就可以正常使用中文注释了。
    3、总结,xml头定义中的encoding与xml文件自身的编码不一致会导致文件解释异常。
利用telnet演示向服务器请求访问web资源步骤:
cmd
telnet localhost 8888        (指定端口号)

ctrl+]

GET / HTTP/1.1        (这里访问的是主页)

Host:localhost

https://www.cnblogs.com/dion-90/articles/8917222.html

2 tomcat配置参数

1.内存参数调优

说明:tomcat初始堆内存8G;最大堆内存16G;新生代内存为最大堆内存的3/8,这里是6G;持久化内存默认82M,项目中使用月100M,必须重设,可以考虑256M或者更多,这个设置的2G,最大设置的是4G;
存活比率默认是2:8,这里使用的默认设置8,不宜调太小,避免垃圾回收过于频繁;-XX:+UseConcMarkSweepGC,垃圾并行回收,加快垃圾回收速率;

注意:内存参数,要依据系统实际内存调节,下面是省级应用服务器的tomcat内存参数,使用内存总计达20G,而省级总内存是32G,如果,系统总内存只有16G,相应内存全部减半,防止内存不足启动tomcat失败.

linux:
编辑%CATALINA_HOME%/bin/catalina.sh
JAVA_OPTS="-server -Xms8192m -Xmx16384m -Xmn6144m -XX:PermSize=2048M -XX:MaxPermSize=4096m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -Djava.awt.headless=true"

window:
编辑%CATALINA_HOME%/bin/catalina.bat
找到
set JAVA_OPTS=%JAVA_OPTS% -server -Xms8192m -Xmx16384m -Xmn6144m -XX:PermSize=2048M -XX:MaxPermSize=4096m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -Djava.awt.headless=true

2.端口号设置
%CATALINA_HOME%/conf/server.xml
关闭端口号:8005
http协议端口号:8080
adp协议端口号:8009

保证以上端口号,不能被占用!

3.tomcat连接设置
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" URIEncoding="utf-8"
               redirectPort="8443" acceptCount="1000" maxThreads="1200" />

说明:连接有效期单位毫秒,默认20000ms即20s;acceptCount连接数;最大线程数maxThreads;

注意:
连接数不要设置超过4000,windows下建议使用2000以下,linux下建议使用1000以下
因为WINDOWS默认是1024-5000,可用数不足4000,并且TCP/IP上限制相同的套接字对,在2分钟(有些操作系统时间定义略有不同)内不可重用!
操作系统对于进程中的线程数有一定的限制:
Windows 每个进程中的线程数不允许超过 2000
Linux 每个进程中的线程数不允许超过 1000
另外,在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。

3 Tomcat 配置成Windows服务

使用tomcat开发的项目,我们把项目交付给客户的时候,客户都不希望在每次开机的时候都要启动一下tomcat服务器,而希望他可以随系统启动。或者把他配置为windows的服务,随服务的启动而启动。但是绿色解压版的tomcat是不会直接在windows服务中出现的。需要我们进行配置才可以。

配置方法:

一 . 添加到 windows 服务中:(配置好环境变量,需要重启才会生效)

1、首先、在设置tomcat开机自动启动之前首先需要配置java的环境变量以及tomcat的环境变量,即:PATH,CLASSPATH,JAVA_HOME,CATALINA_HOME四个环境变量。配置方式说明:

PATH:配置到jdk的bin目录下;

CLASSPATH:配置到jdk的lib目录下;

JAVA_HOME:配置到jdk的根目录;

CATALINA_HOME:配置到tomcat的根目录;

具体配置及验证是否配置成功请参考其他文档。

2、在PATH变量最后加上以下这段:

;%CATALINA_HOME%\bin    (注意分号必不可少!)

%之间部分 表示引用CATALINA_HOME的值。

在配置这段的时候必须要把第一步的环境变量都配置好才可以。

3、打开运行(WIN+R),cmd,使用cmd命令进入tomcat安装路径的bin目录下:

然后执行 命令:service.bat install

出现  The service 'tomcat7' has been installed   说明设置服务成功。

4、打开windows服务:

(win键+R 同时按。输入service.msc。或者 依次打开 控制面板-管理工具-服务)

找到Apache Tomcat的服务修改它的运行级别(自动,手动 等)即可。

如果想让tomcat设为开机自动启动的话,双击这个服务,在启动类型中选择自动,确定即可。

这样在系统启动的时候,tomcat就会自动启动了,而且是不需要弹出dos窗口的。

二 . 从服务中移除

同样CMD到tomcat的bin目录下,执行service.bat remove,出现The service 

'tomcat6' has been removed说明取消成功,去服务里面会发现找不到名称为tomcat7的服务了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值