Tomcat前世今生

  1. java体系:

    1 java程序设计语言

    2 java API(类库)

    3 java class文件格式

    4 java vm(虚拟机)

  2. JDK:java development kit (java api 、jvm)java开发工具

  3. Java SE:JDK + 额外类库,面向桌面级应用

  4. Java EE:Java SE+企业级类库

    servlet、jsp、jmx、jms、javamail、ejb

    servlet 容器,让servlet程序能够在这个环境中编译执行

  5. Tomcat:JDK+servlet,jsp(Java SE的不完整实现)

其他的web container:Jetty、Resin、Websphere(Java SE的完整实现)、webLogic(Java SE的完整实现)、JBoss、Glassfish

server.xml 按照某种层次结构,组织了tomcat内置的各种组件,内部有许许多多特殊的Java类,用于实现tomcat的各种功能,这些就是除了jsp和servelet之外的由tomcat自身的类库,作为一个web应用所需要的一些组件



server.xml中的组件:server、service、connector…

安装

//安装jdk
rpm -ivh jdk-7u9-linux-x64.rpm
ls /usr/java
//安装成功后java目录下就会出现刚刚安装的jdk
jdk1.7.0._09
//配置java环境变量(略)https://blog.csdn.net/w1196726224/article/details/52029201

//安装tomcat(略)
//因为tomcat在启动的时候并不需要管理员,所以为了安全请确保
//tomcat的文件目录是普通用户的权限,启动tomcat脚本的时候,也以普通用户的权限启动
useradd -r tomcat
//注意普通用户默认不能使用小于1024的端口,但是有开源程序能够做到
//通过tomcat执行脚本
su - tomcat -c "/usr/local/tomcat/bin/catalina.sh"
//配置环境变量
vim /etc/profile.d/tomcat.sh
//输入
export CATALINA_HOME= /Users/leesin/for mac 安装包/apache-tomcat-7.0.86
export PATH=$CATALINA_HOME/bin:$PATH

//source这个文件
. /etc/profile.d/tomact.sh
//就可以再其他的目录执行catalina.sh了
cd ../../
//查看版本
catalina.sh version
//检查配置文件语法是否有问题
catalina.sh configtest
catalina.sh start

配置文件详细说明

在tomcat 的conf目录下

➜  apache-tomcat-7.0.86 cd conf
➜  conf ls
Catalina            catalina.properties logging.properties  tomcat-users.xml
catalina.policy     context.xml         server.xml          web.xml

server.xml 核心配置文件(前面讲了太多,略)

context.xml :为部署于此Tomcat实例上的所有web应用程序提供的默认配置文件,每个webapp都可以使用独有的context.xml,通常放置于webapp目录的META-INF子目录中,常用于定义会话管理器、Realm以及JDBC等,这个目录是不允许通过web访问的

web.xml:为部署于此Tomcat实例上的所有web应用程序提供默认部署描述符,通常用于为webapp提供基本的servlet定义和MIME映射表。

tomcat-user.xml:用户名密码

catalina.policy:当机遇-security选项启动tomcat实例时会读取此配置文件,此配置文件是JAVA的安全策略配置文件,配置访问codebase或某些java类的权限

catalina.properties:java属性定义文件,设定类加载器路径、安全保列表和一些调整性能的参数信息

logging.properties:定义日志相关的配置信息,如日志级别、文件路径等

tomcat应用程序部署

部署是指将 webapp 及其所依赖类库等装载进 tomcat 实例上,以便接受用户请求;

部署方式:

  1. 静态方式:在 Tomcat 启动之前进行的 webapp 部署
  2. 动态方式:在打断 tomcat 运行的前提下,通过 tomcatmanager 或其它的命令行工具进行的部署;
  3. TCD: Tomcat Client Deployer

部署是由一类“操作”组成:

Deploy:将 web源文件放置于目标目录、配置 tomcat 服务器能够基于某contcxt 路径访问此 weap,并将其特有的类由类加载器进行装载等

Redeploy:重新部署,主要用于升级时

Undeploy:取消部署,停止应用程序并从 tomcat 实例上移除其部分文件和部署名;

stop:停止,停止只是不让访问了,加载的类还在里面

start:将停止的 webapp 启动起来

部暑方式:

Tomcat manager

ANT 脚本

TCD

war 类归档程序的部署:将归档文件复制到$ CATALINA BASE/webapps/目录中,并重启 tomcat即可; tomcat 会自动展开 war归档;

