一.汇总
一个TomCat只有一个Server服务器,一个Server可以有多个Service
一个Service可以有多个Connector和 一个Container
1、Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
2、Container用于封装和管理Servlet,以及具体处理Request请求
二 Tomcat层级架构:服务器——服务——引擎——虚拟主机——web应用
三 配置
1.配置虚拟主机
1)在tomcat/server.xml文件中,<Enginee>标签内
<Host name="www.itcast.cn" appBase="C:\projects\itcastapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
name: 代表域名 appBase:代表存放所有web应用的目录
2)修改本地hosts文件,添加域名和ip地址的映射
127.0.0.1 www.itcast.cn
3)修改tomcat服务器的端口
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
改为:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
4)访问应用
http://www.itheima.cn/register/index.html
2.修改窗口标题名称
//在Tomcat的bin文件夹下 有一个catalina.bat文件,搜索“TITLE"
:doStart
shift
if "%TITLE%" == "" set TITLE=Tomcat
3.修改访问端口
//在conf下的 serve.xml文件 搜索"Connector"
<Connector port="18081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
4.启动中文乱码
//在conf下的logging.properties
java.util.logging.ConsoleHandler.encoding = UTF-8 改为 GBK
四。Idea构建tomcat源码
步骤
1.下载源码并导入到idea
2.把java文件夹标记为sources root,test文件夹标记为test sources root或直接删除
3.新建pom文件,并导入
4.运行org.apache.catalina.startup,BootStrap,浏览器输入http://localhost:8080
问题:
1.Error:osgi: [apache-tomcat-8.5.20-src] Invalid value for Bundle-Version, @VERSION@ does not match [0-9]{1,9}(.[0-9]{1,9}(.[0-9]{1,9}(.[0-9A-Za-z_-]+)?)?)? 只需要将@version@改为1.1就可以用了
2.进入localhost:xxx 页面无法进入jsp页面没有初始化,解决办法是在tomcat的源码org.apache.catalina.startup.ContextConfig中手动将JSP解析器初始化:
context.addServletContainerInitializer(new JasperInitializer(), null)
3.如果报java.lang.ClassNotFoundException: listeners.ContextListener错误,那么删除Webapps下面的example工程,
再次启动就成功了。。。因为example工程里面都是一些示例,在源码编译中会报错,干扰我们的正常启动,可以先删掉。
4.控制台日志乱码
vm optons加: -Duser.country=EN