最新分享_分享_百度空间

Posted on

最新分享分享百度空间

百度空间Logo

交友中心

分享

lpwok的分享

分享

LINUX下使用apache+tomcat构建WEB集群系统

一、集群的基本知识 集群技术是目前非 常流行的提高系统服务能力与高可靠性( HA- High Availability )的手段,通过把多个独立的服务器组成一个集群可以实现失效无缝转移。也就是说当有某一台集群中的服务器当机后,其上的用户状态数据可以无缝迁移到集群中 的其他服务器上。这样,正在使用应用的客户可以完全感觉不到影响,大大提供了系统的可靠性。

集群有很多种类和层次,例如:操作系统集群(如 Linux 、 Solaris 等),数据库集群(如 DB2 、 Oracle 等),应用服务器集群(如 GlassFish 、 WebLogic 等) ,Web 集群(如 Tomcat 等)。本教程将向读者介绍由 Tomcat 搭建的 Web 集群。

不管是由什么技术搭建的集群,其基本组成由下图所示: 图 1-1

从图中可以看出,每个集群都需要一个负载均衡器,其负责根据一定的算法将外界发送到集群的请求尽量均匀地分配到集群中的每个服务器,使得集群中所有 服务器的负载尽量平衡。对外界的客户端而言其并不知道具体访问了集群中的哪台服务器,多台服务器从逻辑上对外界而言可以看作一台"大"服务器。这样,当集 群的服务能力不能满足当前的需要时,可以非常方便地再向集群中添加新的服务器来满足需要。可以看出,使用了集群之后,系统具有非常好的可扩展性。

当不幸集群中有某台服务器突然当机时,其用户状态数据可以迁移到其他服务器上,不影响在线用户的使用。这样,通过使用集群技术可以方便地实现系统的高可靠性。

本教程中将介绍的使用 Tomcat 搭建的 Web 集群结构如图 1-2 所示:

图 1-2

从图中可以看出集群的负载均衡器由开源的 Apache 服务器担任,集群中的 Web 服务器由两个 Tomcat 服务器分别担任,后台的数据库服务器由一个 MySQL 服务器担任。

提示:本教程中介绍的是 Web 集群,因此数据库服务器只有一个,并没有搭建集群。在需要的情况下,多台数据库服务器也可以组成集群以提高服务能力与可靠性。

二、安装JDK

三、安装TOMCAT

  1. 下载tomcat,可以通过下面的命令下载:

/#wget http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz

  1. 解压启动测试:

/#tar -zxvf apache-tomcat-6.0.18.tar.gz /#./apache-tomcat-6.0.18/bin/startup.sh

在浏览器中输入:http://localhost:8080,看是否启动正常,若正常进行第三步。

  1. 下面通过一个简单的" Test.jsp "程序进一步验证 Tomcat 是否安装成功,新建名称为" Test.jsp "的 Jsp 源文件并在其中输入如下代码。

<%@ page contentType="text/html;charset=GBK"%>

Tomcat<em> </em>测试

<% out.print( " 恭喜您,成功的安装并启动了 Tomcat !!! " ); %>

  1. 重启(命令如下),然后输入:http://localhost:8080/Test.jsp 看是否正常。

/#./apache-tomcat-6.0.18/bin/shutdown.sh /#./apache-tomcat-6.0.18/bin/startup.sh

四:TOMCAT集群的搭建

  1. 安装两个或以上tomcat

/#./apache-tomcat-6.0.18/bin/shutdown.sh /#mv apache-tomcat-6.0.18 /usr/local/TC6_A /#cd /usr/local /#cp -a TC6_A TC6_B

提示:进行上述步骤操作的原因是,本案例中集群的各个 Tomcat 服务器实例运行在同一个物理服务器上,因此集群中有几个 Tomcat 实例一般就需要几个 Tomcat 的安装。另外,由于集群中的各个 Tomcat 实例位于同一个物理服务器上的一个操作系统下,因此各个实例占用的各种网络端口不能相同,否则集群中的多个 Tomcat 实例不能同时正常启动,下面的步骤将介绍如何修改 Tomcat 实例需要使用的各个网络端口。

  1. 修改 Tomcat 实例需要使用的各个网络端口
  • 找到 server.xml 配置文件中的" Server "配置项目,并进行修改。

说明:第一行为两个 Tomcat 修改前的情况,第二行为 TC6_A Tomcat 修改后的情况,第三行为 TC6_B Tomcat 修改后的情况。

  • 找到 server.xml 配置文件中的相应" Connector "配置项目,并进行修改。

  • 修改前内容如下:

  • TC6_A 中修改后内容如下:

  • TC6_B 中修改后内容如下:

提示:此步骤目的是修改 AJP Connector 端口。

  • 找到 server.xml 配置文件中的另一个相应" Connector "配置项目,并进行修改。

  • 修改前内容如下:

  • TC6_A 中修改后内容如下:

  • TC6_B 中修改后内容如下:

