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的服务了。

Tomcat学习总结相关推荐

  1. TOMCAT学习笔记

    TOMCAT学习笔记 (2011-10-03 17:03:26) 转载▼ 标签: 杂谈 分类: 编程 2011年10月3日 1.TOMCAT总体来说由两部分组成:connector和container ...

  2. Tomcat学习笔记02【Tomcat部署项目】

    Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...

  3. Tomcat学习笔记01【Web相关概念、Tomcat基本操作】

    Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...

  4. javaweb+themeleaf+Tomcat学习——org.thymeleaf.exceptions.TemplateProcessingException

    org.apache.catalina.core.StandardWrapperValve.invoke 在路径为[]的上下文中,servlet[servlets.selectListServlet] ...

  5. Tomcat学习之Tomcat架构

    前段时间想学习下tomcat,在网上找了一些资料,放在这里以备忘: 1,tomcat架构: Server: 其实就是BackGroud程序, 在Tomcat里面的Server的用处是启动和监听服务端事 ...

  6. 【01 Tomcat 学习】

    Tomcat 学习 笔记记录 一.Tomcat 1. Tomcat目录 2. Tomcat启动 3. Tomcat部署项目 4. 解决Tomcat启动乱码问题 5. JavaWeb项目创建部署 6. ...

  7. Tomcat学习总结(3)——Tomcat优化详细教程

    Tomcat是我们经常使用的 servlet容器之一,甚至很多线上产品都使用 Tomcat充当服务器.而且优化后的Tomcat性能提升显著,本文从以下几方面进行分析优化. 一.内存优化 默认情况下To ...

  8. Tomcat学习总结(7)——Tomcat与Jetty比较

    Jetty 基本架构 Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器. 它有一个基本数据模型,这个数据模型就是 Handler(处理 ...

  9. Tomcat学习笔记(三)—— Server组件

    前面已经初步了解了Server组件是什么东西及其作用.在这里进一步对Server组件进行研究学习. Server组件 从Tomcat的层次结构中已经知道Server组件是Tomcat最顶层组件,它可以 ...

  10. Tomcat学习记录

    Tomcat是什么? Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一个免费的开放 源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问 用户不是很多的场合下被 ...

最新文章

  1. php如何存到磁盘,php缓存----磁盘缓存
  2. hdu4821 字符串hash(有多少(M*L长的,M个不相同)子串))
  3. Vue页面手动刷新,导航栏激活项还原到初始状态问题解决方案
  4. boost::timer库使用
  5. 设计模式:原型模式(C++)【克隆羊多莉】
  6. jQuery解决ajax请求的跨域问题
  7. 硬核干货来啦:Js数组去重,赶快收藏吧
  8. 开发工具总结(6)之Android Studio模板配置详解(提高开发效率必备技能)
  9. 显色指数(CRI)计算软件-升级版可视化界面
  10. echarts + vue2.0 实现大数据监测态势感知系统
  11. C++大法:举世闻名之BOOST大法精华浅析(三)内存管理库(小白piao分享)
  12. 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(解答篇)...
  13. erlang httpc
  14. 进度和质量哪个重要?这个梗工作中反反复复!
  15. Springboot内嵌tomcat
  16. Java中的@Test注解
  17. 计算机网络中tx和fx,100Base-TX/T4/FX以太网含义及用法
  18. AGC 012 E Camel and Oases - 状压dp
  19. CMT2380F32模块开发20-射频收发例程
  20. 模拟dns优选,处理dns的响应时间

热门文章

  1. LaTeX 的对参考文献的处理
  2. linux 分区 var,Ubuntu下移动/var目录到单独分区后出现的一些问题
  3. AJAX POST 请求
  4. 转载:JavaScript,JS如何控制input输入字符限制
  5. windows、linux下命令行登录oracle数据库方法,查询sga参数值sql语句
  6. Python 微信机器人-通过wxpy库向指定名称的好友发送微信消息实例演示
  7. 第八周实践项目10 稀疏矩阵的十字链表表示
  8. Given an integer, write a function to determine if it is a power of two
  9. android控制小米设备吗,智能设备一指连:小米 UWB 技术发布,手机指向设备直接操控...
  10. win10+tensorflow:ImportError: No module named '_pywrap_tensorflow_internal',这波操作真让人窒息