首页 > 代码库 > Tomcat详解及SNS系统的部署实现

Tomcat详解及SNS系统的部署实现

前言:Tomcat是基于java研发的一个web容器,即web服务器,下面我们先简单介绍下Java


一 、Java


1、Java简介


  Java是由Sun Micorsystems公司于1995年5月推出的Java面向对象程序设计语言(简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器使得Java被广泛应用起来。


2、Java特点

  • Java语言是面向对象的语言,以数据为中心来组织程序的,包括数据+方法,方法存放于类中

  • 自身具有API(应用程序编程接口)与ABI(应用程序二进制接口),强大的跨平台能力;

  • 动态站点(运行在服务器端和客户端);

  • Java平台兼容了大部分的操作系统,可以只编译一次,就可以在各种系统中运行;

  • 自带GC(内存垃圾收集),无需再向C那样使用时自己注册一段内存,完了还要自己释放。Java自身可以自动的释放内存,避免了内存释放错误

  • 多线程,适应于并行架构(多核心CPU),实现程序的高效执行


3、Java的组成部分

 -- Java编程语言

 -- Java类文件格式

 -- Java虚拟机

 -- Java应用程序接口(API)


  四者关系:Java编程语言+Java API编写出.java的源码文件;

            .java源码文件经过Java编译器Java Copmplier 进行编译生成.class(字节码文件)

            .class类文件通过类文件加载器加载,在Java虚拟机(JVM)上运行,同时可能会需要               一些类库


  JVM :

Java虚拟机(JVM)的组成部分
#Java class loader 类加载器
#Java 执行引擎(即执行环境)


wKiom1NtyleAUovJAABmVELCB_8942.jpg


JRE :Java Running Environment Java运行环境-----面向桌面级一般用户
      由JVM(Hotspot)+ JavaSE  API  
JDK: Java Development Kit  Java开发工具包
      Java程序设计语言
      工具及工具API
      JRE



4、Java体系



Java SE : Standard  Editon ,J2SE(以前称呼)
#支持面向桌面级应用,提供了完整的Java核心API
Java EE:Enterprise Edition, J2EE(以前称呼)
#支持使用多层架构的企业应用(如EJB,CRM等),包含了Java SE,并额外提供了大量的企业级类库
Java ME: Micro  Edition, J2ME (以前称呼)


   Java EE 建立在Java SE 基础之上,依赖Java SE工作

   Java EE 更适合解决大型软件系统设计中的问题,包含了多个API,Servlet和JSP就是其中两个  


Java EE 包含的其他的APIs
#EJB(Enterprise JavaBeans):JAVA相关的诸多高级功能的实现,如RMI(Remote Method Invocation), 对象/关系映射,跨越多个数据源的分布式事务等;
#JMS(Java Message Service):高性能异步消息服务,实现JAVA EE应用程序与非JAVA程序的“透明”通信;
#JMX(Java Management Extensions):在程序运行时对其进行交互式监控和管理的机制;
#JTA(Java Transaction API):允许应用程序在自身的一个或多个组件中平滑地处理错误的机制;
#JavaMail:通过工业标准的POP/SMTP/IMAP协议发送和接收邮件的机制;
Java SE 包含的其他APIs:
#JNDI(Java Naming and Directory Interface):用于与LDAP服务交互的API;
#JAXP(Java API for XML Processing):用于分析及转换XML(基于XSLT实现);



5 Java 执行过程


wKiom1Ntzv-h0RWeAADwgdb9kTU394.jpg


#Java语言来编写源代码,把它编译成Java Class文件,然后在Java VM中运行class文件;当编写程序时,通过调用类(Java API)中的方法来访问系统资源,而当程序运行时,它通过调用class文件中实现了Java API的方法也满足程序的Java API调用。Java VM和Java API一起组成了一个“平台“,所有Java程序都在其上编译和运行,因此,它们有时也被称作Java运行时环境。Java VM的主要任务是装载class文件并且执行其中的字节码。Java VM包含一个类装载器(class loader),它可以从程序和API装载class文件;而Java API的类只在程序执行中需要时才会被装载。



6、Java EE 中的 Servlet 和 JSP




JSP是一种脚本语言,语法简单,可以方便的嵌入到HTML中
Servlet必须需要硬编码进html中
#JSP 就是为了简化Java和Servlet的使用难度,同时通过扩展JSP标签(TAG)提供网页动态执行的能力
JSP与Servlet的关系
#当Web服务器(或Servlet引擎,应用服务器)支持JSP引擎时,JSP引擎会照着JSP的语法,将JSP文件转换成Servlet代码源文件,接着Servlet会被编译成Java可执行字节码(bytecode),并以一般的Servlet方式载入执行
*.jsp文件 -jasper引擎-> *.java文件 -javac编译器-> .class (JVM运行)。


wKioL1Nt1qXAm9sfAACqzLbOldc874.jpg


#在不修改JSP页面的情况下,除了第一个客户访问JSP页面需要经过以上几个步骤外,以后访问该JSP页面的客户请求,直接发送给JSP对应的字节码程序处理,并将处理结果返回给客户,这种情况下,JSP页面既不需要启动服务器,以便重新加载修改后的JSP页面。



二 、Tomcat


1、简介

  Tomcat就是一个Java EE的不完整实现,是一个web容器,也可以成为web服务器。它只使用了Java EE附带的两个类库-----Servlet与JSP,(关于这两个类库什么关系上边我们已经详述!),Tomcat服务器时Apache组织开发的一种JSP引擎,同时支持Servlet,本身就具有WEB服务器的功能,但是在WEB服务器方面Tomcat处理静态的HTML页面不如Apache迅速,也没有Apache健壮,所以我们一般将Tomcat与Apache配合使用,让Apache处理静态页面的请求,Tomcat作为专门的JSP引擎,提供JSP解析。


2、常见的web容器



商业版:
Sun GlassFish Enterprise Server
Sun Java System Web Server
JBoss Enterprise Application Platform
WebLogic Application Server
Caucho‘s Resin Server
WebSphere Application Server
NetWeaver
非商业版:
Apache Tomcat
Apache Geronimo
GlassFish
JBoss Application Server
Jetty


3、Tomcat的体系结构


  •    顶级组件:位于配置层次的顶级,并且彼此有严格的对应滚戏(Server,Service)

  •    连接器:连接客户端(可以是浏览器或web服务器)请求至Servlet容器

  •    容器:包含一组其他组件,如Engine、Host、Context

  •    被嵌套的组件:位于一个容器当中,但不能包含其他组件(如Realm 领域、valve过滤认证       logger记录日志)        



顶级组件
#1 服务器(server):Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例;因此,一台服务器上可以在启动多个JVM的情况下每一个JVM中启动一个Tomcat实例,每个实例分属于一个独立管理端口。这是一个顶级组件
#2 服务(service):一个服务组件通常包含一个引擎和此引擎相关联的一个或多个连接器。给服务命名可以方便管理员在日志文件中识别不同服务产生的日志。一个server可以包含多个service组件,但通常情况下只为一个service指派一个server
连接器类组件:
# 连接器(connectors):负责连接客户端(可以是浏览器或web服务器)请求至Servlet容器内的web应用程序,通常指的是接受客户发来请求的位置及服务器段分配的端口。默认端口通常是HTTP协议的8080,管理员可以根据自己的需要改变此端口。一个引擎可以连接多个连接器,但这些连接器必须使用不同的端口。默认的连接器是HTTP/1.1的Coyote,同时Tomcat也支持AJP、JServ和JK2连机器。
容器类组件:
#(1)引擎(Engine):通常指Cataliana Servlet引擎,它检查每一个请求的HTTP首部信息辨别此请求应该发往到哪个host或context,并将请求处理后的结果发送给客户端。一个引擎可以包含多个主机组件。
#(2)主机(Host):主机组件类似于Apache的虚拟主机,但Tomcat只支持基于FQDN的虚拟主机。至少一个主机组件。
#(3)上下文(Context):Context组件式最内层组件,代表Web应用程序本身。配置一个Context最主要的就是指定Web应用程序的根目录,一遍Servlet容器能偶将用户请求发往正确的位置。Context组件也可以定义包含错误页,实现用户访问发生错误时提供友好的提示信息。
被嵌套类组件:
#(1)阀门(valve):可以定义在任何容器类的组件中,用来记录客户端请求/客户端IP地址和服务器等信息。
#(2)日志记录器(logger):可以用于除Context之外的任何容器中。记录日志
#(3)领域(Realm):用于用户的认证和授权


4、Tomcat连接器架构    


# 基于Apache作为Tomcat前段的架构来讲,Apache通过mod_jk、mod_proxy模块与后端的Tomcat进行数据交换
apache与tomcat连接器通信的模块有两个:
1) mod_jk  : apache/1.3,  apache/2.0
2) mod_proxy : apache/2.2+
Tomcat的http连接器
# 1)基于java的http/1.1连接器;
# 2)基于java的高性能NIO HTTP/1.1连接器
# 3)基于C/C++研发的Native APR HTTP/1.1连接器 (需要额外编译安装)
Tomcat的连接器协议
# 1)http
# 2)ajp
Tomcat的工作模式
# 1)单独模式
# 2)进程间配置
# 3) 独立/网络配置