提示:此步骤目的是修改 HTTP Connector 端口,其中的" 10001 "与" 20001 "是未来通过浏览器访问集群中各个 Tomcat 实例的 HTTP 端口。

  • 通过修改 Engine 配置选项,配置集群中每个 Tomcat 实例的名称。

  • 修改前内容如下:

<!-- You should set jvmRoute to support load-balancing via AJP ie :

-->

  • TC6_A 中修改后内容如下:

  • TC6_B 中修改后内容如下:

提示:请读者注意在修改过程中要注释掉原来 name 为 Catalina 的 Engine 配置项目,将 name 为 Standalone 的 Engine 配置项目的注释去掉并修改 jvmRoute 属性。

  • 修改配置文件中的 Cluster 配置项目,对集群的各项参数进行设置。

  • 修改前内容如下:

TC6_A 中修改后内容如下: TC6_B 中修改后内容如下:

提示:上述配置内容主要是对集群中各个 Tomcat 实例间进行通信的方式、端口以及 Session 共享算法的设置。本教程由于篇幅所限,不能一一详细介绍,有兴趣的读者可以参看 Tomcat 的官方文档,其中有非常详细的说明。

3、测试搭建,分别启动两个tomcat,看是否正常,若正常进行第四步。 http://localhost:10001 http://localhost:20001

4、简单的 JSP 来进一步测试对" TC6_A "和" TC6_B "的设置是否成功,分别建立两个文件:Hello.jsp。 <%@ page contentType="text/html;charset=GBK"%>

Tomcat 测试

<!— 使用 out 内建对象打印一条消息到输出页面 --> <% out.print( "Tomcat 集群测试 A !!! " ); %> TC6_B的改一行输出: <% out.print( "Tomcat 集群测试 B !!! " ); %>

如果能顺利地在浏览器中见到上述两个页面,则说明集群中的两个 Tomcat 实例工作完全正常。下面就可以为集群安装、设置 Apache 负载均衡器了。

五、Apache负载均衡器的安装与配置

  1. 下载安装

/# wget http://www.apache.org/dist/httpd/httpd-2.2.9.tar.gz /# tar -zxvf httpd-2.2.9.tar.gz /# cd httpd-2.2.9 /# ./configure --prefix=/usr/local/httpd --enable-mods-shared='proxy proxy_ajp proxy_balancer' /# make /# make install

  1. 配置Apache 为 Tomcat 集群的负载均衡器

ProxyRequests Off ProxyPass / balancer://myCluster/

BalancerMember ajp://localhost:10009 route=Tomcat1 BalancerMember ajp://localhost:20009 route=Tomcat2

说明:其中" myCluster "是集群的名称," ajp://localhost:10009 route=Tomcat1 " 对应 Tomcat 集群中的 TC6_A 实例," ajp://localhost:20009 route=Tomcat2 " 对应 Tomcat 集群中的 TC6_B 实例。经过上述配置后, Apache 就可以成为前面搭建的 Tomcat 集群的负载均衡器了。

六、感受成果

  1. 重启apache httpd后,访问:http://localhost/Hello.jsp
  2. 由 于 Apache 作为 Tomcat 集群的负载均衡器,使用的是轮换算法,其均匀地将请求发送到集群中的各个 Tomcat 实例。因此,从1的测试中可以看出,是轮换访问两个不同 Tomcat 实例中的 Hello.jsp 页面的。当然,看到轮换的情况也就说明 Apache 负载均衡器正常工作了。 七、补充重要细节

    1、在应用时候,工程的web.xml里面要加上这么一个属性,实现Session共享: ……

文件中的“ *<distributable/>*”项,是由于本案例将部署到集群中的多个服务器上。如果在配置文件中没 有此项,则应用在集群中不能实现分布式 Session 共享,也就是说当机后用户状态数据(存放在 Session 中的)无法无缝迁移到 Tomcat 集群中的其他服务器上。此项非常重要,请读者多加留心。

然后在依次启动TC6_A,TC6_B,你会在TC6_A的日志里面看到他们的通信日志,不然就是没有成功。

2、Tomcat6 集群要求负载均衡器工作在“ sticky session ”模式下,否则集群可能工作不正常。

对“ ProxyPass”项目进行如下修改。

  • 修改前

ProxyPass / balancer://myCluster/

  • 修改后

ProxyPass / balancer://myCluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off

提示: 修改后添加的“ stickysession=JSESSIONID ”项就是让 Apache 负载均衡器工作在“ sticky session ”模式下。所谓“ sticky session ”模式就是对于使用到同一个 Session 的请求绑定到集群中的特定服务器上,而不是轮换访问各个服务器,这样 Session 就不会工作不正常了。当然,对于使用不同 Session 的请求,还是进行负载均衡轮换的。

本文参照:http://www.unix-center.net 为了您的安全,请只打开来源可靠的网址

打开网站 取消

来自: http://hi.baidu.com/iammonster/blog/item/84710cdbb1b9f660d1164e60.html

