程序语言 | 应用级:java(解释器:jdk) 脚本级:shell,ruby,perl,lua 如果人的语言为0,机器语言为200 脚本级语言过程就是:0----> 200 应用级:先编译,后解释。 0----中间型语言100(编译)----(解释)----机器语言200 0-100在客户端,100-200在服务端,相当于只用了脚本级的一半时间,所以Java效率更高。而在客户端是编译的过程,服务端是解释的过程。 Java的编译实际上是在开发的客户端上完成的。当开发给我们代码的时候,实际上已经完成了编译的过程。我们放置于服务器上,通过tomcat平台启动的时候,tomcat完成的是中间代码解释成机器代码的过程,时间短,运行效率高。 |
0-200这个过程是在服务器上完成解析的,我们将php或shell脚本放到服务器上,通过启动进程,来完成解析。在服务器上是一行一行进行解析的,因此,对于php代码来说,如果我们突然更换了php代码文件,并不需要重启php进程,因为php进程在解析的时候,会重新读取硬盘上的php代码。 但是JAVA运行在封闭的JVM容器环境中,JAVA的类文件是一次性被读取到JVM进程中的,就算类文件更新,JAVA也不会重启读取,因此,我们更新服务端的JAVA代码,必须重启JVM进程,也就是重启tomcat。 | |
Java 体系 | 开发编写的java配置源码和java公共函数一起进行编译,编译过后就成了类文件。 Tomcat也叫做java虚拟包,也就是JVM 当tomcat启动的时候,内存中会生成一个叫做JVM的进程。JVM是一种容器化的进程。这个进程内部和外部的系统环境是完全隔开的,内部无法沟通外部的系统环境。这就导致程序的依赖包如果在JVM外面是不会对程序起到任何作用的。所以,Java进程的依赖包都要放到JVM里。 Maven:下载并打包。 装载后,maven通过pom.xml文件在互联网下载依赖程序,然后将依赖程序和class类文件整理打包,将其变成xxx.war,也就是war包;不需要下载依赖的,打出的包叫做xxx.jar,称为微服务。 运维将war包放到服务器中,启动tomcat后,内存就生成了JVM进程。JVM进程分为两部分,一个叫做class loader类装载器,另一个叫做执行引擎 (解释器)。其中的类文件被装到类装载器里;依赖包别运行在JVM的环境里;OS系统的公共类也会装载到类装载器里。执行引擎对代码进行解释,解释后,就变成了二进制程序,也就是机器码,然后计算机就可以执行了。 |
软件的体系架构 | 软件有两种架构:B/S(Web/Server)和C/S(Client/Server) JAVA体系的架构:C/S JAVA的B/S架构:前置原理 从Java到jsp中途经过了一个servelet格式,其作用是通过JAVA代码封装了html语言。 JSP:(java+server+pages):运行于服务端的java程序,遵循servlet格式标 准。 JS:(javascript):网页中的脚本语言(html管理内容,css管理位置,js管理动作) Java代码被封装进了html语言,网页变成了JSP,整个流程就变成了: index.jsp -- > Servlet(转译器) -- > index_jsp.javaC(编译器) -- > index_jsp.class -- > class loader(加载器) -- > JVM |
定义 | Tomcat服务器是一个免费的开发源代码的Web应用服务器,属于轻量级应用服务器,应用于中小型系统和并发访问用户不是很多的场合下。 Tomcat和Nginx,Apache(httpd),lighttpd等Web服务器一样,具有处理HTML页面的功能,另外他还是一个Servlet和JSP容器,独立的servlet容器是Tomcat默认模式。不过Tomcat处理静态HTML能力不如Nginx/Apache服务器。 Servlet:小服务程序或服务连接器,用Java编写的服务器端程序,具有独立 于平台和协议的特性,主要功能在于交互地浏览和生成数据,生成动态Web内容。 JSP:Java服务器页面,是一种动态网页技术标准。JSP在传统网页HTML文件中插入Java程序段和JSP标记,从而形成JSP文件,后缀为*.jsp。用JSP开发地Web应用是跨平台地,既能在Linux下运行,也能在其他操作系统上运行。 |
TOMCAT 架构解析 | Tomcat启动产生JVM进程,JVM进程分为classloader和执行引擎,其中执行引擎中放的是虚拟网站。Tomcat对应server标签,JVM对应service标签,执行引擎对应engine标签,虚拟网站对应host标签。 |
Tomcat主配置文件 Server.xml | Server.xml组件类别: 顶级组件:位于整个配置的顶层,如:server 容器类组件:可以包含其他的组件,如:service,engine,host,context 连接器组件:来凝结用户请求到tomcat,如:connector 被嵌套类组件:位于一个容器中,不能包含其他组件,如:Valve,logger |
组件详解 | |
主配置文件注释: Tomcat定义了tomcat的管理端口:8005端口收到的SHUTDOWN字段就会关闭tomcat 在service中,监听端口,8080HTTP协议,8009AJP(工作中一般注释掉) 对外监听8080端口然后跳转到8443 当我们安装jdk后,会自动生成jar命令,用来解包,同tar包解包方式相同,jar xf war包。一般重启tomcat会自动解包。 | |
网页路径 | 如果tomcat一个网页连接为: http://192.168.200.6:8080/memtest/meminfo.jsp 要想实现使用: http:/192.168.200.6:8080/meminfo.jsp,那么只需将meminfo.jsp网页放到ROOT目录即可,该目录是tomcat的根目录,可以直接放置jsp代码。 所以ROOT目录即便为空,也是不能删除的。 |
Tomcat集群 | 同一台服务器启动多个tomcat的方法 Nginx处理静态网页,php处理动态网页 Tomcat动态静态网页都可以处理,但是处理静态很慢,因此我们通常也是LNMP的架构。 Nginx是通过proxy_pass(反向代理)推送到8080端口。 Jpress就是java版本的wordpress。 |
Tomcat 优化 | 降权启动 telnet管理端口保护 ajp连接端口保护 禁用管理端 |
Tomcat安装部署
环境 | 使用x-shell上传压缩包和源码包 | |
1.部署JAVA环境jdk | ||
1.1 | [root@02 ~]# tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local //解压数据包到安装目录 [root@02 ~]# ln -s /usr/local/jdk1.8.0_60 /usr/local/jdk //优化安装目录 [root@02 ~]# sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile //修改环境变量 | |
1.2 | [root@02 ~]# tail -3 /etc/profile //查看环境变量配置 | |
1.3 | [root@02 ~]# source /etc/profile //让环境变量立刻生效 | |
1.4 | [root@02 ~]# which java //查看是否存在java命令 [root@02 ~]# java -version //查看java版本,如果有信息,表示安装成功 | |
2.安装Tomcat | ||
2.1 | [root@02 ~]# tar xf apache-tomcat-8.0.27.tar.gz -C /usr/local //解压tomcat压缩包到安装位置 [root@02 ~]# ln -s /usr/local/apache-tomcat-8.0.27/ /usr/local/tomcat //优化安装位置 [root@02 ~]# ln -s /usr/local/tomcat/bin/* /usr/bin/ //优化启动脚本到/usr/bin下 | |
2.2 | [root@02 ~]# echo 'export TOMCAT_HOME=/usr/local/tomcat' >> /etc/profile //配置tomcat环境变量 [root@02 ~]# source /etc/profile //让环境变量立即生效 | |
2.3 | [root@02 ~]# chown -R root.root /usr/local/jdk/ /usr/local/tomcat/ //更改tomcat配置安装目录属主和属组 | |
2.4 | [root@02 ~]# tail -4 /etc/profile //检查环境变量配置情况 | |
2.5 | [root@02 ~]# cd /usr/local/tomcat //进入tomcat安装目录 [root@02 tomcat]# tree -L 1 //使用树命令查看当前目录内容 | |
2.6 | [root@02 tomcat]# cd webapps/ | |
2.7 | [root@02 ~]# startup.sh //启动tomcat | |
2.8 | [root@02 ~]# netstat -antup | grep java //查看java的启动情况 | |
2.9 | [root@02 ~]# service iptables stop //关闭防火墙 在浏览器导航栏输入IP地址加上8080端口进行IP访问 | |
2.10 | [root@02 ~]# cd /usr/local/tomcat/logs //进入tomcat日志目录 [root@02 logs]# cat catalina.out //通过catalina.out可以查看tomcat日志 | |
2.11 | [root@02 ~]# cd /usr/local/tomcat/conf/ //进入tomcat配置文件目录 Tomcat的主配置文件与普通的主配置文件略有不同,其并非.conf结尾,而是server.xml作为其主配置文件 | |
2.12 | [root@02 conf]# vim tomcat-users.xml //进入tomcat管理用户配置文件进行添加内容 PS:这里的username=“tomcat”,password=“tomcat”,表示登录的账号和密码为tomcat,要记好,下面登录游览器测试会用,否则将报错。 | |
2.13 | [root@02 conf]# tail -4 tomcat-users.xml //查看后四行 | |
2.14 | [root@02 conf]# shutdown.sh [root@02 conf]# startup.sh //重启tomcat服务 | |
2.15 | 在浏览器地址栏输入:http://自己的IP:8080/manager/status 输入自己创建的账号和密码,进行登录 | |
3.WEB站点部署 | ||
3.1 | [root@02 ~]# cp memtest.war /usr/local/tomcat/webapps/ //将war包拷贝到webapps目录下 [root@02 ~]# ls /usr/local/tomcat/webapps/ //查看目录中的内容 | |
3.2 | [root@02 ~]# startup.sh //重启tomcat,重启后war包将自动解压 | |
3.3 | 在浏览器输入http://192.168.200.6:8080/memtest/meminfo.jsp | |
3.4 | 自定义默认网站目录 将放在memtest目录的meminfo.jsp网页移动到ROOT目录中,就可以使用 http:192.168.200.6:8080/meminfo.jsp进行访问页面。 ROOT是tomcat默认存放网页的根,即便ROOT为空,也不能将其删除。 | |
4.tomcat多实例及集群架构 | ||
4.1 | [root@02 ~]# cd /usr/local //进入应用程序安装目录 [root@02 local]# cp -a apache-tomcat-8.0.27 tomcat8_1 [root@02 local]# cp -a apache-tomcat-8.0.27 tomcat8_2 //使用cp命令给apache-tomcat-8.0.27更改名称为tomcat8_1和tomcat8_2 | |
4.2 | [root@02 local]# mkdir -p /data/www/www/ROOT //递归创建ROOT目录 [root@02 local]# cp /usr/local/tomcat/webapps/memtest/meminfo.jsp /data/www/www/ROOT/ //将meminfo.jsp网页文件拷贝到新创建的ROOT目录下 | |
4.3 | [root@02 local]# cat -n /usr/local/tomcat/conf/server.xml | sed -n '22p;69p;123p' //代行号查看tomcat主配置文件,只看第22,69,123行 [root@02 local]# sed -i '22s#8005#8011#;69s#8080#8081#;123s#appBase=".*"#appBase="/data/www/www"#' /usr/local/tomcat8_1/conf/server.xml //修改tomcat主配置文件,注意,这里是更改后的tomcat8_1而非tomcat-8.0.27 [root@02 local]# sed -n '22p;69p;123p' /usr/local/tomcat8_1/conf/server.xml //查看第22,69,123行被修改后的结果 [root@02 local]# sed -i '22s#8005#8011#;69s#8080#8081#;123s#appBase=".*"#appBase="/data/www/www"#' /usr/local/tomcat8_2/conf/server.xml //修改tomcat主配置文件,注意,这里是更改后的tomcat8_2而非tomcat-8.0.27 [root@02 local]# sed -n '22p;69p;123p' /usr/local/tomcat8_2/conf/server.xml //查看第22,69,123行 | |
4.4 | [root@02 local]# /usr/local/tomcat8_1/bin/startup.sh //启动tomcat8_1 [root@02 local]# /usr/local/tomcat8_2/bin/startup.sh //启动tomcat8_2 | |
4.6 | [root@02 local]# netstat -antup | grep java //查看tomcat启动情况 | |
4.7 | 在浏览器导航栏输入:http:192.168.200.6:8081/meminfo.jsp和 http:192.168.200.6:8082/meminfo.jsp | |
5.nginx+tomcat反向代理集群 | ||
5.1 | [root@ local]# yum -y install pcre-devel openssl-devel //安装支持包 [root@ local]# useradd -s /sbin/nologin -M www //创建程序用户 [root@ local]# tar xf nginx-1.10.2.tar.gz -C /usr/src //解压压缩包 [root@ local]# cd /usr/src/nginx-1.10.2/ //进入nginx目录 [root@02 nginx-1.10.2]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module && make && make install //源码编译 [root@ 02 nginx-1.10.2]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin //优化命令路径 [root@ 02 nginx-1.10.2]# /usr/local/nginx/sbin/nginx //启动nginx [root@02 local]# egrep -v "#|^$" /usr/local/nginx/conf/nginx.conf.default > /usr/local/nginx/conf/nginx.conf //创建配置文件模板 [root@02 conf]# vim nginx.conf //进入配置文件进行修改
[root@02 conf]# nginx -t //检查配置文件是否有误 [root@02 conf]# nginx //启动nginx [root@02 conf]# netstat -antup | grep nginx //查看nginx启动情况 | |
6.安装jpress | ||
6.1 | [root@02 ~]# tar xf apache-maven-3.3.9-bin.tar.gz -C /usr/local //解压压缩包到安装目录 | |
6.2 | [root@02 ~]# ln -s /usr/local/apache-maven-3.3.9/ /usr/local/maven //优化安装目录 | |
6.3 | [root@02 ~]# vim /etc/profile //进入环境变量配置文件,手动添加两行美容 [root@02 ~]# tail -2 /etc/profile //查看环境变量 [root@02 ~]# source /etc/profile //应用环境变量配置 | |
6.4 | [root@02 ~]# mvn -version //版本检测,出现如下提示,表示成功 | |
6.5 | [root@02 ~]# mv jpress-web-newest.war /data/www/www/ROOT/ //移动war包到ROOT目录下 [root@02 ~]# cd /data/www/www/ROOT/ //进入ROOT目录 [root@02 ROOT]# jar xf jpress-web-newest.war //解压war包 | |
6.6 | 在浏览器栏中输入:http://192.168.200.6/install | |
6.7 | 后续的安装需要MYSQL数据库的内容。 | |
7.优化tomcat | ||
安全优化 | ||
7.1 | 降权启动 降权的原则就是利用普通用户来启动tomcat,tomcat要部署在用户的家目录下。
| |
7.2 | telnet管理端口保护 Tomcat默认通过8005端口来接收SHUTDOWN这个字符串来关闭tomcat进程,但是这非常危险,因此需要修改端口号来防护,否则通过telnet命令可以强行关闭进程 | |
7.3 | ajp连接端口保护 | |
7.4 | 禁用管理端 | |
性能优化 | ||
1. | ||
2. |
|