5、 Tomcat的组织机构



<Server>      顶层元素,代表一个服务器
  <Service>  顶层元素,是Connector的集合,只有一个Engine
      <Connectior/>        连接器类元素,代表通信接口
          <Engine>   容器类元素,为特定的Service组件处理所有客户请求,可包含多个Host
              <Host>    为特定的虚拟主机处理所有客户请求
                  <Context>     为特定的WEB应用处理所有客户请求
                  </Context>
              </Host>
          </Engine>
</Service>
</Server>


6、Tomcat的配置文件



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的默认配置信息;



7 、安装Tomcat


   安装方式:1)rom包yum安装

             2)官网的二进制包安装

             3)源码包编译安装



下载:jdk-7u9-linux-x64.rpm
      apache-tomcat-7.0.42.tar.gz
jdk 环境的配置
1)安装jdk
# rpm -ivh jdk-7u9-linux-x64.rpm
2)配置环境变量
# vim  /etc/profile.d/java.sh
 exportJAVA_HOME=/usr/java/latest                                     
 export PATH=$JAVA_HOME/bin:$PATH 
# source /etc/profile.d/java.sh 重读配置文件
3)查看版本
# java -version


wKiom1Nt8hTgYTy3AACqYAgCUV0446.jpg



tomcat配置
1)解压,建立软连接
# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local
# cd /usr/local
# ln -sv apache-tomcat-7.0.42 tomcat
2)配置环境变量
# vim /etc/profile.d/tomcat.sh
 export  CATALINA_HOME=/usr/local/tomcat
 export  PATH=$CATALINA_HOME/bin:$PATH
