精华内容
参与话题
问答
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    要想真正理解Linux系统,就必须从Linux命令学起,通过基础命令学习可以进一步理解Linux系统。 不同Linux发行版命令数量不一样,但Linux发行版本最少命令也有200多个。这里笔者把比较重要和使用频率最多命令...
  • 同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-mail账号,查询mail 服务器的会话…… 还包括消息客户端程序,通过连接创建会话。创建发送者和映射消息。发送消息,同时文本...
  •  相信很多接触java人都Tom猫有着多少熟悉,就个人而言,本来只知道Tom简单操作与配置,就像裹上一层纱,迷迷糊糊.  Tomcat书籍本来就不多,高分还是很久之前版本,直到最近看到下面这本书,解答了我很...

     文章概览

      相信很多接触java的人都对Tom猫有着多少的熟悉,就个人而言,本来只知道Tom简单的操作与配置,就像裹上一层纱,迷迷糊糊的.

      Tomcat的书籍本来就不多,高分的还是很久之前的版本,直到最近看到下面这本书,解答了我的很多疑问,同时这篇文章将总结读书收获.

      如果觉得文章写的内容是你感兴趣的或者我的猫使你感兴趣,建议你读读这本书.

      

     

      该文会介绍Tom的架构,服务器如何从一层层抽象设计到完整的架构

    Tomcat介绍

      Tom是一款全世界著名的轻量级应用服务器,基于java,服务于java.主要作为应用服务器来处理客户端发来的动态资源响应. 

      目前版本是9.x,很多人都在使用6.x,但新版其实提供了很多新的功能,比如WebSocket的支持,点击了解WebSocket

        

      Tomcat启动参数

        windows修改$CATALINA_HOME/bin/catalina.bat文件

        Set JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m

        linux修改$CATALINA_HOME/bin/catalina.sh文件

        JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m"

        -server  Server端启动Tomcat,Client启动Tomcat两者的初始化参数会有所不同

        -Xms1024m 初始化堆内存大小

        -Xmx2048m 允许的最大堆内存大小

        -XX:PermSize=256m 初始化非堆内存大小

        -XX:MaxPermSize=512m 允许的最大非堆内存大小

      Debug方式

        依赖于JDK提供的JPDA(Java Platform Debugger Architecture,Java平台调试体系)

        catalina jpda start

      目录结构

        

     

        该文使用的版本是apache-tomcat-9.0.1,目录大致都很容易理解.

        conf放置的Tomcat的核心配置文件,下文会介绍.

        webapps是默认的web app的应用目录,只要把项目目录放置进去就可以运行

        work是Tomcat运行时产生的jsp编译文件所存放的位置

     总体架构

      Tomcat是一款应用服务器,我们从最根本的类一层一层演变,直至Tomcat当前版本.

    1.应用服务器是接收其他计算机(客户端)发来的请求数据并对其解析,完成相关业务处理,然后把处理结果作为响应返回给计算机.

      

    2.一个问题摆在眼前,前面Server请求监听和请求处理放在一起,应用服务器通常会与web服务器进行集群部署和负载均衡,但是这两者的协议并不是HTTP.

    也就是说,服务器连接的另一端需要适配不同的协议来对请求作出不同的处理.前面的模型扩展性太差,应该分离请求监听和请求处理.

    Connector模块管理请求监听,Container模块负责请求处理,两个组件都拥有start()和stop()来加载和释放自己维护的资源.

    这样子,Server下可以有多个Connector来传送请求至不同的Container中.

    3.上面的设计有个缺陷,既然server可以有多个Connector和Container,那么如何知道哪个Connector将请求发至哪个Container呢?

    考虑一下下面这个设计图,

    4.我们接触过的Tomcat应该是放置web app的容器,在哪放置web app?这将决定哪个app来处理Engine所获取的请求信息.

      再想一下,我们浏览器是个app,对吧?然后服务器其实也是app对吧?网络就是两者的通信.我们来看一下网络是怎么进行通信的.

    没错,web app需要端点信息(IP地址,端口号),我们需要提供这一层的抽象.一个Host下可以对应有多个app(Context).

     

    5.现在设计已经可以满足两个应用的连接了,现在设想一下,应用该怎么进行表示?毕竟Tomcat作为一款Servlet容器而存在.首先Apache组织按照Servlet官方的标准,加入了Servlet的包装类Wrapper.

    6.就目前为止,我们使用"容器"这一概念来形容处理接收客户端的请求并且返回响应数据的组件,依此,使用一个类Container来统一表示这一想法,让Engine,Host,Context,Wrapper这类组件来继承Container.

    Container类能够添加子组件addChild方法,有时需要执行一些异步处理,所以加入backgroundProcess方法.

    由于Engine,Host,Context,Wrapper这类的引用变成了父类Container,所以之前的强组合关系变成了弱组合关系.强弱关系指的是两个类直接关联或者是间接关联.

     7.为了从抽象和复用层面上再审视一下当前设计,使概念更加清晰,提供通用性定义.由于所有容器都有着自身的生命周期管理方法,那么我们可以将其进行抽象成一个接口Lifecycle,在方法定义上加入初始化方法init,销毁方法destroy,事件监听方法addLifecycleListener和removeLifecycleListener.

    8.上面这个设计Container部分具有伸缩性和扩展性,这很棒.接下来Tomcat的开发人员为了提高每个组件的灵活性,使其更易扩展,加入了Pipeline和Valve这两个接口.这两个接口的设计运用了职责链模式.

    简单介绍以下职责链模式,关于设计模式可以查看博客里的文章《软件设计 : 聚焦设计模式》

    职责链模式使用一个抽象类来统一定义处理器,然后将处理器构造成一条链,当Client端发来请求时,第一个Handler判断是否处理,不处理则往下个Handler传递,直至被处理或则处理链结束.

    回头看Tomcat怎么运用这个设计模式,Pipeline接口用于构建职责链,Valve接口代表职责链上的每个处理器.

    Pipeline中维护一个基础的Valve,它始终位于Pipeline执行链的末端,封装了具体的请求处理和输出响应过程.

    这样就可以构造一条职责链,可是为什么要这么做?记得之前Container不就是可以自包含的容器吗?为什么要弄出多两个接口?

    的确,Container可以自包含,但是它是作为容器抽象类而存在,而阀(Valve)作为接口而存在,我们可以在实现这个接口的类中添加属于我们自己的Valve实现类,你想做什么都行.

      就像水管一样,你如果是超级马里奥,你可以随时给它加个阀,做任何事.

    9.前面的设计基本落在Container部分,来看看Connector的设计方案,Connector必须完成下面的功能项.

      ①监听服务器端口,读取客户端的请求

      ②将请求数据按指定协议进行解析

      ③根据请求地址匹配正确的容器进行处理

      ④将请求返回客户端

    Tomcat支持多协议(HTTP/AJP)和多种IO方式(BIO,NIO,NIO2,APR,HTTP/2)

      

    ProtocolHandler表示协议处理器,针对不同的协议和IO方式,提供不同的实现,ProtocolHandler包含一个Endpoint用来启动socket监听,该接口按照IO方式进行分类实现,还包含一个Process用于按照指定协议读取数据,并交由容器处理.

    处理逻辑如下:

    1.在Connector启动时,Endpoint会启动线程来监听服务器端口,并在接收到请求后调用Process进行数据读取.

    2.当Process读取客户端请求之后,需要按照地址映射到具体的容器进行处理,即请求映射.

    3.由于Tomcat各个组件采用通用的生命周期进行管理,而且通过管理工具进行状态变更,因此请求映射除了考虑映射规则的实现外,还要考虑容器组件的注册和销毁.

    Tomcat采用Mapper来维护容器映射信息,按照映射规则(Servlet规范定义)查找容器;

    MapperListener实现LifecycleListener和ContainerListener,用于在容器组件状态变更时,注册或者取消对应的容器映射信息;

    MapperListener实现了Lifecycle接口,当Service启动时,会自动作为监听器注册到各个容器组件之上,同时将已创建的容器注册到Mapper;

    Tomcat通过适配器模式实现了Connector与Mapper,Container的解耦,默认实现为CoyotoAdapter;

    10.到这里,服务器可以正常接入请求和完成响应,可是我们还没考虑到一个关键的问题——并发

    Tomcat使用组件式的设计理念,那么也会有并发组件.

    Tomcat组织为此提供了一个Executor接口表示一个可以在组件间共享的线程池,该接口同样继承自Lifecycle接口,按照通用组件进行管理.

    Executor由Service进行维护,因此同一个Service中的组件共享一个线程池.值得注意的是如果没有定义线程池,相关组件会自动创建线程池,此时线程池不再共享.

    在Tomcat中,Endpoint会启动一组线程来监听Socket端口,当接收到客户请求会创建请求处理对象,并交由线程池处理,由此支持并发处理客户端请求.

    11.现在Tomcat基础的核心组件已经完整了,但是架构其实还有很多组件没有显示出来.Tomcat开发人员为了让使用者很好地使用Tomcat,提供了一套配置环境来支持系统的可配置性——Catalina.

    Catalina代表了整个Servlet容器架构,包含了上面所有组件,还有还没谈及的安全,会话,集群,部署,管理等Servlet容器组件.它通过松耦合的方式集成了Coyoto,以完成按照请求协议进行数据读写.同时,还包括启动入口、Shell程序等.

    Bootstrap是Catalina的启动入口.

    为什么Tomcat不通过Catalina启动,而又提供了Bootstrap?

    查看一下Tomcat发布包目录,Bootstrap并不存放于Catalina的lib目录下,而是置于bin目录中.Bootstrap通过反射调用Catalina实例,与Tomcat服务器完全松耦合,它可以直接依赖JRE运行并为Tomcat应用服务器创建共享类加载器,用于构建Catalina实例以及整个Tomcat服务器.

     

    至此,Tomcat的基础核心组件介绍结束,我们回顾一下组件的概念

    Server   表示整个Servlet容器,一个Tomcat运行环境只存在一个Server,可存在多个Service.

    Service    表示链接器和处理器的集合,同一个Service下的链接器将请求传至该Service下的处理器

    Connector 表示链接器,用于监听并转化Socket请求,支持不同协议与IO方式

    Container  表示容器组件,能执行客户端请求并返回响应的组件

    Engine    表示顶级容器,是获取目标容器的入口

    Host   表示Servlet引擎中的虚拟机,提供Host之类的域名信息

    Context  表示一个web app应用上下文环境

    Wrapper 具体的Servlet包装类

    Executor   组件间共享的线程池

    Tomcat启动与请求响应

     

    Tomcat类加载器

    应用服务器通常会自行创建类加载器以实现更加灵活的控制,这是对规范的实现(Servlet规范要求每个Web应用都有独立的类加载器实例),也是架构层面的考虑.

    书中p46对类加载器进行了详细说明

    JVM默认提供了三个类加载器来进行类加载,Tomcat在加载器上进行扩展,用来加载应用自身的类.

    Bootstrap  JVM提供,加载JVM运行的基础运行类,即位于%JAVA_HOME%/jre/lib目录下的核心类库

    Extension    JVM提供,加载%JAVA_HOME%/jre/lib/ext目录下的扩展类库

    System      JVM提供,加载CLASSPATH指定目录下或者-classpath运行参数指定的jar包

             Tomcat的Bootstrap类即由这个加载器载入

    Common   以System为父类加载器,是Tomcat应用服务器顶层的公用类加载器,

             其路径common.loader,默认指向$Catalina_Home/lib目录.

    Catalina     用于加载Tomcat应用服务器的类加载器,路径为server.loader,

             默认为空,此时Tomcat使用Common类加载器加载应用服务器.

    Shared    所有Web应用的类加载器,路径为shared.loader,默认为空.

             此时使用Common类加载器作为Web应用的父加载器.

    Web App   加载WEB-INF/classes目录下未压缩的Class和资源文件以及/WEB-INF/lib目录下的jar包.

            该类加载器对当前web应用可见,对其他web应用不可见. 

     

     

     

     

     

    转载于:https://www.cnblogs.com/CARPE-DIEM-wu/p/7709545.html

    展开全文
  • 会经常听到Apache服务器,然后之前实习公司服务端用java,然后依稀记得使用了nginx反向代理服务器和tomcat,请求先经过nginx然后再去通过tomcat转发请求,然后对Apache服务器和tomcat和nginx理解就有点模糊了,...

    1 问题

    公司服务器用的Apache,后台是php语言,然后服务端用的linux C/C++,会经常听到Apache服务器,然后之前实习的公司服务端用的java,然后依稀记得使用了nginx反向代理服务器和tomcat,请求先经过nginx然后再去通过tomcat转发请求,然后对Apache服务器和tomcat和nginx理解就有点模糊了,然后今天查阅相关资料对使用场景和进行对比

     

     

     

    2 Apache、Tomcat 、Nginx名词解释

    1 ) Apache

    Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上,Linux、Unix、Windows等,属于应用服务器

    Apache支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,比如我之前用过freemarker,也是静态的,但可以通过扩展脚本、模块等支持动态页面等。

    Apache可以支持PHP、cgi、perl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理.

    缺点:配置相对复杂,自身不支持动态页面,需要插件扩展来辅助支持动态页面解析,如FastCGI、Tomcat,搞j2ee的小伙伴知道我们动态页面需要使用到jsp,所以我们是需要Tomcat来解析动态页面的,Tomcat就是servlet容器,当然它可以独立于Apache,直接把tomcat作为服务器

     

     

     

     

    2 ) Tomcat

    Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行,也就是说没有Apache,只有Tomcat也可以解析静态页面和动态页面(jsp),

     

     

     

    3 ) Nginx

    Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。

     

     

     

     

    3 对比

    1) Apache 与 Tomcat 比较

    相同点:

    都是Apache组织开发的,都有HTTP服务的功能,两者都是开源、免费的。

    不同点:

    a) Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器

    b) Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页如ASP、PHP,Freemarker,你要搞java服务端用到动态语言比如jsp,就需要Tomcat这个解释器,用来解析jsp,Apache是不能解析的,切记。

    c) Apache 侧重于HTTP Server,Tomcat 侧重于Servlet容器,支持JSP,但对静态网页不太理想,也就是说Apache和Tomcat这个2个服务器,Apache对静态文件处理能力强于Tomcat,Tomcat实用于解析动态语言(jsp),我们可以用Apache处理静文件,用Tomcat处理动态文件

    d) Apache是Web服务器,Tomcat是应用(Java)服务器,可以认为是Apache的扩展,但是可以独立于Apache运行

    实际使用:

    Apache+Tomcat(如果是java服务端)

    户端请求的是静态页面,则只需要Apache服务器响应请求。

    客户端请求动态页面,则是Tomcat服务器响应请求,JSP是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销。

    可以理解 Tomcat为Apache的一种扩展。

     

     

    2)Nginx 与 Apache 比较

    1 Nginx 优点
    a)轻量级,同样是web 服务,比apache占用更少的内存及资源 。

    b)抗并发,nginx 处理请求是异步非阻塞的多个连接(万级别)可以对应一个进程,而apache 则是同步阻塞型的,同步多进程模型,一个连接对应一个进程

    c)高度模块化的设计,编写模块相对简单。 

    d)提供负载均衡

    e)配置简洁

    f  ) Nginx 静态处理性能比 Apache 高 3倍以上

    e ) nginx只适合静态和反向代理


    反向代理的理解:

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器处理,其本身并不做处理,

    并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个web服务器,实际只做了转发,没有做处理。

     

    2  Apache 优点
    a)apache的 rewrite 比nginx 的强大。 

    b)支持动态页面。

    c)支持的模块多,基本涵盖所有应用。

    d)性能稳定

    e ) Apache 对 PHP 支持比较简单

    f ) 相比nginx,动态请求由apache去做比较好。

     

     

    3)Nginx 与 Tomcat 比较

    我们知道Nginx一般处理静态处理能力很强,但是不能解析动态语言比如(jsp)我们,还需要Tomcat进行解释jsp,所以动态处理我们一般使用Tomcat,静态处理使用Nginx,我之前实习的公司做的那个网站(https://www.shishuo.com)就是Nginx+Tomcat组合使用,Nginx起到反向代理的作用,如果是静态处理通过Nginx处理,动态请求才到后台Tomcat进行处理,这也就是Nginx的动态分离机制,我之前还不是太理解,现在终于理解为什么要这么搭配了,说到底就是Nginx的静态处理能力比Tomcat强,所以我们需要请求先经过Nginx,这里就不需要用到Apache服务器。

     

     

     

     

    4 总结

    a ) 静态处理能力:

    Nginx(至少是Apache3倍)>Apache>Tomcat

    b)Nginx优点:负载均衡反向代理处理静态文件优势,这也就是为啥java服务器Tomcat前面先要经过Nginx服务器处理一波,(只转发请求,不做其他操作,可以看下上面的反向代理的解释),Nginx并发性比较好,CPU内存占用低

    c)Apache优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片,当然读写能力比较强,如果rewrite频繁,那还是Apache较适合,比较稳定,处理动态有优势。前提是没有Tomcat,也就是说不是java服务端。

    d)Tomcat:动态解析容器,处理动态请求,是编译JSP、Servlet的容器,Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理

     

    展开全文
  • 谈谈我对apache+tomcat+jk2整合的理解

    千次阅读 2004-05-07 13:28:00
    整合目的(完全臆想) ------------------------------------------------------------------------------ apache 和 tomcat都可以做为独立WEB服务器来用,apache功能强大、高效,但并不能支持JSP及serlet,而...
    整合的目的(完全臆想) 
    ------------------------------------------------------------------------------
    apache 和 tomcat都可以做为独立的WEB服务器来用,apache功能强大、高效,但并不能支持JSP及serlet,而tomcat正相反,所以要把它们结合起来。
    通过在apache中加载整合模块和进行设置,apache就能够根据url,把不属于自己的请求转给tomcat.

    版本的选择的相关性:
    ------------------------------------------------------------------------------
    1.Apache
    httpd2.0.x,对于与apache1.3.x等版本有什么区别不知道,应该有个飞跃吧,连名字都改成httpd了。而我们选择了用JK2整合,JK2是针对apache2.0的思想开发的(英语太差,见原文:JK2 has been developed with Apache 2.0 in mind),所以选择用httpd2.0.x。

    2.整合方式-JK2
    为什么选择JK2呢?(JK is a replacement to the elderly mod_jserv. It was a completely new Tomcat-Apache plug-in that handles the communication between Tomcat and Apache.The newest JK2 is a refactoring of JK . The native part has been completly restructured and the configuration has been simplified a lot.)我只看重了最后一句话,呵呵。在JK的文档中有关于以前的整合模块及JK、JK2功能的详细描述。

    3.Tomcat5.0、J2SDK1.4.x
    能够支持JAVA,JSP,及Servlet的较新标准吧?它们之间应该有一定的关联,据说tomcat5及JDK1.4对中文的支持方式改变了不少,现在不用进行复杂的设置了就可以很好的使用中文,但对于针对以前JSP标准开发的页子的中文兼容性不太好。

    编译安装过程中的注意事项:
    -------------------------------------------------------------------------------
    1.Apache
    必须编译成允许动态加载模块的方式,即在configure时要加 --enable-so选项,因为将来要加载mod_jk2这个整合模块。
    假设apache的安装目录为PathofApache,则编译的模块在PathofApache/modules下,配置文件在PathofApache/conf下。

    2.tomcat
    只会用编译好的版本。解压、释放包就行了。(听说tomcat是JAVA写的,不知道用那个ANT编译有什么优势也没试成功过),假设tomcat安装目录为PathOfTomcat。

    3.JDK
    我用的是二进制版本,直接运行,自己解压释放包。(如果用那个RPM包我不知道JAVA_HOME怎么设,呵呵)设置JAVA_HOME和CLASSPATH环境变量。JAVA_HOME也可以不设置而在PathOfTomcat/bin/catalina.sh中赋值,CLASSPATH目前我还没设置,也许在JSP中要用到JAVA标准类的时候要用到。

    4。JK2模块编译
    假设JK2包释放后目录改名为PathOfJK2,且当前目录为PathOfJK2(
    参考JK文档,注意关于编译的部分在JK部分有说明,而默置要看JK2部分,因为不同的整合方式有很大的不同。http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/


    cd jk/native2

    chmod +755 buildconf.sh
    ./buildconf.sh (因为buildconf.sh没有执行权,所以要改,但“零二年的夏天”告诉我只要 sh buildconf.sh就可以执行了)

    ./configure --with-apxs2=PathOfApache/bin/apxs
    这个apxs在apache的安装目录的bin下,所以要先装apache。据说只有编译安装的apache才有这个文件,rpm包安装的没有这个文件,如果要给rpm包安装的apache编译整合模块,要找一个相同版本的编译一下用然后再删掉,版本号要完全相同,否则编译出来的模块不能用。
    还有两个参数我没有,英文的说明也没看太懂,就在JK的文档中有说明:
    --with-apache=DIR,DIR is the path where apache sources are located. The apache sources should have been configured before configuring mod_jk. DIR is something like: /home/apache/apache_1.3.19 It builds a static Apache module.
    --enable-EAPI,This parameter is needed when using Apache-1.3 and mod_ssl, otherwise you will get the error message: "this module might crash under EAPI!" when loading mod_jk.so in httpd. Not needed when --with-apxs has been used

    另外,我在执行configure的时候提示有错误,好像是关于路径的,我就先启动了tomcat,执行通过。(也许是我没有设置关于tomcat目录的环境变量的原因)
    make
    make install

    所有的文档都说如果发布不成功,那么要手工发布,我也是手工发布的:
    cp PathOfJK2/build/jk2/apache2/mod_jk2.so PathOfApache/modules/

    配置文件的修改
    -------------------------------------------------------------------------------
    JK2所用的配置文件有2个:
    jk2.properties,默认要放在PathOfTomcat/conf中
    workers2.properties默认要放在PathOfApache/conf中

    这两个文件的作用真的不明白,jk2.properties可能是定义tomcat与apache的通讯端口等,workers2.properties可能是告诉apache有哪些目录是tomcat支持的。

    1.在PathOfTomcat/conf中有tomcat的主配置文件server.xml和JK2的配置文件jk2.properties。
        实际上我对这两个文件没有做任何修改,而jk2.properties缺省就是空的。看了看在server.xml中起作用的可能就是在第一个后面紧挨着的对于整合在起作用吧,没有应该加上。
    <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" enableLookups="false"  redirectPort="8443" debug="0"
    protocol="AJP/1.3" />

    2.在PathOfApache/conf中有apache的配置文件httpd.conf,及JK2配置文件workers2.properties
    修改httpd.conf,只加入:LoadModule jk2_module modules/mod_jk2.so
    关于workers2.properties,引用JK文档例子中最小配置如下:
    # Define the communication channel
    [channel.socket:localhost:8009]
    info=Ajp13 forwarding over socket
    tomcatId=localhost:8009

    # Map the Tomcat examples webapp to the Web server uri space
    [uri:/examples/*]
    info=Map the whole webapp

    这个/examples应该是tomcat下的路径而不是apache的,但在这里做了映射,这个URL就能被apache接受并转给tomcat,而不用加tomcat的端口号了。
    这样就完成了一种整合方式,这可能是最简单但很少用的配置方法吧
    ——————————————————————————

    还有一种配置的方法很实用,但有一点地方不明白,适合做虚拟主机。

    1.把apache与tomcat都做虚拟主机,并且相同的主机指向相同的根目录
    2,默认情况下:jk2.properties可为空,workers2.properties不用做地址映射(?)
    3.除了做虚拟主机,还要做如下修改
    http.conf的修改
    在虚拟主机之前加入
    <Directory ~ "/WEB-INF/">
    Order allow,deny
    Deny from all
    </Directory>
    #因为apache与tomcat指向相同的目录,所在要禁止对WEB-INF的访问。

    在虚拟主机的配置中
    <Location ~ "/*.jsp|/*/servlet/*">
    JkUriSet worker ajp13:localhost:8009
    </Location>
    #这可能是做映射,将目录中的jsp和servlet由tomcat解析。

    server.xml的修改

    在虚拟主机的host中加入
    <Context path="" docBase="" debug="1"/>
    (这个tomcat很奇怪,不像apache只要指定DocumentRoot,那么网站的逻辑根目录就是DocumentRoot指定的了,而tomcat用appBase指定的应该叫什么呢?要用上面的一句将appBase指定的目录声明为根目录,appBase下其它目录默认情况下就是网站逻辑子目录)

    关于虚拟主机整合的配置,JK文档的例子说得很清楚,或看本版的一篇精华。
    ------------------------

    我就理解这么多,对于jk2.properties,workers2.properties,tomcat,apache里的配置参数根本很少了解,我想把它们理解了也许就明白了。。。。。。

    展开全文
  • 都是转载整合目的(完全臆想) ------------------------------------------------------------------------------ apache 和 tomcat都可以做为独立WEB服务器来用,apache功能强大、高效,但并不能支持JSP及...

    都是转载的

    整合的目的(完全臆想)
    ------------------------------------------------------------------------------
    apache 和 tomcat都可以做为独立的WEB服务器来用,apache功能强大、高效,但并不能支持JSP及serlet,而tomcat正相反,所以要把它们结合起来。
    通过在apache中加载整合模块和进行设置,apache就能够根据url,把不属于自己的请求转给tomcat.

    版本的选择的相关性:
    ------------------------------------------------------------------------------
    1.Apache
    httpd2.0.x,对于与apache1.3.x等版本有什么区别不知道,应该有个飞跃吧,连名字都改成httpd了。而我们选择了用JK2整合,JK2是针对apache2.0的思想开发的(英语太差,见原文:JK2 has been developed with Apache 2.0 in mind),所以选择用httpd2.0.x。

    2.整合方式-JK2
    为什么选择JK2呢?(JK is a replacement to the elderly mod_jserv. It was a completely new Tomcat-Apache plug-in that handles the communication between Tomcat and Apache.The newest JK2 is a refactoring of JK . The native part has been completly restructured and the configuration has been simplified a lot.)我只看重了最后一句话,呵呵。在JK的文档中有关于以前的整合模块及JK、JK2功能的详细描述。

    3.Tomcat5.0、J2SDK1.4.x
    能够支持JAVA,JSP,及Servlet的较新标准吧?它们之间应该有一定的关联,据说tomcat5及JDK1.4对中文的支持方式改变了不少,现在不用进行复杂的设置了就可以很好的使用中文,但对于针对以前JSP标准开发的页子的中文兼容性不太好。

    编译安装过程中的注意事项:
    -------------------------------------------------------------------------------
    1.Apache
    必须编译成允许动态加载模块的方式,即在configure时要加 --enable-so选项,因为将来要加载mod_jk2这个整合模块。
    假设apache的安装目录为PathofApache,则编译的模块在PathofApache/modules下,配置文件在PathofApache/conf下。

    2.tomcat
    只会用编译好的版本。解压、释放包就行了。(听说tomcat是JAVA写的,不知道用那个ANT编译有什么优势也没试成功过),假设tomcat安装目录为PathOfTomcat。

    3.JDK
    我用的是二进制版本,直接运行,自己解压释放包。(如果用那个RPM包我不知道JAVA_HOME怎么设,呵呵)设置JAVA_HOME和CLASSPATH环境变量。JAVA_HOME也可以不设置而在PathOfTomcat/bin/catalina.sh中赋值,CLASSPATH目前我还没设置,也许在JSP中要用到JAVA标准类的时候要用到。

    4。JK2模块编译
    假设JK2包释放后目录改名为PathOfJK2,且当前目录为PathOfJK2(
    参考JK文档,注意关于编译的部分在JK部分有说明,而默置要看JK2部分,因为不同的整合方式有很大的不同。http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/


    cd jk/native2

    chmod +755 buildconf.sh
    ./buildconf.sh (因为buildconf.sh没有执行权,所以要改,但“零二年的夏天”告诉我只要 sh buildconf.sh就可以执行了)

    ./configure --with-apxs2=PathOfApache/bin/apxs
    这个apxs在apache的安装目录的bin下,所以要先装apache。据说只有编译安装的apache才有这个文件,rpm包安装的没有这个文件,如果要给rpm包安装的apache编译整合模块,要找一个相同版本的编译一下用然后再删掉,版本号要完全相同,否则编译出来的模块不能用。
    还有两个参数我没有,英文的说明也没看太懂,就在JK的文档中有说明:
    --with-apache=DIR,DIR is the path where apache sources are located. The apache sources should have been configured before configuring mod_jk. DIR is something like: /home/apache/apache_1.3.19 It builds a static Apache module.
    --enable-EAPI,This parameter is needed when using Apache-1.3 and mod_ssl, otherwise you will get the error message: "this module might crash under EAPI!" when loading mod_jk.so in httpd. Not needed when --with-apxs has been used

    另外,我在执行configure的时候提示有错误,好像是关于路径的,我就先启动了tomcat,执行通过。(也许是我没有设置关于tomcat目录的环境变量的原因)
    make
    make install

    所有的文档都说如果发布不成功,那么要手工发布,我也是手工发布的:
    cp PathOfJK2/build/jk2/apache2/mod_jk2.so PathOfApache/modules/

    配置文件的修改
    -------------------------------------------------------------------------------
    JK2所用的配置文件有2个:
    jk2.properties,默认要放在PathOfTomcat/conf中
    workers2.properties默认要放在PathOfApache/conf中

    这两个文件的作用真的不明白,jk2.properties可能是定义tomcat与apache的通讯端口等,workers2.properties可能是告诉apache有哪些目录是tomcat支持的。

    1.在PathOfTomcat/conf中有tomcat的主配置文件server.xml和JK2的配置文件jk2.properties。
        实际上我对这两个文件没有做任何修改,而jk2.properties缺省就是空的。看了看在server.xml中起作用的可能就是在第一个后面紧挨着的对于整合在起作用吧,没有应该加上。
    <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" enableLookups="false"  redirectPort="8443" debug="0"
    protocol="AJP/1.3" />

    2.在PathOfApache/conf中有apache的配置文件httpd.conf,及JK2配置文件workers2.properties
    修改httpd.conf,只加入:LoadModule jk2_module modules/mod_jk2.so
    关于workers2.properties,引用JK文档例子中最小配置如下:
    # Define the communication channel
    [channel.socket:localhost:8009]
    info=Ajp13 forwarding over socket
    tomcatId=localhost:8009

    # Map the Tomcat examples webapp to the Web server uri space
    [uri:/examples/*]
    info=Map the whole webapp

    这个/examples应该是tomcat下的路径而不是apache的,但在这里做了映射,这个URL就能被apache接受并转给tomcat,而不用加tomcat的端口号了。
    这样就完成了一种整合方式,这可能是最简单但很少用的配置方法吧
    ——————————————————————————

    还有一种配置的方法很实用,但有一点地方不明白,适合做虚拟主机。

    1.把apache与tomcat都做虚拟主机,并且相同的主机指向相同的根目录
    2,默认情况下:jk2.properties可为空,workers2.properties不用做地址映射(?)
    3.除了做虚拟主机,还要做如下修改
    http.conf的修改
    在虚拟主机之前加入
    <Directory ~ "/WEB-INF/">
    Order allow,deny
    Deny from all
    </Directory>
    #因为apache与tomcat指向相同的目录,所在要禁止对WEB-INF的访问。

    在虚拟主机的配置中
    <Location ~ "/*.jsp|/*/servlet/*">
    JkUriSet worker ajp13:localhost:8009
    </Location>
    #这可能是做映射,将目录中的jsp和servlet由tomcat解析。

    server.xml的修改

    在虚拟主机的host中加入
    <Context path="" docBase="" debug="1"/>
    (这个tomcat很奇怪,不像apache只要指定DocumentRoot,那么网站的逻辑根目录就是DocumentRoot指定的了,而tomcat用appBase指定的应该叫什么呢?要用上面的一句将appBase指定的目录声明为根目录,appBase下其它目录默认情况下就是网站逻辑子目录)

    关于虚拟主机整合的配置,JK文档的例子说得很清楚,或看本版的一篇精华。
    ------------------------

    我就理解这么多,对于jk2.properties,workers2.properties,tomcat,apache里的配置参数根本很少了解,我想把它们理解了也许就明白了。。。。。。 

     

    展开全文
  • 认为tomcat就是apache,或者tomcat是apache的图形界面 实际上可以认为tomcat是apache服务器的一个模块,主要支持jsp   2. 认为tomcat建好后,任何网页或者网站文件只要往webapp里面一扔就能显示...
  • 整合目的(完全臆想)------------------------------------------------------------------------------apache 和 tomcat都可以做为独立WEB服务器来用,apache功能强大、高效,但并不能支持JSP及serlet,而...
  • 在这一讲中,我们主要是了解一下 Linux 概况,以及 Linux 有一个初步感性认识。 一.什么是Linux? Linux 是一个以 Intel 系列 CPU(CYRIX,AMD CPU也可以)为硬件平台,完全免费 UNIX 兼容系统,完全...
  • 找到org.apache.catalina.connector.Request类getParameter方法 @Override public String getParameter(String name) { if (!parametersParsed) { parseParameters(); } return coyoteRequest.get...
  • 一个apache有linux下并发不是很高,大约到3K样子,普通的服务器都会不同程度出现问题.apache有关并发控制主要是prefork和worker二个其中一个来控制.我们可以使用httpd -l来确定当前使用MPM是prefork.c,还是...
  • 深入理解Apache虚拟主机

    千次阅读 2011-01-24 17:03:00
    访问web服务,本质上看(从协议上)是访问某个IP主机上某个端口(默认是80)通常需要通过访问不同域名或者端口实现不同网站访问(具体到服务器里就是不同目录),这个时候就需要设置虚拟主机(VirtualHost)....
  • apache服务器中openssl配置https

    千次阅读 2018-05-10 11:33:04
    最近需要研究下apache的签名问题,主要是利用openssl来实现,就openssl研究了下。理论基础:OpenSSL初接触人恐怕最难在于先理解各种概念 公钥/私钥/签名/验证签名/加密/解密/非对称加密 我们一般加密是用...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-mail账号,查询mail 服务器的会话……  还包括消息客户端程序,通过连接创建会话。创建发送者和映射消息。发送消息,同时...
  • apache中,通常都是在httpd.conf文件中完成对服务器的配置,但是对于一些管理员来说,更简单的精细化的控制目录可以使他们节省很多的时间,于是.htaccess文件提供了这样一个功能(其实apache提供的这种独立出来的....
  • apache在linux下并发不是很高,大约到3K样子(其实处理http请求可能只有300/s),普通的服务器都会不同程度出现问题,apache有关并发控制主要是 prefork和worker二个其中一个来控制。我们可以使用httpd -l...
  • GET和POST正确理解

    热门讨论 2016-05-27 21:15:38
    GET和POST的正确理解    GET是用于获取数据的,POST,一般用于将... 原来的理解:  可能很多人都已经猜到了,一开始我们查到的很多介绍都是:  1. GET使用URL或Cookie传参。而POST将数据放
  • 理解服务器的核心容器以及servlet工作原理。 服务器实现步骤 浏览器发起的每个请求,都需要解析和响应,请求报文解析,和响应报文部分内容封装请求对象和响应对象(HttpServletRequest和HttpServletResponse都...
  • 理解 Apache与Tomcat

    2017-02-17 13:35:00
    一般使用apache+tomcat话,apache只是作为一个转发,jsp处理是由tomcat来处理apache可以支持php\cgi\perl,但是要使用java话,你需要tomcat在apache后台支撑,将java请求由apache转发给tomcat处理。...
  • 本章讲解了如下内容: 网站服务程序;...主流 Web 服务程序来使读者更好地理解其各自优势及特点,最后通过 httpd 服务程序 中“全局配置参数”、“区域配置参数”及“注释信息”理论讲解...
  • 下面我想讲讲我PHP优化的理解。优化的目的是花最少的代价换来最快的运行速度与最容易维护的代码。  我这里所说的优化,基本上都是从服务器Apache,数据库这些方面来进行的优化,而并不是的PHP代码加以改进...

空空如也

1 2 3 4 5 ... 20
收藏数 399
精华内容 159
关键字:

对apache服务器的理解