web服务器tomcat入门实战
一、tomcat介绍
1.1 引入tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
1.2 常用的java-web服务
开源软件
tomcat resin jboss
商业软件
weblogic websphere
二、java概念解释
JDK
简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等
JRE
JRE(Java Runtime Environment,Java运行环境),也就是Java平台。所有的Java程序都要在JRE下才能运行。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。
SDK
SDK(Software Develop Kit,软件开发工具包),用于帮助开发人员的提高工作效率。各种不同类型的软件开发,都可以有自己的SDK。Windows有Windows SDK,DirectX 有 DirectX 9 SDK,.NET开发也有Microsoft .NET Framework SDK。JAVA开发也不含糊,也有自己的Java SDK。
JVM
JVM(Java Virtual Machine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台
三、tomcat环境准备
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
四、源码安装启动tomcat
#统一线上web服务用户的uid
[root@node1 ~]# useradd -u 1001 tomcat
[root@node1 ~]# id tomcat
uid=1001(tomcat) gid=1001(tomcat) groups=1001(tomcat)
下载jdk和tomcat
[root@node1 ~]# cd /usr/local/src/
[root@node1 ~]# wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz [root@node1 ~]# wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.14/bin/apache-tomcat-8.5.14.tar.gz
安装Jdk和tomcat
[root@node1 src]# tar zxf jdk-8u131-linux-x64.gz
[root@node1 src]# mv jdk1..0_131/ /usr/local/
[root@node1 src]# ln -s /usr/local/jdk1..0_131/ /usr/local/jdk
[root@node1 src]# tar zxf apache-tomcat-8.5..tar.gz
[root@node1 src]# mv apache-tomcat-8.5. /usr/local/
[root@node1 src]# ln -s /usr/local/apache-tomcat-8.5./ /usr/local/tomcat
设置环境变量
[root@node1 src]# echo "export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/usr/local/tomcat" >> /etc/profile
[root@node1 src]# source /etc/profile
测试java环境变量是否生效
[root@node1 src]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
使用tomcat用户启动tomcat(这样可以起到一定的安全防范作用,如果被入侵拿到的也只是tomcat权限)
[root@node1 src]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@node1 src]# cd /usr/local/tomcat/bin/
[root@node1 bin]# ./startup.sh