# source /etc/profile.d/tomcat.sh
3) 提供tomcat脚本
# vim  /etc/rc.d/init.d/tomcat
 #!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS=‘-Xms64m -Xmx128m‘
JAVA_HOME=/usr/java/latest
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME
                                                                                                                                                                                                                                                                                                                                                                          
case $1 in
start)
  exec $CATALINA_HOME/bin/catalina.sh start ;;
stop)
  exec $CATALINA_HOME/bin/catalina.sh stop;;
restart)
  $CATALINA_HOME/bin/catalina.sh stop
  sleep 2
  exec $CATALINA_HOME/bin/catalina.sh start ;;
configtest)
  exec $CATALINA_HOME/bin/catalina.sh configtest ;;
*)
  exec $CATALINA_HOME/bin/catalina.sh * ;;
esac  
                                                                                                                                                                                                                                                                                                                                                                          
# chmod +x /etc/rc.d/init.d/tomcat
# chkconfig --add tomcat
# chkconfig tomcat on
# service tomcat start 启动服务
# ss -ntl | grep 8080  tomcat默认侦听的端口为8080
LISTEN     0      100                      :::8080


    web浏览器访问

wKiom1Nt9VfiygLJAALK0V705bI853.jpg

   Tomcat 目录文件


[root@node2 zxj]# cd /usr/local/tomcat/
[root@node2 tomcat]# ls
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work



#bin ——Tomcat执行脚本目录
#conf ——Tomcat配置文件
#lib ——Tomcat运行需要的库文件(JARS)
#logs ——Tomcat执行时的LOG文件
#temp ——Tomcat临时文件存放目录
#webapps ——Tomcat的主要Web发布目录(存放我们自己的JSP,SERVLET,类)
#work ——Tomcat的工作目录,Tomcat将翻译JSP文件到的Java文件和class文件放在这里。



8、配置tomcat的 Server status 、Manager App、Host Manager


# cd  /usr/local/tomcat/conf
# vim tomcat-users.xml
 <role rolename="manager-gui"/>
 <role rolename="admin-gui"/>
 <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
# service tomcat restart


   Web浏览器测试

   Manager Status

wKiom1NuEALwpp1XAALdjrQUFhs234.jpg


  Manager APP ----可以管理web应用程序 wKioL1NuEAXjKiItAAJoh70Nrdg088.jpg

  Manager Host ---管理虚拟主机

wKiom1NuEHahJfx2AAIkrj6si7U127.jpg



9、Tomcat上部署程序



1)本机安装mysql服务器与mysql客户端
# yum -y install mysql-server mysql
  授权用户
#mysql> grant all on *.* to ‘root‘@‘localhost‘ identified by ‘123456‘;
#mysql> flush privileges;



2)编辑server.xml配置文件,添加一个host和context
 # vim  /usr/local/tomcat/conf/server.xml
 <Host name="www.a.com" appBase="/www/webapps" unpackWARS="true" autoDeploy="true">
  <Context path="" docBase="ROOT" reloadable="true" />
                                                                                                                                                 
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log." suffix=".txt"
    pattern="%h %l %u %t &quot;%r&quot; %s %b" />
 </Host>



3)配置web程序
# mkdir -pv /www/webapps/ROOT
下载JavaCenter_Home_2.0_GBK.tar.bz2
# tar xf JavaCenter_Home_2.0_GBK.tar.bz2
# cd JavaCenter_Home_2.0_GBK
# mv * /www/webapp/ROOT


  Web浏览器测试

http://www.a.com/install/

wKiom1NuE3rQhRx8AAFePnMu6og929.jpg

wKioL1NuE2XzwZZ1AAMgqwHDfb0117.jpg


 JavaCenter_Home程序部署成功!!!



PS:个人水平有限,如有疑问请留言,如有错误请及时指出.






本文出自 “西风瘦猪” 博客,请务必保留此出处http://jungege.blog.51cto.com/4102814/1409290