前言:
下载网站:
http://tomcat.apache.org/
servlet代码是由java写的一个后端
jsp是一个前端页面,最终也会被翻译成servlet代码区执行
tomcat的可以看作一个容器,是由三大组件组成
WEB容器:TCP/IP协议,http
Serlet容器:后端,处理java,html
JSP容器:前端,处理动态网页
connector 连接对象,开放端口
8080端口基于http协议,coyote 接收
container 容器
engine 引擎
host 虚拟主机
context 内容,加载程序
运行servlet,
然后依次返回
1.下载并安装jdk
2.安装并启动Tomcat
3.配置虚拟主机
jdk是编译器,把源码文件转换成可执行文件
jdk目前在用的是1.8,现在如果学习的话,就用jdk1.11
以java为例,
abc.java通过编译器可以变成abc.class
环境变量:PATH
用户环境变量:只针对用户有效,换了一个用户就不生效
系统环境变量:只针对主机生效,换了一个用户依旧生效 bin目录
javac 命令是 编译的意思
把java————》class
java是执行命令 执行class
eclipse-inst-win64是编写软件开发环境
jdk是一个编译器引擎
先装jdk
以管理员身份运行,点两个下一步,安在C盘最好,以免出现故障
java se 是基础阶段
jre实际上是jvm虚拟机
bin下面是命令
把目录复制下来,C:\Program Files\Java\jdk1.8.0_181\bin
修改
粘贴到开头,用分号隔开
然后确定
打开cmd验证
java开发环境idea或者eclipse
以管理员身份运行
在线安装
点击同意
下一步
下一步
在线安装会出现网速过慢的情况
出现之后,勾选,同意
然后再打开
这个指的是项目的存储路径
然后点击Launch
若是遇到更新组件,直接更新即可
开发界面
点击下一步
jar log4j
然后右键src,new,class
windows下的preferences
左键双击
字体选择consolas
然后应用关闭
访问权限,内文件,文件名
void 代表没有返回值,返回的话写return
main是主进程名称,程序的入口,程序的入口只能有一个,出口可以有多个
小括号里是数组,数组名称string
idea:
Java 学习目标
开发环境部署 IDE jdk1.8特性了解 jvm原理(垃圾回收机制)
变量 变量类型字节长度 整形:int Long 浮点:float(单精度) double(双精度) 布尔:boolean (true,false)
字符:char (Kava的英文字符,占两个字节) 字符串:String 枚举类型
条件判断 if if-else if-else-if switch
循环语句 单循环 双循环 嵌套
数组 二维数组
二维数组的第一个中括号代表一维数组个数
第二个中括号代表一维数组中的元素个数
函数 静态函数(可以直接在main中使用) (动态函数需要创建对象才能使用) 带参传入 返回值
——————面向对象特性————
封装、继承、多态(重点)
继承,继承上一级的特性,多态是自身的特性
————————————————————
接口 API 面向接口编程
异常处理
集合框架 List Map
IO 文件流 字符流(适合处理文本数据) 字节流(适合处理图片、视频,文本也可以等) (实现数据持久化的雏形),把内存的文件存储到硬盘中
多线程 thread 锁机制(重点学习了解原理)
网络编程(选学) 网络聊天平台
————————————————————JavaEE——————————————————————————
————初级————
HTML CSS JavaScript(重点) jQuery 前端
servlet(重点,后端:服务端) JSP(用的不多)
jdbc 连接数据库
Mysql 数据库 (DML,DDL,DCL,DQL 事务、视图、索引、存储过程、数据库编程)
备份恢复(冷热、物理逻辑备份、完全差异增量备份、、直接恢复、断点恢复)
————中级————SSM框架
mybaits 框架 spring 框架 (IOC 控制反转、AOP面向切面编程) spring MVC (模式、视图、控制)
高级
spring boot spring cloud docker 分布式 微服务
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile
[root@localhost jdk1.8.0_201-amd64]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@localhost ~]# wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.8/bin/apache-tomcat-9.0.8.tar.gz
[root@localhost opt]# mv apache-tomcat-9.0.16/ /usr/local/tomcat9
[root@localhost bin]# ls
bootstrap.jar ciphers.sh daemon.sh setclasspath.bat startup.sh version.bat
catalina.bat commons-daemon.jar digest.bat setclasspath.sh tomcat-juli.jar version.sh
catalina.sh commons-daemon-native.tar.gz digest.sh shutdown.bat tomcat-native.tar.gz
catalina-tasks.xml configtest.bat makebase.bat shutdown.sh tool-wrapper.bat
ciphers.bat configtest.sh makebase.sh startup.bat tool-wrapper.sh
[root@localhost bin]# /usr/local/tomcat/bin/startup.sh
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.254.10/linuxs /abc
Password for root@//192.168.254.10/linuxs:
[root@localhost ~]# cd /abc
[root@localhost abc]# ls
apache-tomcat-9.0.16.tar.gz tomcat优化压测.jmx
epel-release-latest-7.noarch.rpm jdk-8u201-linux-x64.rpm
[root@localhost abc]# rpm -ivh jdk-8u201-linux-x64.rpm
warning: jdk-8u201-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:jdk1.8-2000:1.8.0_201-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
[root@localhost abc]# cd /usr/
[root@localhost usr]# ls
bin etc games include java lib lib64 libexec local sbin share src tmp
[root@localhost usr]# cd java/
[root@localhost java]# ls
default jdk1.8.0_201-amd64 latest
[root@localhost java]# cd jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0_201-amd64]# ls
bin lib src.zip
COPYRIGHT LICENSE THIRDPARTYLICENSEREADME-JAVAFX.txt
include man THIRDPARTYLICENSEREADME.txt
javafx-src.zip README.html
jre release
//jre用来存放虚拟机jvm,函数库lib,命令bin
用户环境变量、系统环境变量
[root@localhost jdk1.8.0_201-amd64]# ls bin/
appletviewer javafxpackager jdb jrunscript pack200 unpack200
ControlPanel javah jdeps jsadebugd policytool wsgen
extcheck javap jhat jstack rmic wsimport
idlj javapackager jinfo jstat rmid xjc
jar java-rmi.cgi jjs jstatd rmiregistry
jarsigner javaws jmap jvisualvm schemagen
java jcmd jmc keytool serialver
javac jconsole jmc.ini native2ascii servertool
javadoc jcontrol jps orbd tnameserv
export 声明全局变量
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile
[root@localhost jdk1.8.0_201-amd64]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
java环境其实已经默认装好了:实例,openjdk是一个简化版本
[root@localhost ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
默认的是openjava,但是有些组件不支持
[root@localhost jdk1.8.0_201-amd64]# tar zxvf /abc/apache-tomcat-9.0.16.tar.gz -C /opt
[root@localhost jdk1.8.0_201-amd64]# cd /opt
[root@localhost opt]# ls
apache-tomcat-9.0.16 httpd-2.4.29 nginx-1.12.2 rh
[root@localhost opt]# mv apache-tomcat-9.0.16/ /usr/local/tomcat9
[root@localhost opt]# cd /usr/local
[root@localhost local]# ls
apache2 etc include lib64 nginx share tomcat9
bin games lib libexec sbin src
[root@localhost local]# cd tomcat9/
[root@localhost tomcat9]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
webapps 站点
[root@localhost bin]# ls
bootstrap.jar ciphers.sh daemon.sh setclasspath.bat startup.sh version.bat
catalina.bat commons-daemon.jar digest.bat setclasspath.sh tomcat-juli.jar version.sh
catalina.sh commons-daemon-native.tar.gz digest.sh shutdown.bat tomcat-native.tar.gz
catalina-tasks.xml configtest.bat makebase.bat shutdown.sh tool-wrapper.bat
ciphers.bat configtest.sh makebase.sh startup.bat tool-wrapper.sh
[root@localhost bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# systemctl stop firewalld.service
[root@localhost bin]# setenforce 0
[root@localhost bin]# netstat -natp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 28345/java
[root@localhost bin]# netstat -natp | grep 80
tcp6 0 0 :::8080 :::* LISTEN 28345/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 28345/java
tcp6 0 0 :::8009 :::* LISTEN 28345/java
[root@localhost bin]# netstat -natp | grep java
tcp6 0 0 :::8080 :::* LISTEN 28345/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 28345/java
tcp6 0 0 :::8009 :::* LISTEN 28345/java
优化tomcat
[root@localhost conf]# ln -s /usr/local/tomcat9/bin/startup.sh /usr/bin/
[root@localhost conf]# ln -s /usr/local/tomcat9/bin/shutdown.sh /usr/bin/
主配置文件为server.xml
[root@localhost bin]# cd /usr/local/tomcat9/
[root@localhost tomcat9]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@localhost tomcat9]# cd conf/
[root@localhost conf]# ls
Catalina catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml
catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd
[root@localhost conf]# pwd
/usr/local/tomcat9/conf
[root@localhost conf]# cd ..
[root@localhost tomcat9]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@localhost tomcat9]# cd lib/
[root@localhost lib]# ls
annotations-api.jar el-api.jar tomcat-coyote.jar tomcat-i18n-ko.jar tomcat-util-scan.jar
catalina-ant.jar jasper-el.jar tomcat-dbcp.jar tomcat-i18n-pt-BR.jar tomcat-websocket.jar
catalina-ha.jar jasper.jar tomcat-i18n-cs.jar tomcat-i18n-ru.jar websocket-api.jar
catalina.jar jaspic-api.jar tomcat-i18n-de.jar tomcat-i18n-zh-CN.jar
catalina-storeconfig.jar jsp-api.jar tomcat-i18n-es.jar tomcat-jdbc.jar
catalina-tribes.jar servlet-api.jar tomcat-i18n-fr.jar tomcat-jni.jar
ecj-4.9.jar tomcat-api.jar tomcat-i18n-ja.jar tomcat-util.jar
[root@localhost lib]# cd /usr/java/
[root@localhost java]# ls
default jdk1.8.0_201-amd64 latest
[root@localhost java]# cd jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0_201-amd64]# ls
bin include jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt
COPYRIGHT javafx-src.zip lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt
[root@localhost jdk1.8.0_201-amd64]# cd jre/
[root@localhost jre]# ls
bin lib plugin THIRDPARTYLICENSEREADME-JAVAFX.txt Welcome.html
COPYRIGHT LICENSE README THIRDPARTYLICENSEREADME.txt
[root@localhost jre]# cd lib/
[root@localhost lib]# ls
amd64 fontconfig.bfc hijrah-config-umalqura.properties management
applet fontconfig.properties.src images management-agent.jar
calendars.properties fontconfig.RedHat.5.bfc javafx.properties meta-index
charsets.jar fontconfig.RedHat.5.properties.src javaws.jar net.properties
classlist fontconfig.RedHat.6.bfc jce.jar oblique-fonts
cmm fontconfig.RedHat.6.properties.src jexec plugin.jar
content-types.properties fontconfig.SuSE.10.bfc jfr psfontj2d.properties
currency.data fontconfig.SuSE.10.properties.src jfr.jar psfont.properties.ja
deploy fontconfig.SuSE.11.bfc jfxswt.jar resources.jar
deploy.jar fontconfig.SuSE.11.properties.src jsse.jar rt.jar
desktop fontconfig.Turbo.bfc jvm.hprof.txt security
ext fontconfig.Turbo.properties.src locale sound.properties
flavormap.properties fonts logging.properties tzdb.dat
[root@localhost lib]# cd security/
[root@localhost security]# ls
blacklist blacklisted.certs cacerts java.policy java.security javaws.policy policy trusted.libraries
[root@localhost security]# vim java.security
' 117 securerandom.source=file:/dev/urandom
//优化启动时间
[root@localhost security]# shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
[root@localhost security]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
缩短启动时间的命令
修改文件/usr/java/jdk1.8.0_171-amd64/jre/lib/security/java.security
[root@localhost security]# vim /usr/java/jdk1.8.0_171-amd64/jre/lib/security/java.security
' 117 securerandom.source=file:/dev/urandom
//优化启动时间
lib java的函数库,第三方组件包
jar,组件包
首页站点都在webapps
后面的class文件都可以直接拖进去
如果使用脚本,/,就需要使用sleep休眠一下
域名 工作目录(不是站点) 是否更新服务器中的WAR包 是否自动部署,即时生效 是否支持xml文件验证 是否对xml的空间启用
context docbase 站点 path设定为空,代表加载默认列表 重载功能开启
[root@localhost ~]# yum install bind -y
[root@localhost ~]# vim /etc/named.conf
13 listen-on port 53 { any; };
14 listen-on-v6 port 53 { ::1; };
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 allow-query { any; };
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "kgc.com" IN {
type master;
file "kgc.com.zone";
allow-update { none; };
};
zone "accp.com" IN {
type master;
file "accp.com.zone";
allow-update { none; };
};
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
dynamic named.ca named.localhost slaves
data named.empty named.loopback
[root@localhost named]# cp -p named.localhost kgc.com.zone
[root@localhost named]# vim kgc.com.zone
[root@localhost named]# cat kgc.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 192.168.247.202
[root@localhost named]# cp -p kgc.com.zone accp.com.zone
[root@localhost named]#
[root@localhost named]# systemctl start named
[root@localhost named]# systemctl stop firewall
Failed to stop firewall.service: Unit firewall.service not loaded.
[root@localhost named]# setenforce 0
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls
apache2 bin etc games include lib lib64 libexec nginx sbin share src tomcat9
[root@localhost local]# cd tomcat9/
[root@localhost tomcat9]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@localhost tomcat9]# cd webapps/
[root@localhost webapps]# ls
docs examples host-manager manager ROOT
[root@localhost webapps]#
创建两个站点,默认站点在ROOT中
[root@localhost webapps]# cd ROOT/
[root@localhost ROOT]# ls
asf-logo-wide.svg bg-middle.png bg-upper.png index.jsp tomcat.css tomcat.png tomcat.svg
bg-button.png bg-nav.png favicon.ico RELEASE-NOTES.txt tomcat.gif tomcat-power.gif WEB-INF
[root@localhost ROOT]# cd ..
[root@localhost webapps]# ls
docs examples host-manager manager ROOT
[root@localhost webapps]# mkdir kgc accp
[root@localhost webapps]# ls
accp docs examples host-manager kgc manager ROOT
[root@localhost webapps]# cd accp/
[root@localhost accp]# vim index.jsp
this is accptest
[root@localhost accp]# cd ../kgc/
[root@localhost kgc]# vim index.jsp
this is kgc
可以使用tree去查看这两个目录验证里面是否创建成功文件,没有这个命令的话就yum安装tree
[root@localhost webapps]# tree kgc/ accp/
kgc/
└── index.jsp
accp/
└── index.jsp
0 directories, 2 files
[root@localhost kgc]# cd ../../conf
[root@localhost conf]# ls
Catalina catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml
catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd
[root@localhost conf]# vim server.xml
上面是默认存在的网站
166-172为增加内容
162 pattern="%h %l %u %t "%r" %s %b" />
163
164
165
166
167
168
169
170
171
172
173
174
175
176
这是默认的网站
[root@localhost bin]# ./shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
[root@localhost bin]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
最大线程
最小空闲线程
最大空闲线程
字符集
连接超时
域名
如果https时,那么端口就会定义到8443
processorcache 缓存对象
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
69
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]#
对原有配置属性的进行压测
在客户端先安装jdk,配置环境变量,然后打开压测包
双击打开
在里面打开压测脚本,完成之后会生成压测报告,把压测报告保存表格数据(在聚合报告的下面保存),然后查看
多试几次
整理
接下来进行优化
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
重启服务
[root@localhost ~]# shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
[root@localhost ~]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# netstat -natp | grep 80
tcp6 0 0 :::8080 :::* LISTEN 109429/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 109429/java
tcp6 0 0 :::8009 :::* LISTEN 109429/java
tcp6 0 0 ::1:43008 ::1:8080 TIME_WAIT -
tcp6 0 0 127.0.0.1:35988 127.0.0.1:8005 TIME_WAIT -
tcp6 0 0 ::1:59856 ::1:8009 TIME_WAIT -
再次测试
1.从oracle官方下载jdk安装包,在客户端安装jdk
2.运行jmeter软件
3.选择压测脚本
4.开始进行压测
5.查看优化前压测结果
超时时间的单位是毫秒
compression是压缩
压缩最小阈值,
GC就是垃圾回收机制
这个是对内存的堆和栈的优化
java的变量分为值类型和引用类型
堆区相当于仓库,栈相当于展架,废弃物交给GC
堆和栈都在内存中
本地方法库是管理方法
堆大小决定了虚拟机花费在收集垃圾上的时间和频度
调整堆大小的目的是最小化垃圾收集的时间,在特定的时间内最大化处理客户的请求
在基准测试的时候,为确保最好的性能,要把堆的大小设大,确保垃圾收集不在整个基准测试的过程中出现
常见的优化GC参数 ————/usr/local/tomcat/bin/catalina.sh