来自: iammonster007 第一分享: lpwok 时间: 2010-07-20 16:58 评论: 1条 投票: 1次 本贴分享: 5 累计分享: 6

共有1人发表观点

评论(1)

2011年12月21日 16:48 784633420

非常准确

帮助中心 | 空间客服 | 投诉中心 | 空间协议

©2012 Baidu

java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较

Posted on

java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较 - Java - JavaEye论坛

您还未登录 ! 我的应用 登录 注册

JavaEye-最棒的软件开发交流社区

论坛首页Java编程和Java企业应用版

java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较

全部 Hibernate Spring Struts iBATIS 企业应用 设计模式 DAO 领域模型 OO Tomcat SOA JBoss Swing Java综合 浏览 3115 次 锁定老贴子 主题:java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较

该帖已经被评为隐藏帖 作者 正文 * weidewei

  • 等级: 初级会员
  • weidewei的博客
  • 文章: 25
  • 积分: 30
  • 来自: 杭州
  • 发表时间:2008-04-11 关键字: 操作xml(dom、sax、jdom、dom4j)方式 详解 比较

相关文章:

  • J2EE复习(二)XML(下)--xml解析
  • Dom4j递归解析XML实现JS的getElementsByName类似方法
  • Java XML API 漫谈
  • 大容量XML文件解析辅助--xml批量分解 推荐圈子: Eclipse PlugIns&RCP&OSGI 更多相关推荐
    1.详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说, 选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 3)JDOM http://www.jdom.org JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。 JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。 JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。 4)DOM4J http://dom4j.sourceforge.net 虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。 为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。 在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。 DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J. 2。比较 1)DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J. 2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM.虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。 3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。

    1. 四种xml操作方式的基本使用方法 xml文件:<?xml version="1.0" encoding="gbk"?>weideweihttp://wishlife.javaeye.comflyinghttp://user.qzone.qq.com/94611981

      程序代码: import java.io.File; import java.util.Iterator; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.dom4j.io.SAXReader; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MyXMLReader extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); public MyXMLReader() { super(); } /// / DOM方式 / @since V2.0 / @author David.Wei / @date 2008-4-11 / @return void // public void DOM() { long lasting = System.currentTimeMillis(); try { File f = new File("F:/xmltest.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByTagName("node"); for (int i = 0; i < nl.getLength(); i++) { System.out.println("|| Name: |" + doc.getElementsByTagName("name").item(i) .getFirstChild().getNodeValue()); System.out.println("||Space: |" + doc.getElementsByTagName("space").item(i) .getFirstChild().getNodeValue()); System.out.println("-------------------------------------------------"); } } catch (Exception e) { e.printStackTrace(); } System.out.println("DOM RUNTIME:" + (System.currentTimeMillis() - lasting) + " MS"); } /// / SAX方式 / @since V2.0 / @author David.Wei / @date 2008-4-11 / @return void // public void SAX() { long lasting = System.currentTimeMillis(); try { SAXParserFactory sf = SAXParserFactory.newInstance(); SAXParser sp = sf.newSAXParser(); MyXMLReader reader = new MyXMLReader(); sp.parse(new InputSource("F:/xmltest.xml"), reader); } catch (Exception e) { e.printStackTrace(); } System.out.println("SAX RUNTIME:" + (System.currentTimeMillis() - lasting) + " MS"); } public void startElement(String uri, String localName, String qName, Attributes attrs) { tags.push(qName); } public void characters(char ch[], int start, int length) throws SAXException { String tag = (String) tags.peek(); if (tag.equals("name")) { System.out.println("|| Name: |" + new String(ch, start, length)); } if (tag.equals("space")) { System.out.println("||Space: |" + new String(ch, start, length)); } System.out.println("-------------------------------------------------"); } /// / JDOM方式 / @since V2.0 / @author David.Wei / @date 2008-4-11 / @return void // public void JDOM() { long lasting = System.currentTimeMillis(); try { SAXBuilder builder = new SAXBuilder(); org.jdom.Document doc = builder.build(new File("F:/xmltest.xml")); Element foo = doc.getRootElement(); List allChildren = foo.getChildren(); for (int i = 0; i < allChildren.size(); i++) { System.out.println("|| Name: |" + ((Element) allChildren.get(i)).getChild("name") .getText()); System.out.println("||Space: |" + ((Element) allChildren.get(i)).getChild("space") .getText()); System.out.println("-------------------------------------------------"); } } catch (Exception e) { e.printStackTrace(); } System.out.println("JDOM RUNTIME:" + (System.currentTimeMillis() - lasting) + " MS"); } /// / DOM4J方式 / @since V2.0 / @author David.Wei / @date 2008-4-11 / @return void // public void DOM4J() { long lasting = System.currentTimeMillis(); try { File f = new File("F:/xmltest.xml"); SAXReader reader = new SAXReader(); org.dom4j.Document doc = reader.read(f); org.dom4j.Element root = doc.getRootElement(); org.dom4j.Element foo; for (Iterator i = root.elementIterator("node"); i.hasNext();) { foo = (org.dom4j.Element) i.next(); System.out.println("|| Name: |" + foo.elementText("name")); System.out.println("||Space: |" + foo.elementText("space")); System.out.println("-------------------------------------------------"); } } catch (Exception e) { e.printStackTrace(); } System.out.println("DOM4J RUNTIME:" + (System.currentTimeMillis() - lasting) + " MS"); } public static void main(String arge[]) { MyXMLReader myXML = new MyXMLReader(); System.out.println("=====================DOM========================="); myXML.DOM(); System.out.println("=====================SAX========================="); myXML.SAX(); System.out.println("=====================JDOM========================"); myXML.JDOM(); System.out.println("=====================DOM4J======================="); myXML.DOM4J(); System.out.println("================================================="); } } 运行结果: =====================DOM========================= || Name: |weidewei ||Space: |http://wishlife.javaeye.com ------------------------------------------------- || Name: |flying ||Space: |http://user.qzone.qq.com/94611981 ------------------------------------------------- DOM RUNTIME:62 MS =====================SAX========================= || Name: |weidewei ------------------------------------------------- ||Space: |http://wishlife.javaeye.com ------------------------------------------------- || Name: |flying ------------------------------------------------- ||Space: |http://user.qzone.qq.com/94611981 ------------------------------------------------- SAX RUNTIME:16 MS =====================JDOM======================== || Name: |weidewei ||Space: |http://wishlife.javaeye.com ------------------------------------------------- || Name: |flying ||Space: |http://user.qzone.qq.com/94611981 ------------------------------------------------- JDOM RUNTIME:78 MS =====================DOM4J======================= || Name: |weidewei ||Space: |http://wishlife.javaeye.com ------------------------------------------------- || Name: |flying ||Space: |http://user.qzone.qq.com/94611981 ------------------------------------------------- DOM4J RUNTIME:78 MS ================================================= 运行时如果有错误可能原因(我碰到的就这两个,解决了就OK了): 1.错误现象: Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog. 解决办法:xml文件换行问题,编写xml文件时不要换行就可以了. 2.dom4j 错误现象: org.dom4j.DocumentException: Error on line 1 of document : Content is not allowed in prolog. 解决方法:dom4j的jar包使用dom4j1.6就可以了. 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。

