Tomcat的核心分为3个部分:
(1)Web容器---处理静态页面;
(2)catalina --- 一个servlet容器-----处理servlet;
(3)还有就是JSP容器,它就是把jsp页面翻译成一般的servlet。
1.******************MAC上使用tomcat:
eclipse使用内置tomcat和使用外部tomcat的设置:https://blog.csdn.net/renxyz/article/details/41311877
创建serverlet报红:https://blog.csdn.net/hagle_wang/article/details/78882430
eclipse中tomcat的运行原理:https://blog.csdn.net/suhang1992/article/details/82838341
参考一:https://blog.csdn.net/qq_35106903/article/details/78860121
参考二:https://blog.csdn.net/feng2qing/article/details/60968548
参考三:环境变量的配置https://www.jianshu.com/p/2d71aeb2c534
https://blog.csdn.net/xiaota00/article/details/78429924
安装tomcat步骤:
tomcat官网:https://tomcat.apache.org/download-90.cgi下载tomcat软件
查看tomcat版本,cd到tomcat bin目录,然后sh catalina.sh version
资源库有好几个:system下的资源库一般不要动,硬盘下的资源库是针对本机的,user下的资源库是针对本用户的。
**解压吧文件夹名字改成自己想要的(为了方便使用把这里把解压后的apache-tomcat-7.0.82重新命名为apachetomcat.),例如apachetomcat,放到资源库文件夹下面(/Users/自己的计算机名,例如 lambo/Library(就是资源库)/
目录下),也可以放到自己想要的任何位置。
**对目录进行权限设置:(sudo chmod 755 你Tomcat的位置/bin/*.sh)
打开终端输入 sudo chmod 755 Library/apachetomcat/bin/*.sh 回车,设置文件的读写执行权限;(这里需要输入管理员密码)
注释:sudo通常为系统超级管理员755 代表用户对该文件拥有读,写,执行的权限,同组其他人员拥有执行和读的权限,没有写的权限,其他用户的权限和同组人员权限一样。777代表,user,group ,others ,都有读写和可执行权限。
**启动tomcat
cd /Users/HaokeMaster/Library/apachetomcat/bin
执行 ./startup.sh
如果启动完成就会出现相应的提示:Tomcat started.
如果出现:-bash: ./startup.sh: Permission denied说明缺少权限;需要用命令chmod
修改一下bin
目录下的.sh
权限,
修改权限:chmod u+x *.sh
再执行 ./startup.sh
**测试tomcat是否启动成功:http://localhost:8088/
**关闭tomcat
./shutdown.sh有时候会关闭失败。解决办法:https://blog.csdn.net/bobozai86/article/details/93722270
tomcat的大概关闭过程:
1 停止连接处理线程Accepter,停止接受新的请求
2 关闭tomcat自身的资源,例如各种service,连接器,protocol,container
3 然后tomcat主线程结束了,就是执行BootStrap这个类的线程这是一个平滑关闭的过程,但是什么时候会导致所谓”tomcat无法关闭”?要更正一点,不是tomcat无法关闭,是执行tomcat的这个jvm无法关闭,这是本质的不同。
最根本的原因是:当前运行tomcat的jvm里还有非deamon的线程没有结束执行,例如被阻塞,或者还在执行任务。这个现象就是tomcat 端口都已经关闭了,但是java进程还在。tomcat的停止只是结束了自己的线程,关闭了自己的资源。但是应用开启的非deamon线程,这个 tomcat是无能为力的。
解决办法一:
第一步:修改Tomcat bin目录下catalina.sh文件 ;找到
1
PRGDIR=`
dirname
"$PRG"
`
这一行下面追加代码,(是为了记录pid进程号)
1
2
3
4
if
[ -z
"$CATALINA_PID"
];
then
CATALINA_PID=$PRGDIR
/CATALINA_PID
cat
$CATALINA_PID
fi
第二步:修改Tomcat bin目录下shutdown.sh文件;最后一句修改为如下
1
exec
"$PRGDIR"
/
"$EXECUTABLE"
stop -force
"$@"
即添加了参数 -force
*******问题:1.有时候tomcat启动成功了,但是localhost:8080访问不了,尝试改端口号和设置权限:chmod 777 *.sh
2.非正常停止服务启动报错为:
Existing PID file found during start.
Removing/clearing stale PID file.
使用kill -9 暴力杀死了tomcat,再启动的时候,会出问题,需要删除tomcat的pid文件
彻底停止tomcat的进程,然后删除pid文件
rm -rf /export/servers/xxxx/temp/oozie.pid
解决办法二,按下面步骤修改:
ps命令将某个进程显示出来
grep命令是查找
中间的|是管道命令 是指ps命令与grep同时执行
PS是LINUX下最常用的也是非常强大的进程查看命令
grep命令是查找,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
以下这条命令是检查java 进程是否存在:ps -ef |grep java
字段含义如下:
UID PID PPID C STIME TTY TIME CMD
zzw 14124 13991 0 00:38 pts/0 00:00:00 grep --color=auto dae
UID :程序被该 UID 所拥有
PID :进程号;就是这个程序的 ID
PPID :则是其上级父程序的ID
C :CPU使用的资源百分比
STIME :系统启动时间
TTY :登入者的终端机位置
TIME :使用掉的CPU时间。
CMD :所下达的是什么指令
使用命令ps -ef | grep tomcat 来查看tomcat是否还在运行。(也可以查看进程:lsof -i :80,杀死进程:kill 端口号)
如果你想直接杀死Tomcat进程,你可以使用kill命令,直接杀死Tomcat进程:kill -9 进程号。出现 501 78293 5223 0 4:27下午 ttys000 0:00.00 grep tomcat说明关闭成功。
修改下Tomcat内存,切换到bin目录下面,使用:vim catalina.sh
修改catalina.sh文件,在位置cygwin=false前,插入以下内容:
# OS specific support. $var _must_ be set to either true or false.
JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
cygwin=false
重启Tomcat即可。
*****配置环境变量
touch ~/.bash_profile // 将目录跳转到.bash_profile这个文件夹
open -t ~/.bash_profile //打开.bash_profile文件
这时候会弹出一个新的窗口输入,注意最后要加上/bin
export PATH=$PATH:/Users/HaokeMaster/Library/apachetomcat /bin
sudo su 申请权限(如果有权限,可以省略)
startup.sh 启动tomacat
shutdown.sh 关闭
***查看tomcat版本信息:sh catalina.sh version
*****在eclipse中配置tomcat:https://blog.csdn.net/zsjzwd/article/details/76551947、https://blog.csdn.net/mlyjqx/article/details/82285939
eclipse中找不到Server的解决办法:https://blog.csdn.net/qq_37471298/article/details/80980006
菜单栏eclipse-->preference->server-->Runtime Enviroment-->add选择tomcat的版本,然后一直next,(其中要填写tomcat的安装路径)->finish。
eclipse 中启动服务器注意事项:https://blog.csdn.net/zs20082012/article/details/79138204
**tomcat的目录结构:
/bin 用于Tomcat的命令文件,比如startup.bat和shutdown.bat;/conf 用于存放Tomcat服务器的配置文件; /lib 用于存放Tomcat服务器所需的Jar文件; /logs 用于存放Tomcat的日志文件; /temp 用于存放Tomcat运行时的临时文件;/webapps 当发布Web应用时,默认会将Web应用的文件发布到此目录;/work Tomcat把由Jsp生成的Servlet放于此目录下.
1>bin:存放tomcat命令
2>conf:存放tomcat配置信息,里面的server.xml文件是核心的配置文件
3>lib:支持tomcat软件运行的jar包和技术支持包(如servlet和jsp)
4>logs:运行时的日志信息
5>temp:临时目录
6>webapps:共享资源文件和web应用目录
7>work:tomcat的运行目录.jsp运行时产生的临时文件就存放在这里
***修改端口号:
用记事本打开ApacheTomcat的conf目录下的server.xml文件,将以下语句的port值8080改为自定义的端口号:
<Connector port="新端口号" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
**添加服务器密码:
在conf
目录的tomcat-users.xml
文件里</tomcat-users>
上面加入以下代码:
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
*********部署tomcat,运行第一个程序总结:
1.下载tomcat,放到自己指定的目录。
2.配置环境变量
3.本地启动tomcat,测试(本地启动和eclipse启动只能有一个)
4.在eclipse中部署tomcat,菜单栏-》preferences-〉Server-》Runtime Enviroment-〉add-》选择tomcat的版本-〉next-》填写name,选择tomcat的安装路径,jre可以默认也可以自己指定-〉finish
5.创建一个Dynamic web project,最后勾选上创建web.xml的选项。在WebContent目录下面创建html,jsp等文件(这几个文件在web。xml中的<welcome-file-list>下都有配置,index。jsp优先级最高)
6.吧上一步创建的project部署到tomcat。菜单栏window-》show view-〉servers-》(如果控制台地下有server了,需要删除后重新创建才能吧当前项目配置到服务器上),吧项目add,-》finish。这是在(默认是放在工作空间里的.metadata文件夹下)部署完成,在控制台下面的tomcat,右键start,然后选择左边的项目run on server启动项目。
7.双击控制台下的tomcat,serverlocation下选择use tomcat inition,指定deploy path(项目部署的位置,例如webapps)。重新运行程序。现在来到Tomcat的webapps目录下,发现多了一个XX文件夹(即工程文件名),并且文件夹下包含了工程文件中WebContent的内容。
eclipse默认的部署路径是wtpwebapp;Tomcat默认的部署路径是webapp;吧打好的war包放到webapp,重启tomcat,war包会被tomcat自动解压成同名的文件夹。
*******配置虚拟主机**********
1.在windows中:
2.在mac中:
名词解释:
unpackWARs="true" 自动解压war包
autoDeploy="true" 自动部署应用
path ="" 虚拟路径
docBase =“” 真实路径
appBase="" 虚拟主机地址
<Host></Host> 虚拟主机
<Context/> web应用
server.xml tomcat的虚拟主机配置文件 (也可以在/Users/HaokeMaster/Downloads/apachetomcat/conf/Catalina/中配置虚拟主机,创建的文件夹名就是虚拟主机名,虚拟主机文件下可以创建xml文件配置虚拟目录)
Hosts window中的用于模拟DNS服务的配置,能配置缺省地址127.0.0.1 为某个域名,这样当访问这个域名的时候,浏览器会先从本机Hosts中进行查询,查询到则跳转到应用,查询不到则到外部DNS解析器中去解析。
appBase
指定虚拟主机的目录,其作用是指定 tomcat 启动时,第一加载的项目,默认的为 webapps ,它代表的意思是加载 tomcat 根目录下 webapps 文件夹中的项目,也就是 tomcat 的管理页。
Context(表示一个web应用程序) :是一个虚拟主机目录下的一个应用程序,代表了运行在<Host>上的单个Web应用,用于将本地文件系统中的一个目录,映射成一个可供Web浏览器访问的虚拟根目录。一个<Host>可以有多个< Context>元素,每个Web应用必须有唯一的URL路径,这个URL路径在<Context>中的属性path中设定。 <Context>
中的docBase
,就是应用的物理路径, 应用程序的路径或者是WAR文件存放的路径。其作用是当需要发布多个项目时,可以在这里设置项目路径,值可以是绝对路径,也可以时相对于appBase的路径。用于指定该虚拟路径,所映射到的本地文件系统目录,可以使用绝对路径,或者相对于<Tomcat安装目录>/webapps的相对路径。
<Host>元素中的 appBase属性指定了一个路径,该路径将作为嵌套在它里面的<Context> 元素的docBase属性中设置的相对路径的基准路径。
path就是做的映射,path必须以 "/" 开头,否则会报错,当path=" "
时,docBase所指向的项目就是第一加载项目。表示此web应用程序的url的前缀,用于指定Web应用的虚拟路径 ,和项目本身没有关系,可以是任意值。
在设置appBase
和docBase
有个地方需要注意,当appBase的根路径和docBase的根路径一致时,会导致项目重复加载。
reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序。在开发阶段将reloadable属性设为true,有助于调试servlet和其它的class文件,但这样用加重服务器运行负荷,建议在Web 应用的发存阶段将reloadable设为false。
注意,修改后的server.xml文件,不会立即生效,必须重启Tomcat服务器
重启Tomcat服务器,刷新浏览器
举例说明:
1、appBase="webapps“,这是默认值,相对路径,代表:/Users/HaokeMaster/Downloads/apachetomcat/webapps 这样的路径,就是根目录;根目录下的 ROOT 目录,代表默认的主目录。
访问: http://localhost:8088 默认找 /Users/HaokeMaster/Downloads/apachetomcat/webapps/ROOT 下的文件(前提是没有设置docBase)
2、appBase=“/Users/HaokeMaster/Downloads/apachetomcat/webapps”,绝对目录,访问 http://localhost:8088 返回ROOT目录内容,访问http://localhost:8088/test返回/Users/HaokeMaster/Downloads/apachetomcat/webapps/test目录内容。
3、appBase=“webapps/abc”,相对目录,访问 http://localhost:8088 默认返回/Users/HaokeMaster/Downloads/apachetomcat/webapps/abc/ROOT的内容;访问http://localhost:8088/test返回/Users/HaokeMaster/Downloads/apachetomcat/webapps/abc/test的内容。
4、添加路径指向docBase后,appBase 作用变化:
docBase=“test”, 访问的是 /Users/HaokeMaster/Downloads/apachetomcat/webapps/test, appBase为根目录;
docBase="/test", 访问的是 /Users/HaokeMaster/Downloads/apachetomcat/webapps/test,appBase为根目录;
***虚拟目录的配置:
我们通常将web应用直接放到tomcat/webapps中,然后通过输入http://localhost:8080/项目名/index.html就可以访问到index.html页面。当有时我们需要将web应用和tomcat服务器进行分离。那我们该怎么做呢?我们可以配置虚拟目录。
配置虚拟目录的方法官方提供了五种。https://blog.csdn.net/zxssoft/article/details/80723298
方法一:apachetomcat/conf/server.xml中:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/>
<Context docBase="/Users/HaokeMaster/Downloads/apachetomcat/webapps/testoness" path="/mytestone" reloadable="true" source="org.eclipse.jst.jee.server:testoneones"/>
<Context docBase="/Users/HaokeMaster/Downloads/apachetomcat/webapps/testoness" path="/mytesttwo" reloadable="true" source="org.eclipse.jst.jee.server:testoneones"/>
</Host>
上面是配置了两个虚拟目录,http://localhost:8088/mytestone/和http://localhost:8088/mytesttwo/都可以访问。path中的虚拟路径就代表了docbase中的物理路径。
方法二:tomcat引擎是Catalina。在apachetomcat/conf/Catalina/虚拟主机(例如localhost)/test.xml(test就是虚拟目录)
*****虚拟主机的配置:
请求的过程:
1.基于IP 配置虚拟主机,不同的ip地址代表不同的主机,
更改重定向:sudo vi /etc/hosts ->按i进入编辑模式 ->编辑完成esc->:wq 回车完成。
把host中的name改成要配置的虚拟主机域名,用http://www.etaofresh.com:8088/mytesttwo就可以访问了
<Host appBase="webapps" autoDeploy="true" name="www.etaofresh.com" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/>
<Context docBase="/Users/HaokeMaster/Downloads/apachetomcat/webapps/testoness" path="/mytesttwo" reloadable="true" source="org.eclipse.jst.jee.server:testoneones"/>
</Host>
如果有缓存的话,先关闭服务器./shutdown.sh 再开启./startup.sh
2.基于端口配置虚拟主机,相同的域名或者ip地址,不同的端口,Service可以多个一样,只改变里面的端口
<Service name="">
<Connector connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8443"/>
<Host appBase="" autoDePloy="true" name="www.etaofresh.com" unpackWARs="true">
<Context path="" docBase="" />
</Host>
</Service>
3.虚拟主机也可以配置在apachetomcat/conf/Catalina/虚拟主机(主机域名就是文件夹名)