tomcat简单使用
下载解压tomcat
[root@localhost]# tar zxf apache-tomcat-8.5.4.tar.gz -C /usr/local/tomcat
yum自带JDK,注意区别JRE和JDK
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
tomcat 前期设置
export JAVA_HOME=/usr/local/java #定义JAVA_HOME的环境变量
export PATH=$JAVA_HOME/bin:$PATH
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH 启动脚本catalina.sh添加如下使得在IPV4上监听JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
yum安装的JAVA默认路径
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
tomcat自带的三个APP使用
(1)Server Status(tomcat状态信息)
编辑conf/tomcat-users.xml后,重启tomcat加载用户信息
<role rolename="manager-gui"/> #添加manager-gui角色
<user username="tomcat" password="s3cret" roles="manager-gui"/> #创建用户并加入角色
(2)Manager App(tomcat下各应用管理)
与Server Status共用账号密码
(3)Host Manager (虚拟主机管理)
<role rolename="admin-gui"/>
<user username="tomcat" password="s3cret" roles="admin-gui"/>
此版本tomcat还有一个IP地址访问过滤,默认只允许本机访问,解除即可正常访问管理页面。
$CATALINA_BASE/webapps/manager/META-INF/context.xml #Server Status和Manager App的访问控制
$CATALINA_BASE/webapps/host-manager/META-INF/context.xml #Host Manager的访问控制
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
虚拟主机配置
(1)server.xml添加Host组件即可实现多个虚拟主机。
<Host name="www.a.com" appBase="/data/tomcat/a" #appBase如果是相对路径则是相对$CATALINA_BASE
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="ROOT" reloadable="true" />
</Host> <Host name="www.b.com" appBase="/data/tomcat/b" #appBase指定网页存放路径
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="ROOT" reloadable="true" /> #docBase如果是相对路径则是相对appBase的目录
</Host> #path表示url,docBase为空则是appBase路径
(2)创建本地目录mkdir –pv /data/tomcat/{a,b}
(3)抄了一段JSP代码做测试页面,是一个记录访问次数的代码段,放置在Host组件的appBase对应的路径下,并分别把代码保存为/data/tomcat/{a,b}/{a,b}.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<html>
<head>
<title>WEB A</title>
</head>
<body>
<%
int n = 0;
String counter = (String)application.getAttribute("counter");
if(counter != null){
n = Integer.parseInt(counter);
}
if(session.isNew())
++n;
%>
<h1>you are the <%out.print(n);%> times access</h1>
<%
counter = String.valueOf(n);
application.setAttribute("counter", counter);
%>
</body>
</html>
(4)使用域名访问www.a.com:8080/a.jsp、www.b.com:8080/b.jsp可以使用hosts文件让客户端正常解析两个域名,Host组件内可以使用<Alias></Alias>定义主机别名
Valve
valve类似于过滤器,有多种不同的Valve:
AccessLogValve:访问日志Valve;
ExtendedAccessValve:扩展功能的访问日志Valve;
JDBCAccessLogValve:通过JDBC将访问日志信息发送到数据库中;
RequestDumperValve:请求转储Valve;
RemoteAddrValve:基于远程地址的访问控制;
RemoteHostValve:基于远程主机名称的访问控制;
SemaphoreValve:用于控制Tomcat主机上任何容器上的并发访问数量;
JvmRouteBinderValve:在配置多个Tomcat为以Apache通过mod_proxy或mod_jk作为前端的集群架构中,当期望停止某节点时,
可以通过此Valve将用记请求定向至备用节点;使用此Valve,必须使用JvmRouteSessionIDBinderListener;
ReplicationValve:专用于Tomcat集群架构中,可以在某个请求的session信息发生更改时触发session数据在各节点间进行复制;
SingleSignOn:将两个或多个需要对用户进行认证webapp在认证用户时连接在一起,即一次认证即可访问所有连接在一起的webapp;
ClusterSingleSingOn:对SingleSignOn的扩展,专用于Tomcat集群当中,需要结合ClusterSingleSignOnListener进行工作;
(1)server.xml配置文件里面的AccessLogValve
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
(2)webapps/manager/META-INF/context.xml里面的RemoteAddrValve
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
一般会在tomcat前端增加反向代理,不会让tomcat直接面向用户请求,此时需要定义tomcat连接器相关参数
增加前端节点可以做动静态资源的分离
使用Nginx作为前端
(1)配置nginx
在Nginx启用反向代理前保证客户端能够正常访问Nginx主页,Nginx能够访问tomcat(注意firewall)
编辑/etc/nginx/nginx.conf,添加proxy_pass,下述表示所有请求无差别转发到tomcat
注意:proxy_pass使用IP和主机名的区别,如果后端的tomcat使用了基于主机名的虚拟主机,则Nginx转发的时候,就需要使用主机名,否则tomcat将会访问到默认虚拟主机。
(2)nginx作为前端并分离动静态资源
........(前面配置省略)
include /etc/nginx/default.d/*.conf;
location / { #非jsp文件如html、图片等静态资源的请求会被此匹配,直接从nginx的root路径获取 }
location ~ \.jsp$ {
proxy_pass http://192.168.56.131:8080; #仅将jsp文件的请求转发到后端
}
使用Apache作为前端反向代理
使用特定的模块实现(主模块:proxy_module 子模块:proxy_module_http(ajp)),早期没有proxy_module_ajp的时候有一个支持ajp的第三方模块(JK)
httpd –M 查看已经装载的模块
proxy_module (shared)
proxy_http_module (shared)
proxy_ajp_module (shared)
配置文件/etc/httpd/conf/httpd.conf
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
ProxyPass / http://192.168.56.131:8080/
ProxyPassReverse / http://192.168.56.131:8080/
ProxyVia On 转发请求的时候带上来源
ProxyRequests Off 正向代理显式关闭才能使用反向代理
ProxyPreserveHost On 支持在后端主机上使用基于主机名的虚拟主机,即客户端请求报文带主机名,能直接把这个首部转发后端,这样就能够访问到tomcat基于主机名的虚拟主机,如果客户端用IP访问依然是访问tomcat的默认主机。
ProxyPass 如果使用ajp协议与tomcat交互,只需要把url改为http://192.168.56.131:8080/,path为”/”结尾,url也要”/”结尾
ProxyPass /status ! 符号!可以在代理时排除指定页面
httpd/nginx作为前端负载均衡
nginx server:192.168.56.129 前端网卡:192.168.45.129
tomcat server1:192.168.56.131
tomcat server1:192.168.56.132
(1)nginx负载均衡及会话绑定编辑nginx配置文件,增加如下内容。
后端tomcat上部署同样的资源文件,我这里使用上述的记录访问次数的jsp页面,在客户端上访问nginx时,每次刷新浏览器都会负载均衡到不同的tomcat后端
会话绑定:在nginx配置文件中的upstream里面添加ip_hash,可以将来自同一ip的客户端固定代理至后端某一台tomcat上。此时刷新浏览器,每次访问到的tomcat都不变。
(2)Apache作为前端负载均衡
http://httpd.apache.org/docs/2.4/howto/reverse_proxy.html 官方文档
httpd的反代负载均衡由mod_proxy_balancer模块实现,编辑httpd配置文件
<proxy balancer://lbmember>
BalancerMember http://192.168.56.131:8080
BalancerMember http://192.168.56.132:8080
</proxy>
ProxyPass / balancer://lbmember/
ProxyPassReverse / balancer://lbmember/
注意:测试中ProxyPass的url最后没有加”/”,出现访问错误。
(3)Apache前端的会话绑定
http://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxyset
http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html 官方文档
按照官方文档进行设置
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<proxy balancer://lbmember>
BalancerMember http://192.168.56.131:8080 route=1
BalancerMember http://192.168.56.132:8080 route=2
ProxySet stickysession=ROUTEID
</proxy>
ProxyPass / balancer://lbmember/
ProxyPassReverse / balancer://lbmember/
route= 设置服务器id
stickysession=ROUTEID 使用服务器ID进行会话保持
设置后客户端带着负载均衡器给的cookie值(该值就是route)去访问服务器,实现会话保持。
第一次请求前端负载,响应报文中有Set-Cookise字段,客户端获取到cookies并在随后的请求中附带cookies首部
(4)httpd 自带的负载均衡管理页面
ProxyPass /balancer-manager ! #要放在前面,否则匹配到下面的proxypass,此管理页面也会被代理至后端
ProxyPass / balancer://lbmember/
ProxyPassReverse / balancer://lbmember/
<Location "/balancer-manager">
SetHandler balancer-manager
</Location>
访问http://192.168.45.129/balancer-manager就可以进入一个简单的状态显示页面
一般不建议单个tomcat实例内存过大,所以同一台主机可以启用多个tomcat实例,并且使用Apache为同一主机的不同tomcat做反向代理,如下结构。
tomcat会话管理器实现session同步
session.DeltaManager官方文档 https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html
使用会话绑定有一个缺陷,当某台后端tomcat挂了,所有该服务器的会话信息将丢失,所以可以构建tomcat集群,集群内各服务器共享会话信息,于是集群内每个tomcat都有其他成员建立的会话信息。这种方式因为每台服务器上都要保存其他会话信息,占用内存较大,不适合大规模。
(1)to your <Engine>
or your <Host>
element to enable clustering.
(2)Make sure your web.xml has the <distributable/> element
(3)按照官方文档修改配置文件
(4)显示cookies的jsp脚本
<% session.setAttribute("test","test");%>
<h1> SessionID:<%= session.getId()%></h1>
(5)客户端访问会被代理到不同的后端,但是session保持不变
注意:测试环境中按照官方配置<cluster>无法启动,tomcat日志提示multicast的问题。ifconfig eth0 broadcast 228.0.1.4 修改广播地址就可以,有待研究
如果在serve.xml中<Engine name="Catalina" defaultHost="localhost" jvmRoute="1"> 设置jvmRoute会发现获取的session后面附加了jvmRoute的值
附:
各组件的协作关系如下
tomcat简单使用的更多相关文章
- Centos6.7配置Nginx+Tomcat简单整合
系统环境:Centos 6.7 软件环境:JDK-1.8.0_65.Nginx-1.10.3.Tomcat-8.5.8 文档环境:/opt/app/ 存放软件目录,至于mkdir创建文件就不用再说了 ...
- iOS-UI篇—简单的浏览器查看程序和Tomcat简单实现
#import "ViewController.h" @interface ViewController () @property (retain, nonatomic) NSAr ...
- tomcat简单使用(一)
先来说一说tomcat的使用 官网下载tomcat:tomcat,我的百度云上的:tomcat Tomcat分为安装版和解压版:安装版:一台电脑上只能安装一个Tomcat:解压版:无需安装,解压即可用 ...
- centos solr4.5 tomcat 简单安装[已测试ok]
一.环境准备: 1.jdk安装 2.tomcat安装 这两个基本环境的安装在这里就不说了 二.下载solr-4.5.0.tgz 三.安装solr 1.解压solr tar -zxvf /opt/sol ...
- IDEA+JSP+Servlet+Tomcat简单的登录示例
1.用IDEA新建Java WEB项目并配置Tomcat 这一部分可以参考之前的一篇随笔 https://www.cnblogs.com/lbhym/p/11496610.html 2.导入Servl ...
- 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例
目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...
- tomcat简单文服
1.修改tomcat配置文件 web.xml 将listings的value值改为true. DefaultServlet在Tomcat中主要是做目录列表(Directory Listing)用. 2 ...
- 一台机器启动多个tomcat简单配置
一台机器启动多个Tomcat只需要解决Tomcat端口冲突的问题. 相关配置:打开 Tomcat 目录下 conf \ server.xml 共修改三处端口,分别是: <Server port= ...
- springmvc ajax tomcat简单配置实现跨域访问
发现一种改动最小也能实现跨域请求的方法 服务端 服务端修改web.xml配置文件, 增加过滤器 (不用导入任何jar包, 用的tomcat自带jar) <!-- 支持跨域请求 --> &l ...
随机推荐
- AET PN结
电场方向 电场方向和正电荷受力方向相同 飘移运动和扩散运动 多子和电场方向互相抵制,而多子是扩散运动,而对少子则是促进作用,当扩散和漂移达到动态平衡时,我们称PN结形成 PN结特性 单项导电性
- mysql 表
关系 create table scores( id int primary key auto_increment, stuid int, subid int, score decimal(5,2) ...
- 与大家分享学习微信小程序开发的一些心得
因为我也才开始学习微信小程序不久,下文也是现在的一时之言,大家有不同的想法也可以在评论里共同交流讨论,希望文章能给大家提供一点点帮助. 最近接触到了一些前端框架,像Vue.js,React,发现小程序 ...
- 开源小程序CMS网站, JeeWx-App-CMS 1.1 版本升级发布,持续更新!
JeeWx-App-CMS开源小程序CMS网站,持续更新ing~ JeeWx-App-CMS 是jeewx开发的小程序网站开源项目,基于小程序wepy语言,具备cms网站的基本功能,能够打造简单易用的 ...
- 《Java开发学习大纲文档》V7.0
<Java开发学习大纲文档>V7.0简介: 本文档是根据企业开发所需要掌握的知识点大纲进行总结汇编,是Java开发工程师必备知识体系,系统化学习针对性非常强,逻辑分析能力非常清晰;技术方面 ...
- Dostoevsky: Better Space-Time Trade-Offs for LSM-Tree Based Key-Value Stores via Adaptive Removal of Superfluous Merging 阅读笔记
Introduction 主流的基于LSM树的KV存储都在两方面进行权衡,一方面是写入更新的开销,另一方面是查询和存储空间的开销.但它们都不是最优的,问题在于这些存储系统在LSM树的每一个level上 ...
- c#电子印章制作管理系统
产品名称:电子印章制作管理系统 版 本 号:v0.0.0.1产品说明:本产品采用位图绘制方式,主要针对OA.ERP.金融等行业取代实物印章的一款产品,本产品有以下特点1.制作方便,容易操作2.规格 ...
- Window下安装Scala出现:此时不应有 \scala\bin\..\lib\jline-2.14.5.jar
scala默认安装到了Program Files (x86)文件夹下.目录中有空格,空格就是导致这个问题的根本原因 把scala安装到其他目录即可 配置scala环境 在环境变量的系统变量里面添加SC ...
- unfortunately,*********** has stopped及卸载模拟器上的多余不用apk
虽然不知道是怎么了,但是项目进不去了,害的我一脸雾水,百度了下好像没什么人遇到过这问题,都没找到解决办法,那只好来个简单粗暴的,卸载重新安装apk ,希望有大神知道原因和其他方法的欢迎留言或者评价给出 ...
- LinkedHashMap 根据PUT顺序排序Map
最近工程里面报表需要合计 , 因为所有的项都是动态的,所以只能动态添加. 思路是使用Map,初始化所有Map,然后在Map中合计并且覆盖. 使用HashMap , 初始化后所有动态项的顺序都乱了. M ...