推荐链接 返回顶楼 * guo_david_wei

  • 等级: 初级会员
  • guo_david_wei的博客
  • 文章: 24
  • 积分: 30
  • 来自: 武汉
  • 发表时间:2008-07-04

做的不错嘛。。 挺有用的东西。 返回顶楼 回帖地址

1 0 请登录后投票

论坛首页Java编程和Java企业应用版 跳转论坛:Java编程和Java企业应用 Web前端技术 移动编程和手机应用开发 C/C++编程 Ruby编程 Python编程 PHP编程 Flash编程和RIA Microsoft .Net 综合技术 软件开发和项目管理 行业应用 入门讨论 招聘求职 海阔天空

© 2003-2010 JavaEye.com. 上海炯耐计算机软件有限公司版权所有 [ 沪ICP备05023328号 ]

Linux下Apache与Tomcat整合的简单方法

Posted on

Linux下Apache与Tomcat整合的简单方法 - LinuxSir.Org

LinuxSir.Org 用户名 密码 记住信息

| 网站首页 | 论坛帮助 | 欢迎来到LinuxSir.Org! 您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。 返回 LinuxSir.Org > Linux 发行版讨论区 —— LinuxSir.Org > Linux 发行版Debian专题 > Linux下Apache与Tomcat整合的简单方法 转到页面... 发表新主题 回复 主题工具

旧 05-12-23, 20:51 第 1 帖 Kilin

Kilin 的头像

注册会员
注册日期: Jun 2004