查看8080端口
[root@node1 bin]# netstat -tunlp |grep 8080
tcp6 0 0 :::8080 :::* LISTEN 62872/java
根据启动脚本编写重启脚本如下
# vim tomcat.sh
#!/bin/bash
usage() {
echo "Usage: $0 [start|stop|restart|status]"
} start_tomcat(){
/usr/local/tomcat/bin/startup.sh
}
status_tomcat(){
ps -ef|grep java|grep tomcat|grep -v grep
}
stop_tomcat(){
TPID=$(ps -ef|grep java|grep tomcat|grep -v grep|awk '{print $2}')
kill - $TPID
sleep
STAT=$(ps -ef|grep java|grep tomcat|grep -v grep|awk '{print $2}')
if [ -z $STAT ];then
echo 'tomcat stoped...'
else
kill - $STAT
fi
}
restart_tomcat(){
stop_tomcat
start_tomcat
} main(){
case $ in start)
start_tomcat;;
stop)
stop_tomcat;;
restart)
restart_tomcat;;
status)
status_tomcat;;
*)
usage;
esac
}
main $
五、学习tomcat配置文件
5.1 学习server.xml
<Connector port="8080" protocol="HTTP/1.1" #http监听8080端口
connectionTimeout="20000"
redirectPort="8443" /> #https 8443端口
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #AJP通信方式8009端口
<Server port="8005" shutdown="SHUTDOWN">
<Listener # telent端口 className="org.apache.catalina.startup.VersionLoggerListener" />
##5.2 学习 tomcat-users.xml
[tomcat@node1 webapps]$ pwd
/usr/local/tomcat/webapps #tomcat 默认的根路径
[tomcat@node1 webapps]$ ll
total
drwxr-xr-x tomcat tomcat Mar : docs
drwxr-xr-x tomcat tomcat Mar : examples
drwxr-xr-x tomcat tomcat Mar : host-manager #用户管理,登录使用
drwxr-xr-x tomcat tomcat Mar : manager
drwxr-xr-x tomcat tomcat Mar : ROOT #默认的访问路径
修改tomcat-users.xml,配置一个登录用户tomcat
生产环境关闭app管理和主机管理的方法,具体文件再进行具体调整
[tomcat@node1 webapps]$ mv host-manager/ examples/ /tmp/
111
启动tomcat的注意事项,每次启动都会生成temp和work目录,实际生产环境建议每次tomcat启动都将此两个目录情况情况,否则会因为缓存问题产生异常
六、生产环境tomcat规范
telnet管理端口保护
更改8005(更改为8000~8999之间即可)端口,和SHOTDOWN字符串
ajp链接端口保护,或者直接注释配置文件
更改8005(更改为8000~8999之间即可)端口,通过iptables限制此端口,或者直接注释配置文件
禁用管理
1)删除默认的{Tomcat安装目录}/conf/tomcat-users.xml文件,重启tomcat后将会自动生成新的文件;
2)删除{Tomcat安装目录}/webapps下默认的所有目录和文件;
3)将tomcat 应用根目录配置为tomcat安装目录以外的目录;
降权启动
1)tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;
2)如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发;
文件列表访问限制
conf/web.xml文件中default部分listings的配置必须为false;
版本信息隐藏
1)修改conf/web.xml,重定向403、404以及500等错误到指定的错误页面;
2)也可以通过修改应用程序目录下的WEB-INF/web.xml下的配置进行错误页面的重定向;
Server header重写
在HTTP Connector配置中加入server的配置,server="chuck-server"
通过配置,限定访问的ip来源
allow="61.148.18.138,61.135.165." deny="...*"/
起停脚本权限回收
去除其他用户对Tomcat的bin目录下shutdown.sh、startup.sh、catalina.sh的可执行权限
访问日志格式规范
开启Tomcat默认访问日志中的Referer和User-Agent记录
关闭自动部署(根据自己实际情况)
autoDeploy="false">
七、tomcat的调优
7.1 外部调优
操作系统调优,JVM调优
1)调整JVM内存使用
2)使用什么垃圾回收器
nginx代理调优
7.2 内部调优
maxThreads="" #最大线程数
minSpareThreads="" #初始化创建的线程数
maxSpareThreads="" #一旦创建的线程超过这个值,tomcat就会关闭不在需要的socket线程
acceptCount="" #指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队里的请求数,超过这个数将不予处理
compression="on" compressionMinSize="" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" #tomcat压缩,压缩起始大小为2048K和压缩类型
enableLookups="false" #关闭dns查询
disableUploadTimeout="" #关闭上传超时
connectionTimeout="" #链接超时
SSLEnabled="true" #开启ssl加密,https时使用
附生产实际配置文件一个 <Connector port="" protocol="HTTP/1.1"
URIEncoding="UTF-8" minSpareThreads="" maxSpareThreads=""
enableLookups="false" disableUploadTimeout="true" connectionTimeout=""
acceptCount="" maxThreads="" maxProcessors="" minProcessors=""
useURIValidationHack="false"
compression="on" compressionMinSize=""
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
SSLEnabled="true"
scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/tomcat2/conf/shnlap93.jks" keystorePass="aaaaaa"
/>
7.3 开启jvm远程查看
更改启动参数
echo "CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote # 启用远程调用
-Dcom.sun.management.jmxremote.port= #端口12345
-Dcom.sun.management.jmxremote.authenticate=false #关闭验证
-Dcom.sun.management.jmxremote.ssl=false #关闭ssl加密
-Djava.rmi.server.hostname=192.168.3.198"" >> /usr/local/tomcat/bin/catalina.sh
打开jvisualvm,可同时链接多个jvm主机

