Tomcat
Posted 黑色月牙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat相关的知识,希望对你有一定的参考价值。
编程语言介绍 系统级 C C++ go erlang 应用级 C# Java Python Perl Ruby php 虚拟机 pvm jvm 提供运行环境 动态网站 asp .net jsp 面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 JAVA变成语言的特性 面向对象、多线程、结构化错误处理 垃圾收集、动态链接、动态扩展 POSIX: 可移植操作系统接口 jvm将java字节码解释为具体平台的具体指令.做到跨平台 Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。
Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在jvm上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。jvm在执行字节码时,把字节码解释成具体平台上的机器指令执行 1996 JDK(Java Development Kit),包含一个JVM JDK1.0 JVM Applet AWT 1997 JDK 1.1 JAR文档格式:JDBC JavaBean 1998 JDK1.2 Sun把Java技术分为 J2SE ==> Java 2 SE J2EE ==> Java 2 EE J2ME ==> Java 2 ME 代表性技术:EJB Java Plug-in Swing Jit编译器 三个技术流派(重新命名) J2SE ==> Java 2 SE 【java 核心API+JDK(JRE+工具及工具集API)】 J2EE ==> Java 2 EE 【Java 2 EE 核心API + Java 2 SE 】 J2ME ==> Java 2 ME 2000 JDK1.3 2002 JDK1.4 2006 Sun开源Java技术,遵循GPL,并建立OpenJDK组织管理这些代码 2009 Oracle收购Sun Java体系结构 Java编程语言 Java Class文件格式 Java API Java VM
java的执行
.java==>javac complier==>.class ==>jvm
jvm核心组成部分
class loader: 装载java程序类文件及java API类文件(可以调用OS native API(DSO),但是不能跨平台,应该避免 )
执行引擎
java runtime data areas
方法区 Method Area 用于存储jvm加载的类、常量、静态变量等,永久代。也是线程共享
堆 Heap 是jvm所管理的内存中最大的一部分,线程共享,也是GC管理的主要区域,主流的算法基于分代方式进行,新生代、老年代。
Java栈 java Stack 线程私有,存放线程自己的局部变量等信息
指令计数器Program Counter Register 线程独占的内存空间
本地方法栈Native Method Stack
configuring the heap and garbage collector
Sun公司创建了第一个Servlet容器,即Java Web Server,但是JWS只是为了演示Servlet的相应功能,所以很不稳定,
于此同时,ASF创建了JServ项目,一个能与apache整合起来的servlet容器
1999年,Sun将JWS捐给了ASF,于是两个项目合二为一,即Tomcat前身,第一个tomcat版本是Tomcat3.0系列,
而发布于2001年的Tomcat4.0是在此基础上进行了重新设计和实现,其代码项目命名为catalina
JavaApplet
是用Java语言编写的小应用程序,可以直接嵌入到网页中,并能够产生特殊的效果。
Java Servlet
是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。广义的Servlet是指任何实现了这个Servlet接口的类
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。
它是在传统的网页html(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。
JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。
JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
JSP的执行过程主要可以分为以下几点:
客户端发出请求。
Web JSP Container(jasper)将JSP转译成Servlet源代码。
Web容器将产生的Serverlet源代码进行编译成.calss
Web JVM容器加载编译后的.class代码并执行
Web服务将结果返回给客户端
==>当JSP网页在执行时,JSP Container 会做检查工作,如果发现JSP网页有更新修改时,JSP Container 才会再次编译JSP成 Servlet; 如果JSP没有更新时,就直接执行前面所产生的Servlet.
JAVA 2 EE: 包含的技术
JAVA 2 SE:JDK JNDI JAXP
JNDI 用于与LDAP服务交互的API
JAXP 用于分析及转换XML
Servlet,JSP,EJB,JMS,JMX,JTA,JavaMAil
EJB Enterprise JavaBeans JAVA相关的诸多高级功能的实现,如RMI,对象/关系映射,跨越多个数据源的分布式事务等
JMS Java Message Services 高性能异步消息服务,实现JAVA EE应用程序与非JAVA程序的透明通信
JTA Java Transaction API 允许应用程序在自身的一个或多个组建中平滑地处理错误的机制
JAVAMail 通过工业标注的POP/SMTP/IMAP协议发送和接收邮件的机制
JMX Java Management Extensions 在程序运行时对其进行交互式监控和管理机制
==>而tomcat则是j2EE部分功能即j2se和 Servlet和JSP是实现
Web Container: JDK + Servlet+ JSP
商业实现:
WebSphere(IBM)
Weblogic(BEA--ORACLE)
Occupati
Oc4j
Glassfish
JBoss(核心是tomcat)
开源实现:(都需要JDK)
Tomcat(官方实现)
jetty(轻量级)
resin(商用收费)
Tomcat安装# rpm -ivh jdk-8u111-linux-x64.rpm
部署前提:
jdk:
Oracle JDK
或OpenJDK (java-1.8.0-openjdk)
# ls /usr/java/
default jdk1.8.0_111 latest
# vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
#. /etc/profile.d/java.sh
# echo $JAVA_HOME
/usr/java/latest
# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
# jps
2013 Jps
#tar -xf apache-tomcat-8.0.39.tar.gz -C /usr/local/
#cd /usr/local/
#ln -s apache-tomcat-8.0.39/ tomcat
#vi /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
#. /etc/profile.d/tomcat.sh
# catalina.sh version
# catalina.sh configtest 检查语法
# catalina.sh --help
..................
commands:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
configtest Run a basic syntax check on server.xml - check exit code for result
version What version of tomcat are you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined
# catalina.sh start 启动tomcat(8080)
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/latest
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
# jps
2013 Jps
1919 Bootstrap
#ls -l /usr/local/tomcat/
bin ——Tomcat执行脚本目录
conf ——Tomcat配置文件
lib ——Tomcat运行需要的库文件(JARS)
logs ——Tomcat执行时的LOG文件
temp ——Tomcat临时文件存放目录
webapps ——Tomcat的主要Web发布目录(存放我们自己的JSP,SERVLET,类)
work ——Tomcat的工作目录,Tomcat将翻译JSP文件到的Java文件和class文件放在这里。
# ls /usr/local/tomcat/conf/
server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;
web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;
tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;
catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;
catalina.properties:Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;
logging.properties: Tomcat通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组件级别以及日志文件的存在位置等;
context.xml:所有host的默认配置信息;
WEB GUI权限设置
For example, to add the manager-gui role to a user named tomcat with a password of s3cret, add the following to the config file listed above. <role rolename="manager-gui"/> <user username="tomcat" password="s3cret" roles="manager-gui"/> Note that for Tomcat 7 onwards, the roles required to use the manager application were changed from the single manager role to the following four roles. You will need to assign the role(s) required for the functionality you wish to access. manager-gui - allows access to the HTML GUI and the status pages manager-script - allows access to the text interface and the status pages manager-jmx - allows access to the JMX proxy and the status pages manager-status - allows access to the status pages only The HTML interface is protected against CSRF but the text and JMX interfaces are not. To maintain the CSRF protection: Users with the manager-gui role should not be granted either the manager-script or manager-jmx roles. If the text or jmx interfaces are accessed through a browser (e.g. for testing since these interfaces are intended for tools not humans) then the browser must be closed afterwards to terminate the session.
Tomcat组件结构
Tomcat Instance:运行中的tomcat进程(表现java进程)
Server: 即一个tomcat实例,一般只用一个Service
Service: 用于将connect关联engine组件,一个service只能属于一个Engine,一个或多个connect
Engine: Tomcat的核心组件,用于运行jsp或servlet代码,即处理servlet请求的引擎组件。可以有多个connect。内部容器,虚拟主机
connect: 负责接收并解析用户请求,将请求映射(service负责)为Engine中运行的代码,并将运行结果构建成响应报文。一个connect只能属于一个引擎
host: 类似http中的虚拟主机(一引擎内部可以包含多个host,tomcat一般使用基于主机名)
context: 类似于httpd中的alias,描述访问路径
realm: 访问认证
注意:每个组件都由“类"来实现,有些组件还不止一种
顶级类组件:Server
服务类组件:Service
容器类组件:即可以部署webapp的组件:engine、host、context
连接类组件:connect
被嵌套类组件:valve、logger、realm(认证)
Tomcat 应用程序的组成
按照Tomcat的规范,Tomcat的Web应用程序应该由如下目录组成,
(1).页面内容等文件的存放位置:*.html, *.jsp等可以有许多目录层次,由用户的网站结构而定,实现的功能应该是网站的界面,也就是用户主要的可见部分。
除了HTML文件、JSP文件外,还有js(javascript)文件和css(样式表)文件以及其他多媒体文件等。
(2).Web-INF/web.xml 这是一个Web应用程序的描述文件。这个文件是一个XML文件,描述了Servlet和这个Web应用程序的其他组件信息,此外还包括一些初始化信息和安全约束等等。
(3).Web-INF/classes/ 这个目录及其下的子目录应该包括这个Web应用程序的所有JavaBean及Servlet等编译好的Java类文件(*.class)文件,以及没有被压缩打入JAR包的其他class文件和相关资源。
注意,在这个目录下的Java类应该按照其所属的包层次组织目录(即如果该*.class文件具有包的定义,则该*.class文件应该放在.\\WEB-INF\\classes\\包名下)。
/: webapp的根目录
WEB-INF/: 当前webapp的私有资源目录,通常存当前webapp自用的web.xml
META-INF/: 当前webapp的私有资源目录,通常存放当前webapp自用的context.xml
classes/: 此webapp的私有类,包含所有服务器端类及当前应用程序相关的其他第三方类等
lib/ 此webapp的私有类,被打包为jar格式类,包含所有用到的JAR文件
index.jsp: webapp的主页
用于tomcat的webapp既可以多个独立的文件组成,也可以是jar打包后的单个文件,这些打包后的文件的扩展名可以用于判断其文件按的类型
EJB通常打包为.jar
webapp通常打包为.war
资源适配器通常打包为.rar
企业级应用程序通常打包为.ear,它通常是整合的EJB、webapp及资源适配器文件
web服务器通常会打包为.ear或.war
Tomcat 配置文件(转http://freeloda.blog.51cto.com/2033581/1299644)
1.简介
查看一下默认配置文件,
1
2
3
|
[root@tomcat ~] # cd /usr/local/tomcat/conf/ [root@tomcat conf] # ls Catalina catalina.policy catalina.properties context.xml logging.properties server.xml tomcat- users .xml web.xml |
Tomcat的配置文件默认存放在$CATALINA_HOME/conf目录中,主要有以下几个:
-
server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;
-
web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;
-
tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;
-
catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;
-
catalina.properties:Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;
-
logging.properties: Tomcat通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组件级别以及日志文件的存在位置等;
-
context.xml:所有host的默认配置信息;
注,下面我们对常用的配置文件进行详解。
2.server.xml
首先,我们来查看一下默认的server.xml文件,
Tomcat以面向对象的方式运行,它可以在运行时动态加载配置文件中定义的对象结构,这有点类似于apache的httpd模块的调用方式。server.xml中定义的每个主元素都会被创建为对象,并以某特定的层次结构将这些对象组织在一起。下面是默认配置,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
[root@tomcat conf] # cat server.xml <?xml version= \'1.0\' encoding= \'utf-8\' ?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License" ); you may not use this file except in compliance with the License. You may obtain a copy of the License at http: //www .apache.org /licenses/LICENSE-2 .0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- Note: A "Server" is not itself a "Container" , so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/server .html --> <Server port= "8005" shutdown = "SHUTDOWN" > <!-- Security listener. Documentation at /docs/config/listeners .html <Listener className= "org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr .html --> <Listener className= "org.apache.catalina.core.AprLifecycleListener" SSLEngine= "on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto .html --> <Listener className= "org.apache.catalina.core.JasperListener" /> <!-- Prevent memory leaks due to use of particular java /javax APIs--> <Listener className= "org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className= "org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className= "org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- Global JNDI resources Documentation at /docs/jndi-resources-howto .html --> <GlobalNamingResources> <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> <Resource name= "UserDatabase" auth= "Container" type = "org.apache.catalina.UserDatabase" description= "User database that can be updated and saved" factory= "org.apache.catalina.users.MemoryUserDatabaseFactory" pathname= "conf/tomcat-users.xml" /> < /GlobalNamingResources > <!-- A "Service" is a collection of one or more "Connectors" that share a single "Container" Note: A "Service" is not itself a "Container" , so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/service .html --> <Service name= "Catalina" > <!--The connectors can use a shared executor, you can define one or more named thread pools--> <!-- <Executor name= "tomcatThreadPool" namePrefix= "catalina-exec-" maxThreads= "150" minSpareThreads= "4" /> --> <!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http .html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp .html APR (HTTP /AJP ) Connector: /docs/apr .html Define a non-SSL HTTP /1 .1 Connector on port 8080 --> <Connector port= "8080" protocol= "HTTP/1.1" connectionTimeout= "20000" redirectPort= "8443" /> <!-- A "Connector" using the shared thread pool--> <!-- <Connector executor= "tomcatThreadPool" port= "8080" protocol= "HTTP/1.1" connectionTimeout= "20000" redirectPort= "8443" /> --> <!-- Define a SSL HTTP /1 .1 Connector on port 8443 This connector uses the JSSE configuration, when using APR, the connector should be using the OpenSSL style configuration described in the APR documentation --> <!-- <Connector port= "8443" protocol= "HTTP/1.1" SSLEnabled= "true" maxThreads= "150" scheme= "https" secure= "true" clientAuth= "false" sslProtocol= "TLS" /> --> <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port= "8009" protocol= "AJP/1.3" redirectPort= "8443" /> <!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). Documentation at /docs/config/engine .html --> <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name= "Catalina" defaultHost= "localhost" jvmRoute= "jvm1" > --> <Engine name= "Catalina" defaultHost= "localhost" > <!--For clustering, please take a look at documentation at: /docs/cluster-howto .html (simple how to) /docs/config/cluster .html (reference documentation) --> <!-- <Cluster className= "org.apache.catalina.ha.tcp.SimpleTcpCluster" /> --> <!-- Use the LockOutRealm to prevent attempts to guess user passwords via a brute-force attack --> <Realm className= "org.apache.catalina.realm.LockOutRealm" > <!-- This Realm uses the UserDatabase configured in the global JNDI resources under the key "UserDatabase" . Any edits that are performed against this UserDatabase are immediately available for use by the Realm. --> <Realm className= "org.apache.catalina.realm.UserDatabaseRealm" resourceName= "UserDatabase" /> < /Realm > <Host name= "localhost" appBase= "webapps" unpackWARs= "true" autoDeploy= "true" > <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve .html --> <!-- <Valve className= "org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve .html Note: The pattern used is equivalent to using pattern= "common" --> <Valve className= "org.apache.catalina.valves.AccessLogValve" directory= "logs" prefix= "localhost_access_log." suffix= ".txt" pattern= "%h %l %u %t "%r" %s %b" /> < /Host > < /Engine > jsp页面被tomcat引擎运行的时候组装成java片段,但是这些java片段怎么没有main方法作为程序的入口啊?
|