帖子: 321 精华: 1 标题: Linux下Apache与Tomcat整合的简单方法 1、准备,下载需要的文件。这里假定你已经正确安装配置好了JDK。 到Apache官方网站下载所需要的文件: httpd-2.2.0.tar.gz apache-tomcat-5.5.12.tar.gz jakarta-tomcat-connectors-1.2.15-src.tar.gz 其中httpd和jakarta-tomcat-connectors为源码包,apache-tomcat为二进制包。 2、安装Apache。 代码: /# tar xzvf httpd-2.2.0.tar.gz /# cd httpd-2.2.0 /# ./configure --prefix=/usr/local/apache2 --enable-so /# make /# make install3、安装Tomcat。 代码: /# cp apache-tomcat-5.5.12.tar.gz /usr/local/ /# cd /usr/local /# tar xzvf apache-tomcat-5.5.12.tar.gz /# ln -s apache-tomcat-5.5.12 tomcat4、编译生成mod_jk。 代码: /# tar xzvf jakarta-tomcat-connectors-1.2.15-src.tar.gz /# cd jakarta-tomcat-connectors-1.2.15-src/jk/native /# ./configure --with-apxs=/usr/local/apache2/bin/apxs /# make /# cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules/5、配置。 在/usr/local/apache2/conf/下面建立两个配置文件mod_jk.conf和workers.properties。 /# vi mod_jk.conf 添加以下内容: 代码: /# 指出mod_jk模块工作所需要的工作文件workers.properties的位置 JkWorkersFile /usr/local/apache2/conf/workers.properties /# Where to put jk logs JkLogFile /usr/local/apache2/logs/mod_jk.log /# Set the jk log level [debug/error/info] JkLogLevel info /# Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" /# JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories /# JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" /# 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理 JkMount /servlet// worker1 JkMount //.jsp worker1/# vi workers.properties 添加以下内容: 代码: /# Defining a worker named worker1 and of type ajp13 worker.list=worker1 /# Set properties for worker1 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 worker.worker1.lbfactor=50 worker.worker1.cachesize=10 worker.worker1.cache_timeout=600 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300再配置httpd.conf,作以下修改: 将Listen 80 修改为 Listen 127.0.0.1:80 将ServerName 修改为 ServerName LocalHost:80 在DirectoryIndex中添加 index.jsp 我的网页放在/var/wwwroot下,所以要修改DocumentRoot 代码: DocumentRoot "/var/wwwroot" Options Includes FollowSymLinks AllowOverride None Order deny,allow Allow from all XBitHack on Order deny,allow Deny from all 增加关于加载mod_jk的语句: 代码: LoadModule jk_module modules/mod_jk.so Include /usr/local/apache2/conf/mod_jk.conf最后编辑Tomcat的配置文件server.xml,在HOST段中加入: 代码: 在/var/wwwroot下建立一个index.jsp,启动Apache和Tomcat,用浏览器访问http://localhost/,应该可以看到正确的页面了。


Only the strong survive. Blog:http://www.ylxiong.cn/ Linux 2.6

此帖于 05-12-23 20:55 被 Kilin 编辑. Kilin 当前离线 回复时引用此帖

Kilin 查看公开信息 查找 Kilin 发表的更多帖子

旧 05-12-24, 19:59 第 2 帖 lyingjie 帅哥

lyingjie 的头像

注册会员
注册日期: Aug 2005

帖子: 284 精华: 0 问一下老兄,Apache2不能用apt进行安装吗


Debian Linux学习基地 http://www.debian.ha.cn lyingjie 当前离线 回复时引用此帖

lyingjie 查看公开信息 查找 lyingjie 发表的更多帖子 旧 05-12-24, 20:58 第 3 帖 lyingjie 帅哥

lyingjie 的头像

注册会员
注册日期: Aug 2005

帖子: 284 精华: 0 我用apt安装时进入apache2目录后没有conf这个子目录 lyingjie 当前离线 回复时引用此帖

lyingjie 查看公开信息 查找 lyingjie 发表的更多帖子

旧 05-12-24, 21:35 第 4 帖 Kilin

Kilin 的头像

注册会员
注册日期: Jun 2004

帖子: 321 精华: 1 可以吧 应该在/etc/local/etc/目录下吧....... 或者在/etc/local/share/etc/下 如果做服务器用的话 建议安装基本系统 然后再自己安装需要的Server端软件。 Kilin 当前离线 回复时引用此帖

Kilin 查看公开信息 查找 Kilin 发表的更多帖子 旧 05-12-25, 11:35 第 5 帖 lyingjie 帅哥

lyingjie 的头像

注册会员
注册日期: Aug 2005

帖子: 284 精华: 0 谢了我在试试 lyingjie 当前离线 回复时引用此帖

lyingjie 查看公开信息 查找 lyingjie 发表的更多帖子

旧 05-12-25, 11:58 第 6 帖 Kilin

Kilin 的头像

注册会员
注册日期: Jun 2004

帖子: 321 精华: 1 汗.....昨天喝高了 把路径打得一塌糊涂..... 应该是/etc 或者是/usr/etc 或者是/usr/local/etc 猜的~ Kilin 当前离线 回复时引用此帖

Kilin 查看公开信息 查找 Kilin 发表的更多帖子 旧 05-12-25, 14:24 第 7 帖 lyingjie 帅哥

lyingjie 的头像

注册会员
注册日期: Aug 2005

帖子: 284 精华: 0 好的,那在问你一个问题我现在按照你所讲的我已经配成了JSP可以为什么我打开静态页是打不开呀? 提示你无权查看该页 lyingjie 当前离线 回复时引用此帖

lyingjie 查看公开信息 查找 lyingjie 发表的更多帖子

旧 05-12-25, 17:38 第 8 帖 Kilin

Kilin 的头像

注册会员
注册日期: Jun 2004

帖子: 321 精华: 1 httpd.conf里的权限设置..... Kilin 当前离线 回复时引用此帖

Kilin 查看公开信息 查找 Kilin 发表的更多帖子 旧 05-12-25, 17:43 第 9 帖 lyingjie 帅哥

