文章目录
一. 介绍
Javascript 简称JS
,是一种动态的弱类型脚本解释性语言,和HTML、CSS并称三大WEB核心技术,得到了几乎主流
浏览器支持
后台应用架构
- 单体架构
JSP、Servlet
打包成一个jar、war部署
服务器有开源的tomcat、jetty。商用的有Jboss、weblogic、websphere、glassfish商用的 - Dubbo
分布式服务框架
将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信
阿里开源贡献给了ASF
内部协调使用Zookeeper,实现服务注册、服务发现。有服务治理 - Spring cloud 微服务
将单体应用拆分为粒度更小的单一功能服务
RPC通信
需要更高的运维水平,服务太多了需要服务治理
1. java介绍
-
VM虚拟机。字节码运行在JVM之上
-
Java动态网页技术-----
servlet
本质就是java程序 -
jsp(Java Server Pages)
提供一个HTML
,把它变成一个模板,JSP是基于Servlet实现,JSP将表现和逻辑分离。
逻辑:JSP 先转换为 Servlet的源代码.java
文件(Tomcat中使用Jasper
转换),然后再编译成.class
文件,最后就可以在JVM中运行了 -
JDK:
JRE
:它是Java Runtime Environment缩写,指Java运行时环境, 包含 JVM + Java核心类库----运行用
JDK
:它是Java Development Kit,即 Java 语言的软件开发工具包----开发用
JDK协议是JRL
(JavaResearch License)协议
- OpenJDK:OpenJDK是Sun公司采用GPL v2协议发布的JDK开源版本
2. Tomact介绍
Tomcat仅仅实现了Java EE规范的与Servlet、JSP
相关的类库,是JavaEE不完整实现
二. 安装jdk
安装完–验证
yum安装openjdk
在Centos
中,可以使用
java
1. Oracle官网的JDK 8.rpm包
注意centos和oracle两个版本不能在一个机器
官网https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
第三方:https://www.jdkdownload.com/
rpm安装
yum install jdk-8u191-linux-x64.rpm
java
java -version
2. 配置环境变量
安装目录为/user/java
下
ln -sv /usr/local/src/jdk1.8.0_211/ /usr/local/jdk
vi /etc/profile.d/jdk.sh
export HISTTIMEFORMAT="%F %T `whoami` "
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=$PATH:$JAVA_HOME/bin
生效
. /etc/profile.d/jdk.sh
验证
echo $JAVA_HOME
二进制包安装.tar.gz
tar xvf 文件.tar.gz
vi /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile.d/jdk.sh
其他步骤同上
windows安装jdk
下载地址
注意先择windows版本的
三. 安装Tomcat(容器)
1. yum安装Tomcat
yum install tomcat tomcat-admin-webapps tomcat-webapps
systemctl start tomcat.service
enable
验证访问ip:8080
也可以创建/usr/share/tomcat/webapps/ROOT/index.html
再次访问
2. Apache官网下载Tomcat
tar xf apache-tomcat-8.5.42.tar.gz -C /usr/local
cd /usr/local
ln -sv apache-tomcat-8.5.42/ tomcat
cd tomcat
cd bin
./catalina.sh --help 查看帮助
./catalina.sh version
./catalina.sh start 开启tomcat服务
记住tomcat文件中的bin/catalina.sh
是一个服务脚本
./catalina.sh start
====./startup.sh
./catalina.sh start
====./shutdown.sh
ss -tanlp
验证访问ip:8080
也可以创建
echo "hello Tomcat 8.5" > /usr/local/tomcat/webapps/ROOT/index.html
再次访问
3. 为了安全考虑
为了安全尽可能的将权限缩小
useradd -r java
chown -R java.java /usr/local/tomcat/*
验证一下,先用root关掉服务,在web窗口验证
/usr/local/tomcat/bin/shutdown.sh
然后用java用户启动服务
su - java -c '/usr/local/tomcat/bin/catalina.sh start'
ps -aux | grep tomcat
4. 目录结构介绍
配置文件conf
5. 组件分类
- 顶级组件
Server
,代表整个Tomcat容器, - 服务类组件
Service
,组织Engine和Connector,里面只能包含一个Engine - 连接器组件
Connector
,有HTTP、HTTPS、A JP协议的连接器 - 容器类
Engine
、Host
、Context
都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。 - 内嵌类
可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内定义。 - 集群类组件
listener、cluster
说明:一个server里面可以有多个service,一个service里面只能有一个engin,一个engin里面可以有多个端口
Server
: Tomcat运行的进程实例
Service
用来组织Engine和Connector的关系
Connector
负责客户端的HTTP、HTTPS、AJP
等协议的连接。一个Connector只属于某一个Engine
Engine
响应并处理用户请求。一个引擎上可以绑定多Connector
Host
虚拟主机
Context
应用的上下文,配置路径映射path => directory
AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。
核心组件
- Tomcat启动一个Server进程。可以启动多个Server,但一般只启动一个
- 创建一个Service提供服务。可以创建多个Service,但一般也只创建一个
每个Service中,是Engine和其连接器Connector的关联配置 - 可以为这个Server提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同的端口。其作
用就是处理来自客户端的不同的连接请求或响应 - Service内部还定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host
Engine对请求头做了分析,将请求发送给相应的虚拟主机
如果没有匹配,数据就发往Engine上的defaultHost缺省虚拟主机
Engine上的缺省虚拟主机可以修改 - Host定义虚拟主机,虚拟主机有name名称,通过名称匹配
- Context定义应用程序单独的路径映射和配置
实例
假设来自客户的请求为:http://localhost:8080/test/index.jsp
- 浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1 Connector
获得此请求。 - Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应
- Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host。
- Engine匹配到名为localhost的Host。即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机
- localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
- Host匹配到路径为/test的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对象返回给浏览器端
6. tomcat启动脚本
准备 tomcat 启动脚本:
cp /root/tomcat /etc/init.d/
vim /etc/init.d/tomcat
#!/bin/bash
JDK_HOME=/usr/local/jdk
CATALINA_HOME=/usr/local/tomcat
export JDK_HOME CATALINA_HOME
source /etc/profile
#PID=`ps -ef | grep -v grep | grep java | awk '{print $2}'`
#NUM=`ps -ef | grep -v grep | grep java | awk '{print $2}' | wc -l`
#case $1 in
start() {
echo "正在判断服务状态,请稍等!"
echo "请稍等3秒钟"
echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
if netstat -an | grep 8080 | grep LISTEN >/dev/null
then
echo "Tomcat已经正在运行了!"
else
echo "Tomcat没有运行,1秒后启动!"
echo 1;sleep 1
$CATALINA_HOME/bin/catalina.sh start
echo "Tomcat 已经成功启动完成,5秒后判断是否启动成功"
echo "5";sleep 1;echo "4";sleep 1
echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
if netstat -an | grep 8080 | grep LISTEN >/dev/null
then
PID=`ps -ef | grep tomcat | grep jdk | awk '{print $2}'`
NUM=`ps -ef | grep tomcat | grep jdk | awk '{print $2}' | wc -l`
echo "Tomcat 已经成功启动${NUM} 个Tomcat进程!,PID为${PID}"
else
echo "Tomcat启动失败,请重新启动!"
echo 1
fi
fi
}
stop() {
PID=`ps -ef | grep -v grep | grep java | awk '{print $2}'`
NUM=`ps -ef | grep -v "color" | grep tomcat | awk '{print $2}' | wc -l`
echo "正在判断服务状态,请稍等3秒钟!"
echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
if netstat -an | grep 8080 | grep LISTEN >/dev/null
then
echo "Tomcat运行中,1秒后关闭!"
echo 1;sleep 1
echo "即将关闭Tomcat服务,请稍等!"
$CATALINA_HOME/bin/catalina.sh stop ;echo "已经执行关闭命令,正在检查关闭了多少Tomcat进程,请稍等30秒钟!"
sleep 27
echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
pkill java && pkill tomcat
if netstat -an | grep 8080 | grep LISTEN >/dev/null;then
PID=`ps -ef | grep -v grep | grep java | awk '{print $2}'`
NUM=`ps -ef | grep -v "color" | grep tomcat | awk '{print $2}' | wc -l`
kill -9 $PID ;echo "已成功关闭${NUM} 个tomcat进程"
else
echo "Tomcat 已经关闭完成!"
echo "3";sleep 1;echo "2";sleep 1;echo "1";sleep 1
fi
else
echo "Tomcat 没有运行"
echo 1
fi
if netstat -an | grep 8080 | grep LISTEN >/dev/null;then
PID=`ps -ef | grep -v grep | grep java | awk '{print $2}'`
#NUM=`ps -ef | grep -v "color" | grep tomcat | awk '{print $2}' | wc -l`
echo "关闭失败,即将强制删除tomcat进程!"
sleep 2
pkill tomcat ;sleep 2
if netstat -an | grep 8080 | grep LISTEN >/dev/null;then
echo "强制关闭失败,即将再次强制删除tomcat进程!"
pkill java; sleep 2
fi
fi
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
esac
chmod +x /etc/init.d/tomcat
启动 tomcat:
/etc/init.d/tomcat start
为了可以远程使用tomcat这个文件
echo 密码 | passwd --stdin www
在远程就可以
ssh www@IP "/etc/init.d/tomcat start"