webapp 体系结构

webapp 体系结构有特定的组织格式,是一种层次型目录结构:通常包含了 serylet 代码文件、jsp页面文件、类文件、部署描述符文件等等,一般会打包成归档格式

/:web 应用程序的根目录

/WEB-INF:此 webapp 的私有资源目录,通常 web.xml 放置于此目录

/WEB-INF/classes:此 webapp 自有的类

/WEB-INF/lib:此 webapp 自有能够被打包为 jar 格式的类

webpp 的归档格式:

EJB类归档的扩展名 .jar

web 应用程序的归档扩展名为 .war

资源适配器的扩展名 .rar

企业级应用程序的扩展名 .ear

web 服务的展名为 .ear 或 .war

<%@ page.language="java”‰>
<%@ page Import=”java,uti1.*” %>
<html>
	<head>
	<title>JSP test Page</title:
	</head>
	<body>
		<%>
		out println("Hello world!");
		out println("Hello);
		<%>
</html>

tomcat运行方式

独立配置:既是web服务器,又是servlet容器处理jsp



进程间配置,web服务器通过nginx或者apache实现



独立/网络配置

apache与tomgcat连接器通信的模块有两个:

1.mod_jk:apache1.3 apache2.0

2.mod_proxy:apache2.2

tomcat的连接器协议有两种:

http

ajp

所以连接方式有四种

mod_jk:http,ajp

mod_proxy:http,ajp

mod_jk VS mod_proxy:

负载均衡:两者都支持,但是mod_proxy要弱一点,但是在特性定制上很强大

管理接口:基于web页面管理接口两者都支持,现在好像mod_proxy不支持了

兼容性:mod_proxy已经成为标准模块了,但是仍然需要手动安装

配置:mod_proxy要简单

协议:mod_jk(ajp),mod_proxy(http/https/ajp)

tomcat的http连接器:

类型有三种:

1.基于java的http/1.1了连接器(默认)

2.基于java的高性能NIO HTTO/1.1 连接器

3.基于C/C++研发的Native APR HTTP/1.1连接器

在负载较大的程序中,建议使用基于C/C++研发的Native APR HTTP/1.1连接器,但是需要额外编译安装APR组件

<connector port="8080" protocol="http/1.1">
<connector port="8080" protocol="org.apache.coyote.http1.Htto11NioPtotocol">
<connector port="8080" protocol="org.apache.coyote.http1.Htto11AprPtotocol">

LAMT:

apache(mod_jk,ajp)+tomcat(ajp connector)

apache(mod_proxy,(http,https,ajp))+tomcat(http,https,ajp)

LNMT:

nginx+tomcat(http,https)

最新文章

  1. Windows Store App 全球化 设置指定页面的语言
  2. python gui之tkinter界面设计pythonic设计
  3. jQuery 调用jsonp实现与原理
  4. LeetCode344:Reverse String@Python
  5. Java 多态 虚方法
  6. 移动平台前端开发之WebApp代码技巧
  7. iOS 下拉刷新和加载更多 (OC\Swift)
  8. [MySQL] 常用SQL的优化--18.4
  9. CSS之图片关闭
  10. PL/SQL Developer 使用中文条件查询时无数据的解决方法
  11. hdoj 1286 找新朋友【欧拉函数】
  12. C++ Built-In Array 的语义
  13. 虾米loop 摇头代码
  14. 多线程编程学习笔记——async和await(一)
  15. AngularJS学习之旅—AngularJS Scope作用域(五)
  16. JS 的骚操作
  17. [daily]gtk程序不跟随系统的dark主题
  18. 论文阅读(XiangBai——【PAMI2018】ASTER_An Attentional Scene Text Recognizer with Flexible Rectification )
  19. input元素的required属性引发的血案
  20. 黑电平校正BLC

热门文章

  1. Cygwin访问windows磁盘目录
  2. webpack请求文件路径代理
  3. 网络命令-nc(二)
  4. 【读书笔记】:MIT线性代数(2):Vector Spaces and Subspaces
  5. Numpy基础之创建与属性
  6. 分别用switch语句和if语句实现键盘录入月份,输出对应的季节
  7. luoguP2680 运输计划 题解(二分答案+树上差分)
  8. Spring学习笔记(12)——aop
  9. JQ广告弹窗&amp;随机抽奖————JQ
  10. SET CONSTRAINTS - 设置当前事务的约束模式