lyingjie 的头像

注册会员
注册日期: Aug 2005

帖子: 284 精华: 0 能不能说的在明白点呀,我以前做LAMP时有时也会出现这样子的问题 lyingjie 当前离线 回复时引用此帖

lyingjie 查看公开信息 查找 lyingjie 发表的更多帖子

旧 05-12-26, 09:59 第 10 帖 lyingjie 帅哥

lyingjie 的头像

注册会员
注册日期: Aug 2005

帖子: 284 精华: 0 还有我如果用Apt安装的话那不能给讲讲如何做呀 lyingjie 当前离线 回复时引用此帖

lyingjie 查看公开信息 查找 lyingjie 发表的更多帖子 旧 05-12-27, 22:02 第 11 帖 marvel

注册会员
注册日期: Oct 2004

帖子: 489 精华: 0 apache配置文件的默认路径应该是/etc/apache/httpd.conf吧


Thinkpad T60 酷睿 1.83GHz+512Mb DDR+80Gb+ATI(64Mb) Debian unstable marvel 当前离线 回复时引用此帖

marvel 查看公开信息 访问 marvel 的个人网站 查找 marvel 发表的更多帖子

旧 05-12-28, 03:25 第 12 帖 wjl

wjl 的头像

注册会员
注册日期: Nov 2003

我的住址: 北京 帖子: 90

精华: 0 good谢谢


FreeBSD RHEL AS

Windows XP

借我一生,好好爱你 wjl 当前离线 回复时引用此帖

wjl 查看公开信息 查找 wjl 发表的更多帖子 旧 05-12-28, 10:35 第 13 帖 lyingjie 帅哥

lyingjie 的头像

注册会员
注册日期: Aug 2005

帖子: 284 精华: 0 你说的是Apache1.3的位置 lyingjie 当前离线 回复时引用此帖

lyingjie 查看公开信息 查找 lyingjie 发表的更多帖子 发表新主题 回复 « 上一主题 | 下一主题 » 主题工具 显示可打印版本 显示可打印版本 邮寄本页给好友 邮寄本页给好友 发帖规则 您 [不可以] 发表新主题

您 [不可以] 回复主题 您 [不可以] 上传附件

您 [不可以] 编辑您的帖子 已 [启用] BB 代码

已 [启用] 表情符号 已 [启用] IMG 代码

已 [禁用] HTML 代码 [论坛跳转…] 用户控制面板 悄悄话 收藏夹 会员在线状态 搜索论坛 论坛首页 Linux 综合讨论区 —— LinuxSir.Org Linux 基础建设讨论专版 Linux shell进阶应用与shell编程 Linux 专业英文精品技术文档专题 Gas中文小组讨论区 Linux 硬件及周边设备 Linux 网络与服务器架设 Linux 系统及网络安全讨论专版 Linux及计算机学科基础理论版 Linux 发行版讨论区 —— LinuxSir.Org Linux 发行版SuSE专题 Linux 发行版Archlinux讨论区 Linux 发行版Debian专题 Ubuntu Linux 专题讨论 Linux 发行版Slackware专题 Linux 发行版 LFS 讨论区 Olive讨论区 (实验版) Linux 发行版Mandriva专题 Linux 发行版Redhat/Fedora/CentOS专题 Linux 发行版Gentoo讨论区 Mini Linux 及准系统研究 Linux 发行版红旗专题 LoongSon-龙芯讨论区 Linux 发行版其他专题 Linux发行版 Turbolinux专题 PowerPC Linux 讨论区 Google 产品讨论区 —— LinuxSir.Org Android Linux 软件应用讨论区 —— LinuxSir.Org Linux 输入开发与研究 Linux 软件专题讨论 软件下载讨论区 即时通讯 Linux 高级应用讨论区 —— LinuxSir.Org Linux 数据库专题讨论 Linux 认证考试学习与经验交流 Linux 内核研究小组 Linux 企业级应用专题讨论 编程开发讨论区 —— LinuxSir.Org Linux 程序设计专题讨论 Java 程序设计开发讨论 Perl | PHP | Python 脚本程序开发 嵌入式Linux讨论区──实验田版 Unix 技术讨论区 —— LinuxSir.Org BSD 讨论专题 BSD 新闻安全观察 RelaxBSD 讨论区 Solaris 讨论专题 MacOSX & Darwin 讨论专题 社区中心 —— LinuxSir.Org LinuxSir 论坛管理 LinuxSir 论坛临时存放区 LinuxSir 文章管理系统和BBS程序研究小组 小企鹅新闻图书馆 LinuxSir.Org 同城行 ── 我的城市 所有时间均为[北京时间]。现在的时间是 21:28。 网站首页 - 联系我们 - 返回顶端 Powered by vBulletin 版本 3.6.8 版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd. 官方中文技术支持: vBulletin 中文

版权所有 ©2002 - 2011, LinuxSir.Org

apache+tomcat整合(LINUX)

Posted on

