tomcat
tomcat介绍
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由java语言编写,需要运行在jvm虚拟机中。之所以Java的应用领域非常广泛,就是因为有JVM虚拟机的存在,如何操作系统或内核上只要运行了JVM虚拟机,那么就能够运行Java程序。Tomcat中提供了servlet、jsp代码所需的类库
JVM由C语言开发实现,既为Java程序提供运行环境,也提供诸多类库
Java技术的方向:J2SE、J2EE(在J2SE基础上添加了企业级组件)
servlet在JVM之上实现了CGI协议,扩展了JDK,因此能够通过CGI协议响应用户的请求,servlet是服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的HTML页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机
jsp风格的代码使得Java程序可以嵌入到HTML页面中
http://www.cnblogs.com/zhouyuqin/p/5143121.html
Java的JDK有两种,一是openJDK,另外一个是oracleJDK
tomcat原理及作用
web容器的作用
servlet(小程序)没有main方法,那我们如何启动一个servlet,如何结束一个servlet,如何寻找一个servlet等等,都受控于另一个java应用,这个应用我们就称之为web容器。
我们最常见的tomcat就是这样一个容器。如果web服务器应用得到一个指向某个servlet的请求,此时服务器不是把servlet交给servlet本身,而是交给部署该servlet的容器。要有容器向servlet提供http请求和响应,而且要由容器调用servlet的方法,如doPost或者doGet。
servlet需要由web容器来管理,那么采取这种机制有什么好处呢?
通信支持
利用容器提供的方法,你可以简单的实现servlet与web服务器的对话。否则你就要自己建立server搜创可贴,监听端口,创建新的流等等一系列复杂的操作。而容器的存在就帮我们封装这一系列复杂的操作。使我们能够专注于servlet中的业务逻辑的实现。
生命周期管理
容器负责servlet的整个生命周期。如何加载类,实例化和初始化servlet,调用servlet方法,并使servlet实例能够被垃圾回收。有了容器,我们就不用花精力去考虑这些资源管理垃圾回收之类的事情。
多线程支持
容器会自动为接收的每个servlet请求创建一个新的java线程,servlet运行完之后,容器会自动结束这个线程。
声明式实现安全
利用容器,可以使用xml部署描述文件来配置安全性,而不必将其硬编码到servlet中。
jsp支持
容器将jsp翻译成java!
tomcat搭建
rpm包安装
Tomcat RPM安装(先安装JDK + 再安装Tomcat)
1:升级系统自带的JDK(也可以使用oracle的JDK)
yum install -y java-1.8.0-openjdk-devel
安装好了可使用 java -version
2:由于Java开发的程序都需要运行在Java环境,因此一般只要是Java开发的程序,在安装JDK的同时,也需要将Java虚拟机导出到环境变量JAVA_HOME中,Java的虚拟机程序:/usr/bin/java
vi /etc/profile.d/java.sh 添加
export JAVA_HOME=/usr/bin
执行操作:
./etc/profile.d/java.sh
3:Tomcat相关程序介绍
tomcat.noarch: Servlet/JSP 引擎
tomcat-lib.noarch:Tomcat运行所依赖的库
tomcat-admin-webapps.noarch:web 应用程序的管理工具,可以在web页面管理APP
tomcat-webapps.noarch:应用程序示例,可以通过8080端口访问web页面
安装上述程序包 (对于RPM包安装的Tomcat而言,Tomcat的应用默认在/var/lib/tomcat/webapps目录下)
yum install -y tomcat.noarch tomcat-lib.noarch tomcat-admin-webapps.noarch tomcat-webapps.noarch
启动Tomcat(一般在生成环境中,使用普通用户启动Tomcat,因此需要修改Tomcat安装目录的属主和catalina.sh的属主为tomcat用户即可)
systemctl start tomcat.service
访问Tomcat的web页面
http://192.168.43.10:8080
tomcat编译安装
安装开发环境
yum -y groupinstall "Development Tools" "Development Libraries"
apache-tomcat-8.0.35.tar.gz下载地址:
http://tomcat.apache.org/download-80.cgi
tomcat-native.tar.gz 下载地址:
http://down.51cto.com/data/487154
jdk-6u30-linux-i586.bin下载地址:
http://down.51cto.com/data/487130
使用 tar -zxf 解压到 /usr/local/
tar -zxf jdk-6u30-linux-i586.bin.tar.gz /usr/local/
然后创建软链接
ln -sv /jdk-6u30-linux-i586.bin /usr/local/jdk
最后设置一下环境变量:
[root@localhost ~]# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
执行一下:
source /etc/profile.d/java.sh
解压到/usr/local
tar -zxf tomcat-native.tar.gz /usr/local
创建一个软链接
ln -sv apache-tomcat tomcat
查看
export CATALINA_HOME=/usr/local/tomcat
echo $CATALINA_HOME
启动tamcat
bin/catalina.sh start
下载二级制包
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.43/bin/apache-tomcat-8.5.43.tar.gz
2:解压,且创建连接文件
tar -zxf apache-tomcat-8.0.47.tar.gz -C /usr/local
ln -s /usr/local/apache-tomcat-8.0.47 /usr/local/tomcat
3:编辑/etc/profile.d/tomcat.sh文件,导出CATALINA_BASE(Tomcat的工作目录)境变量
vi /etc/profile.d/tomcat.sh 添加:
CATALINA_BASE=/usr/local/tomcat
#(CATALINA_BASE是tomcat引用实例的工作目录)
PATH=$CATALINA_BASE/bin:$PATH
export PATH CATALINA_BASE
4:启动Tomcat
catalina.sh start
5:访问Tomcat的web页面
http://192.168.43.11:8080
总结:其实呢编译安装tomcat无非就是
apache-tomcat与JDK下载,然后解压,然后启动并查看服务的端口(netstat -lntup )
tomcat配置
/etc/tolmcat/Server.xml详解
# 这是service类
<Service name="Catalina">
# 这是http连接器,响应用户请求
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
# 这是ajp连接器,响应用户请求
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
# 这是Engine,解析用户请求,请求指定默认的虚拟主机为localhost
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
# 这是默认的虚拟主机localhost
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
# 这里是第一个自定义的虚拟主机
<Host name="www.uplooking.com" appBase="/app/java"
unpackWARs="true" autoDeploy="true">
</Host>
# 这里是第二个自定义的虚拟主机
<Host name="www.home.com" appBase="/app/home"
unpackWARs="true" autoDeploy="true">
# 这里是用来定义虚拟主机的日志的,通常而言,日志格式需要格式化输出,使得tomcat的日志与httpd的日志一样,可以放在ELK中进行处理
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="uplooking_log" suffix=".log" pattern="%h %l %u %t %r %s %b %D %{Cookie}i %{User-Agent}i %{a}r/>
# 这里的Context组件中定义的path路径就相当于一个URI的映射,访问的目录为/data/app,这里需要注意的是在/data/app目录中,不能把资源放在ROOT目录下,只能放在/data/app目录下。也就是说浏览器访问的URL为:192.168.43.10:8080/app,访问文件系统上的资源是/data/app目录下的资源
<Context path="/app" docBase="/data/app" reloadable="true">
# 这里指定了访问控制的规则,deny表示拒绝访问
<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="192.168.23.2"/>
</Context>
</Host>
</Engine>
</Service>
</Server>
解决tomcat登录需要给角色授权
1:编辑/usr/local/tomcat/conf/tomcat-users.xml文件,在没有注 释的内容中添加:
<role rolename="manager-gui" />
<user username="tomcat" password="tomcat" roles="manager-gui" />
2:停止Tomcat应用,在启动Tomcat应用
catalina.sh stop
catalina.sh start
3:再次访问http://192.168.43.11:8080,且点击Manager App按钮,输入tomcat用户名,输入tomcat密码,即可登入