Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
servlet(应用程序或者容器)是java提供的用于开发web服务器应用程序的一个组件,运行在服务器端,有servlet用于生成动态页面内容,servlet是平台立的java类,编写一个servlet,实际上就是安装servlet规范编写一个java类
Tomcat 处理请求和响应的过程是由servlet的程序来完成的,并且servlet是为例解决实现动态页面而衍生的东西,与我们之前了解的nginx或者apache想要实现动态页面需要和php服务器沟通的过程差不多,可以把servlet比作成php
Tomcat 是web应用服务器,是一个servlet/jsp容器,tomcat作为servlet容器,负责处理客户请求,并将servlet的响应传送给客户,而servlet是一种运行在java语言的服务器上的组件,servlet最常见的用途是扩展java web服务器功能,提供非常安全的,可以移植的(打包网页代码就可以在另外一个环境中运行,如linux系统跟windows环境),易于使用cgi替代品。
1.Tomcat是运行在JVM中的一个进程。它定义为【中间件】,顾名思义,是一个在Java项目与JVM之间的中间容器。
2.Web项目的本质,是一大堆的资源文件和方法。Web项目没有入口方法(main方法),,意味着Web项目中的方法不会自动运行起来。
3.Web项目部署进Tomcat的webapp中的目的是很明确的,那就是希望Tomcat去调用
写好的方法去为客户端返回需要的资源和数据。
4. Tomcat可以运行起来,并调用写好的方法。那么,Tomcat一定有一个main方法。
5. 对于Tomcat而言,它并不知道我们会有什么样的方法,这些都只是在项目被部署进webapp下后才确定的,由此分析,必然用到了Java的反射来实现类的动态加载、实例化、获取方法、调用方法。但是我们部署到Tomcat的中的Web项目必须是按照规定好的接口来进行编写,以便进行调用
6.Tomcat如何确定调用什么方法呢。这取却于客户端的请求,http://127.0.0.1:8080/JayKing.Tomcat.Study/index.java?show这样的一个请求,通过http协议,在浏览器发往本机的8080端口,携带的参数show方法,包含此方法的路径为JayKing.Tomcat.Study,文件名为:index.java。
1、浏览器发送请求数据
2、tomcat收到服务器的请求数据,由servlet容器处理并进行解析,并且把客户端的数据请求request改变成servlet request 交给后端的servlet 实例(或者或叫对象)实例收到客户端的请求数据的请求对象,进行出处理客户端的请求,处理完成后将数据响应给servlet容器,响应给servlet容器叫做servlet response。
3、Servlet收到的实例的响应数据交给客户端(如图)
Servlet(tomcat)容器与servlet实例需要通过java servlet api接口进行通信,api接口是由开发人员在写代码的时候定义或者编写的
4.servlet容器将收到的响应数据交给客户端
Servlet在Java代码中可以通过HttpServletResponse对象动态输出HTML内容;
JSP在静态HTML内容中嵌入Java代码,然后Java代码在被动态执行后生成HTML页面;
运行时占用的资源小,扩展性好,支持负载均衡和邮件服务器等开发应用系统常用的功能
下载Tomcat所需的软件包
[root@localhost ~]# rpm -qa | grep jdk
\\查询已安装的jdk包
copy-jdk-configs-1.2-1.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
[root@localhost ~]# rpm -e java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64 java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64 java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64 --nodeps
\\卸载系统自带的jdk环境
[root@localhost ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@localhost ~]# vim /etc/profile
//编写系统环境变量,在最后一行加以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_211 //指定java的路径
export JRE_HOME=/usr/local/jdk1.8.0_211/jre //java运行环境
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
//声明java中的类,类就是一类事务的属性,如各种盖饭最终他们的属性是饭
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
//将定义的变量添加到系统环境变量中
[root@localhost ~]# source /etc/profile //重新加载系统环境变量文件
[root@localhost ~]# tar zxf apache-tomcat-8.5.35.tar.gz
[root@localhost ~]# mv apache-tomcat-8.5.35 /usr/local/tomcat
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh \\启动tomcat
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_211/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# netstat -anpt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 16320/java
Bin:存放windows或linux平台上启动或者关闭tomcat的脚本文件
Conf:存放tomcat服务器的全局配置文件,其中最重要的是server.xml和web.xml
Lib:tomcat运行需要的库文件(jars)
Logs:tomcat运行时产生的日志文件
Temp:临时文件存放目录
Work:tomcat的工作目录,存放tomcat运行时的编译配置文件
Webapps:网页文件存放路径
Tomcat常用配置文件说明
Server.xml:tomcat的主配置文件,可以设置端口号,设置域名或者IP
Web.xml: 缺省的web app配置(也可以理解为是实现主配置文件没有定义到的功能:如目录遍历,定义错误页面类型)
Tomcat-users.xml:用来配置管理tomcat的用户与权限
Server:代表整个容器,实例的顶层元素,一个配置文件中只能有一个server元素,可以包含多个service。比如:
<Server port="8005" shutdown="SHUTDOWN">
//表示关闭Tomcat,使用telnet连接8005,输入shutdown指令
Service:提供完整jvm的独立组件,jvm表示Java虚拟机,是一个虚构出来的虚拟机,可以包含一个engine包含多个connector;
<Service name="Catalina">
//代表接受所有tomcat接受的请求,如果是Service name="apache"则表示接受所有apache转发过来的请求
Connector:接口定义,负责接受客户端的请求,以及向客户端返回响应的结构;
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
//port:接受数据的端口;protocol:设置http协议;
//Connection Timeout:与客户端的连接超时时间,-1代表不限制客户端的连接时间;
//Redirectport :当客户端请求是https将请求转发到8443去
Engine:处理客户端的请求,可以包含多个hots;
<Engine name="Catalina" defaultHost="localhost">
//name:是引擎名称,处理客户的请求默认去寻找localhost
Host:定义的虚拟主机,为特定的虚拟主机处理所有的客户端请求;
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
Context:运行在虚拟主机中的单个web应用;
过程
①用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得;
②Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应;
③Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host;
④Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理);
⑥path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类;
⑥构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序;
⑦Context把执行完之后的HttpServletResponse对象返回给Host;
⑧Host把HttpServletResponse对象返回给Engine;
⑨Engine把HttpServletResponse对象返回Connector;
⑩Connector把HttpServletResponse对象返回给客户Browser;
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
\\在zhe这个Hostname下添加以下内容
<Context path = "/xws" docBase = "/data/project" debug = "0" reloadable = "false" crossContext = "true">
</Context>
Path:指出访问的路径
docBase:指定存放的路径
Debug:指定debug的等级为0输出信息最少,9提供最多信息
Reloadable:为ture时当web.xml文件有改动的时候自动重新加载,不用重启服务
CorssContext:为ture时表示不同的context共享一个session(会话池)
[root@localhost ~]# mkdir -p /data/project
[root@localhost ~]# vim /data/project/index1.jsp
aaaaaaa
[root@localhost ~]# vim /data/project/index2.jsp
bbbbbbb
[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml
\\大约在112行中把false改为true
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh \\关闭服务
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_211/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh \\启动服务
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_211/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
//在host中添加
<Context path="/jiankong" docBase="/jk/jiankong" debug="0" reloadable=" false" crossContext="true"/>
[root@localhost /]# mkdir /jk/jiankong -p
[root@localhost /]# vim /jk/jiankong/index.jsp
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
long fm = rtm.freeMemory()/1024/1024;
out.println("JVM memory detail info :<br>");
out.println("Max memory:"+mm+"MB"+"<br>");
out.println("Total memory: "+tm+"MB"+"<br>");
out.println("Free memory: "+fm+"MB"+"<br>");
out.println("Available memmory can be used is :"+(mm+fm-tm)+"MB"+"<br>");
%>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh //重启tomcat服务
[root@localhost /]# vim /usr/local/tomcat/bin/catalina.sh
#----- Execute The Requested Command ----------------------------------------- //填写的内容必须在这行下面大约在309行
CATALINA_OPTS=" $CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
[root@localhost /]# cd /usr/local/jdk1.8.0_211/jre/lib/management/
[root@localhost management]# cp jmxremote.password.template jmxremote.password
[root@localhost management]# vim jmxremote.password //在最后一行添加,定义用户为xws,密码为123456,使用“wq!”强制保存退出
xws 123456
[root@localhost management]# vim jmxremote.access //定义用户权限的文件
xws readwrite \ //在倒数第三行。把原有的用户改为xws
[root@localhost management]# chmod 600 jmxremote.access
[root@localhost management]# chmod 600 jmxremote.password
[root@localhost management]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost management]# /usr/local/tomcat/bin/startup.sh
[root@localhost ~]# netstat -anpt | grep 8888
tcp6 0 0 :::8888 :::* LISTEN 58760/java
//确认刚才定义的端口8888在监听
[root@localhost /]# . /etc/profile
\\更新环境变量
[root@localhost /]# jconsole
[root@localhost /]# keytool -genkey -v -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/tomcat.keystore -validity 36500
//alias:别名,这里设置为tomcat;
//keyalg:证书算法,RSA;
//validity:证书有效期,单位为天
//keystore:指定证书存放路径,可以自定义
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: xws
您的组织单位名称是什么?
[Unknown]: aaa
您的组织名称是什么?
[Unknown]: bbb
您所在的城市或区域名称是什么?
[Unknown]: ccc
您所在的省/市/自治区名称是什么?
[Unknown]: wwwe
该单位的双字母国家/地区代码是什么?
[Unknown]: qwe
CN=xws, OU=aaa, O=bbb, L=ccc, ST=wwwe, C=qwe是否正确?
[否]: y
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 36,500 天):
CN=xws, OU=aaa, O=bbb, L=ccc, ST=wwwe, C=qwe
输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车):
[正在存储/usr/local/tomcat/conf/tomcat.keystore]
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /usr/local/tomcat/conf/tomcat.keystore -destkeystore /usr/local/tomcat/conf/tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml //可以添加也可以从原有的内容稍作修改即可
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" //将原本的8443改为443
maxThreads="150" SSLEnabled="true"
keystoreFile="/usr/local/tomcat/conf/tomcat.keystore" //指定证书存放路径
keystorePass="123456"> //指定生成证书所输入的密码
</Connector>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。