apache+tomcat整合(LINUX) - 技术文档 - 网络技术 Linux时代 - 开源、自由、共享 - 中国最大的Linux技术社区

·ChinaUnix首页 ·论坛 ·博客 Linux首页 | Linux新闻 | Linux论坛 | Linux文档 | Linux下载 | Linux博客 | Linux搜索 | 开源项目孵化平台 | 《开源时代》 新手入门 | 安装启动 | 管理员指南 | 开发手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | MySQL | Apache | Ubuntu | Gentoo| OSCON08 Linux时代 >> 技术文档 >> 网络技术 apache+tomcat整合(LINUX) 来源: ChinaUnix博客  日期: 2007.12.28 13:38 (共有条评论) 我要评论 这里介绍两类方法: 这里假设你已安装并且配置好了JDK 一:用apt-get 安装 apt-get install apache2 tomcat5.5 libapache2-mod-jk 设置Tomcat管理员帐号 Tomcat的用户帐号信息都保存在tomcat-users.xml的文件中,运行 sudo gedit /usr/share/tomcat6/conf/tomcat-users.xml在的标签前添加一行 保存并关闭。重新运行tomcat即可输入该用户名和密码,登录Tomcat的管理页面。 确认一下在apache2的启动模块中是否有jk.load /#sudo ls /etc/apache2/mods-enabled/ /#sudo vi /etc/libapache2-mod-jk/workers.properties workers.tomcat_home=/usr/share/tomcat6 workers.java_home=/usr/lib/jvm/java-6-sun /#sudo vi /usr/share/doc/libapache2-mod-jk/httpd_example_apache2.conf 复制里面的内容到apache2.conf 最后重启apache tomcat上传jsp文件到usr/share/tomcat6/webapps/ROOT 二:手动下载安装 1.安装jdk 2.安装tomcat 3.编译安装apache2 4.停止以上两个启动的服务:tomcat,apache 5.编译安装jk-connector 6.编辑配置文件 7.看结果吧 详细流程: 1.安装jdk 1.1 下载jdk包,可以是rpm包或者tar包,解压缩到某目录,然后 ln -s /usr/local/src/jdk-1.6./ /usr/local/java 1.2 设置环境变量 vi /etc/profile export JAVA_HOME=/usr/local/java/ export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JRE_HOME=$JAVA_HOME/jre 1.3 启用环境变量 source /etc/profile 1.4 检验成功否 java -version 或 javac -v 2.安装tomcat tar zxvf /mnt/hgfs/Untitled-1/apache-tomcat-5.5.12.tar.gz -C /usr/local/src/ ln -s /usr/local/src/apache-tomcat-5.5.12 /usr/local/tomcat /usr/local/tomcat/bin/startup.sh 在浏览器中输入http://IP地址:8080 可以看到大花猫了。 3.编译安装apache2 tar zxvf /mnt/hgfs/Untitled-1/httpd-2.2.4.tar.gz -C /usr/local/src/ cd /usr/local/src/httpd-2.2.4 在进行编译之前要确保系统中没有apr或者apr-util的rpm包或者deb包。下面一下子编译安装了apr,apr-util,httpd cd srclib/apr && ./configure --prefix=/usr/local/apr && make && make install && cd ../apr-util && ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install && cd ../.. && ./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so && make && make install 下面编辑httpd.conf文件中ServerName字段的注释符,可以换成你的IP地址,或者什么都不换。 下面启动apache看看效果 /usr/local/httpd/bin/apachectl -k start 看到了It Works就对了。 4.停止以上两个启动的服务:tomcat,apache。 /usr/local/tomcat/bin/shutdown.sh /usr/local/httpd/bin/apachectl stop 5.编译安装jk-connector tar zxvf /mnt/hgfs/Untitled-1/tomcat-connectors-1.2.21-src.tar.gz -C /usr/local/src/ cd /usr/local/src/tomcat-connectors-1.2.21-src/native/ 编译安装jk-connector,带上apxs的地址,会在安装的时候自动把mod_jk.so放到/usr/local/httpd/modules里面 ./configure --with-apxs=/usr/local/httpd/bin/apxs && make && make install ls /usr/local/httpd/modules 看到mod_jk.so表示成功 6.编辑配置文件 6.1编辑/usr/local/httpd/conf/mod_jk.conf /# 指出mod_jk模块工作所需要的工作文件workers.properties的位置 JkWorkersFile /usr/local/httpd/conf/workers.properties /# Where to put jk logs JkLogFile /var/log/apache2/mod_jk.log /# Set the jk log level [debug/error/info] JkLogLevel info /# Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" /# JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories /# JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" /# 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理 JkMount /servlet// worker1 JkMount //*.jsp worker1 6.2编辑/usr/local/httpd/conf/workers.properties /# Defining a worker named worker1 and of type ajp13 worker.list=worker1 /# Set properties for worker1 worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009 worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300 6.3编辑httpd.conf文件 加入如下: LoadModule jk_module modules/mod_jk.so Include /usr/local/httpd/conf/mod_jk.conf 修改htdoc的默认地址为/usr/local/tomcat/webapps 修改htdoc的参数,也就是给原来htdoc的目录参数给webapps 修改DirectoryIndex index.html index.htm index.jsp 7.看结果吧 http://IP地址 可以看到一只大花猫。ok,成功了。 如何修改tomcat单独启动时候的端口为80?

