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的服务了。
Tomcat学习总结相关推荐
- TOMCAT学习笔记
TOMCAT学习笔记 (2011-10-03 17:03:26) 转载▼ 标签: 杂谈 分类: 编程 2011年10月3日 1.TOMCAT总体来说由两部分组成:connector和container ...
- Tomcat学习笔记02【Tomcat部署项目】
Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...
- Tomcat学习笔记01【Web相关概念、Tomcat基本操作】
Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...
- javaweb+themeleaf+Tomcat学习——org.thymeleaf.exceptions.TemplateProcessingException
org.apache.catalina.core.StandardWrapperValve.invoke 在路径为[]的上下文中,servlet[servlets.selectListServlet] ...
- Tomcat学习之Tomcat架构
前段时间想学习下tomcat,在网上找了一些资料,放在这里以备忘: 1,tomcat架构: Server: 其实就是BackGroud程序, 在Tomcat里面的Server的用处是启动和监听服务端事 ...
- 【01 Tomcat 学习】
Tomcat 学习 笔记记录 一.Tomcat 1. Tomcat目录 2. Tomcat启动 3. Tomcat部署项目 4. 解决Tomcat启动乱码问题 5. JavaWeb项目创建部署 6. ...
- Tomcat学习总结(3)——Tomcat优化详细教程
Tomcat是我们经常使用的 servlet容器之一,甚至很多线上产品都使用 Tomcat充当服务器.而且优化后的Tomcat性能提升显著,本文从以下几方面进行分析优化. 一.内存优化 默认情况下To ...
- Tomcat学习总结(7)——Tomcat与Jetty比较
Jetty 基本架构 Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器. 它有一个基本数据模型,这个数据模型就是 Handler(处理 ...
- Tomcat学习笔记(三)—— Server组件
前面已经初步了解了Server组件是什么东西及其作用.在这里进一步对Server组件进行研究学习. Server组件 从Tomcat的层次结构中已经知道Server组件是Tomcat最顶层组件,它可以 ...
- Tomcat学习记录
Tomcat是什么? Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一个免费的开放 源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问 用户不是很多的场合下被 ...
最新文章
- php如何存到磁盘,php缓存----磁盘缓存
- hdu4821 字符串hash(有多少(M*L长的,M个不相同)子串))
- Vue页面手动刷新,导航栏激活项还原到初始状态问题解决方案
- boost::timer库使用
- 设计模式:原型模式(C++)【克隆羊多莉】
- jQuery解决ajax请求的跨域问题
- 硬核干货来啦:Js数组去重,赶快收藏吧
- 开发工具总结(6)之Android Studio模板配置详解(提高开发效率必备技能)
- 显色指数(CRI)计算软件-升级版可视化界面
- echarts + vue2.0 实现大数据监测态势感知系统
- C++大法:举世闻名之BOOST大法精华浅析(三)内存管理库(小白piao分享)
- 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(解答篇)...
- erlang httpc
- 进度和质量哪个重要?这个梗工作中反反复复!
- Springboot内嵌tomcat
- Java中的@Test注解
- 计算机网络中tx和fx,100Base-TX/T4/FX以太网含义及用法
- AGC 012 E Camel and Oases - 状压dp
- CMT2380F32模块开发20-射频收发例程
- 模拟dns优选,处理dns的响应时间
热门文章
- LaTeX 的对参考文献的处理
- linux 分区 var,Ubuntu下移动/var目录到单独分区后出现的一些问题
- AJAX POST 请求
- 转载:JavaScript,JS如何控制input输入字符限制
- windows、linux下命令行登录oracle数据库方法,查询sga参数值sql语句
- Python 微信机器人-通过wxpy库向指定名称的好友发送微信消息实例演示
- 第八周实践项目10 稀疏矩阵的十字链表表示
- Given an integer, write a function to determine if it is a power of two
- android控制小米设备吗,智能设备一指连:小米 UWB 技术发布,手机指向设备直接操控...
- win10+tensorflow:ImportError: No module named '_pywrap_tensorflow_internal',这波操作真让人窒息