web服务器tomcat入门实战的更多相关文章
- Servlet学习之web服务器Tomcat 详解
Web服务器是什么 Web服务器是指驻留于因特网上某种类型计算机的程序.当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该文 ...
- java web服务器tomcat介绍【转载】
机器矩阵2016-08-10 22:14 java程序员亲切地称他为tom猫,看到这只猫可以说明1 服务器部署成功了 ,2 网络是联通的. 到底这只猫是什么来头呢? tomcat是Apache基金会下 ...
- nginx高性能WEB服务器系列之五--实战项目线上nginx多站点配置
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- Web服务器Tomcat集群与负载均衡技术
我们曾经介绍过三种Tomcat集群方式的优缺点分析.本文将介绍Tomcat集群与负载均衡技术具体实施过程. 在进入集群系统架构探讨之前,先定义一些专门术语: 1. 集群(Cluster):是一组独立的 ...
- Java 之 web服务器—Tomcat
一.服务器 1.服务器 服务器:安装了服务器软件的计算机 2.服务器软件 服务器软件:接收用户的请求,处理请求,做出响应 3.Web 服务器软件 web 服务器软件:接收用户的请求,处理请求,做出响应 ...
- 搭建web服务器-tomcat+apache+mysql+eclipse
1. 下载并安装jdk 注意环境变量的配置: java_home: jdk的路径 path:.;%java_home%\bin;%java_home%\jre\bin classpath : .; ...
- Web前端JQuery入门实战案例
前端jquery入门到实战 为什么要学习Jquery?因为生活. 案例: <!DOCTYPE html> <html lang="zh-CN"> <h ...
- web服务器-----Tomcat 7.0安装
下载地址:http://tomcat.apache.org/ 1.下载 2.解压缩---c盘 3.运行bin\startup.bat 启动Tomcat服务器 运行bin\shutdown.bat关闭T ...
- (转)Linux整合apache和tomcat构建Web服务器
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wenzhongxiang.blog.51cto.com/6370734/1285 ...
随机推荐
- Spring Cloud(五) --- zuul
微服务网关 在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务.当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用 ...
- 转载:OSG::Quat(四元数)用法
转自:http://blog.163.com/dj_zone/blog/static/4908931320098294047820/ osg::Quat To set the attitude of ...
- 走进JVM【二】理解JVM内存区域
引言 对于C++程序员,内存分配与回收的处理一直是令人头疼的问题.Java由于自身的自动内存管理机制,使得管理内存变得非常轻松,不容易出现内存泄漏,溢出的问题. 不容易不代表不会出现问题,一旦内存泄漏 ...
- python---一个简单的socket
server端: 1 创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) #family参数代表地址家族,可为 ...
- 继承之es5对比es6
es5: 熟悉es5的童鞋们就知道es5的继承多么恶心~~ es5最经典的继承写法就是如下这样 1.写一个function,用this来扩展其值类属性 2.prototype添加其方法类属性 3.若整 ...
- JavaSE学习总结(九)—— Java访问数据库(JDBC)
一.JDBC简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java ...
- vscode插件和快捷键
目前用的挺多的一些编辑器有webstorm,vscode,Atom,HBuilder等等 今天来说说vscode Visual Studio Code (简称 vscode) 是一款免费开源的现代化轻 ...
- CopyFromScreen在屏幕缩放情况下需要做处理
using System; using System.Drawing; using System.Runtime.InteropServices; //这段代码转自网上 namespace Syste ...
- C# dll 在注册表中寻找
“{7713F78A-44DE-42BA-A1F6-3FB0BD6CA63B}”就是该Dll的唯一ID啦,每一个Dll文件都会不一样的. 但是,问题又来了,怎么样知道它的唯一ID呢?其实很简单,那就是 ...
- Varish 缓存
varish 缓存 2013年06月17日,Varnish Cache 3.0.4 发布,为目前最新版本. varish是以内存作为共享容器的:内存的大小决定了它的缓存容量.相对于主要以硬盘为存储的s ...