里面的Connector port="8080"改为Connector port="80"

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/51404/showart_452032.html 发表评论 查看评论(共有条评论) 我要提问 最新资讯更多>> · 金山卫士开源计划首周源码下载.. · 谷歌劝说诺基亚采用Android操作.. · 11月份Linux市场占有率升至5% · Apache 基金会确认退出 JCP 执.. · Chrome 10 新功能探秘:新增GP.. · 金山宣布开源其安全软件 · 开源FTP服务器ProFTPD发现后门 · 女黑客在开源会议上抱受骚扰 · 21款值得关注的Linux游戏 · 马化腾:腾讯半年后彻底转型,.. 论坛热点更多>> · Linux系统移植从零开始!参与.. · 学习linux的意义在哪里 · 使用netfilter在哪能获取到原.. · 哥纠结了 · 一个在线读开源代码的工具,.. · 为什么我的目录下没有.cshrc.. · 初学linux从哪里开始 · linux 系统无法上网 · 新手安装UCenter 时总是出错.. · cacti添加主机显示的状态都是.. 文档更新更多>> · 菜鸟入门三星ARM11嵌入式系统,是.. · 寻redhat 5.3 的中文手册 for ia64 · 请问redhat 5.3 企业版的用户手册.. · LINUX与UNIX SHELL编程指南(中文) · 一些基本用户管理以及基本安装方法 · 菜鸟学习linux笔记与练习-----第.. · 菜鸟学习linux笔记与练习-----第.. · 服务器配置:Squid配置详解 · linux下u盘使用 · ubuntu dynamips 绑定网卡到虚拟机 关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 友情链接 | 免费注册 Copyright © 2001-2009 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证:060528号

QuickSort3

Posted on

QuickSort3

Algorithm Gossip: 快速排序法(三)

说明

之前说过轴的选择是快速排序法的效率关键之一,在这边的快速排序法的轴选择方式更加快了快速排序法的效率,它是来自演算法名书 Introduction to Algorithms 之中。

解法

先说明这个快速排序法的概念,它以最右边的值s作比较的标准,将整个数列分为三个部份,一个是小于s的部份,一个是大于s的部份,一个是未处理的部份,如下所示 : 快速排序 在排序的过程中,i 与 j 都会不断的往右进行比较与交换,最后数列会变为以下的状态: 快速排序 然后将s的值置于中间,接下来就以相同的步骤会左右两边的数列进行排序的动作,如下所示: 快速排序 整个演算的过程,直接摘录书中的虚拟码来作说明: QUICKSORT(A, p, r) if p < r then q <- PARTITION(A, p, r) QUICKSORT(A, p, q-1) QUICKSORT(A, q+1, r) end QUICKSORT PARTITION(A, p, r) x <- A[r] i <- p-1 for j <- p to r-1 do if A[j] <= x then i <- i+1 exchange A[i]<->A[j] exchange A[i+1]<->A[r] return i+1 end PARTITION 一个实际例子的演算如下所示: 快速排序

实作

  • C /#include /#include /#include /#define MAX 10 /#define SWAP(x,y) {int t; t = x; x = y; y = t;} int partition(int[], int, int); void quicksort(int[], int, int); int main(void) { int number[MAX] = {0}; int i, num; srand(time(NULL)); printf("排序前:"); for(i = 0; i < MAX; i++) { number[i] = rand() % 100; printf("%d ", number[i]); } quicksort(number, 0, MAX-1); printf("\n排序后:"); for(i = 0; i < MAX; i++) printf("%d ", number[i]); printf("\n"); return 0; } int partition(int number[], int left, int right) { int i, j, s; s = number[right]; i = left - 1; for(j = left; j < right; j++) { if(number[j] <= s) { i++; SWAP(number[i], number[j]); } } SWAP(number[i+1], number[right]); return i+1; } void quicksort(int number[], int left, int right) { int q; if(left < right) { q = partition(number, left, right); quicksort(number, left, q-1); quicksort(number, q+1, right); } }

  • Java public class QuickSort { public static void sort(int[] number) { sort(number, 0, number.length-1); } private static void sort(int[] number, int left, int right) { if(left < right) { int q = partition(number, left, right); sort(number, left, q-1); sort(number, q+1, right); } } private static int partition(int number[], int left, int right) { int s = number[right]; int i = left - 1; for(int j = left; j < right; j++) { if(number[j] <= s) { i++; swap(number, i, j); } } swap(number, i+1, right); return i+1; } private static void swap(int[] number, int i, int j) { int t; t = number[i]; number[i] = number[j]; number[j] = t; } }