Codooba
JCenter
posts - 20,comments - 9,trackbacks - 0
posted @ 2009-08-13 22:36 Zhangwenlong 阅读(182) | 评论 (0)编辑 收藏
<script type="text/javascript" src="http://admin.ewinke.com/code/ep77.js"></script><script type="text/javascript" src="http://ewinke.ewinke.com/js/ewk.js"></script> 
posted @ 2009-08-13 22:34 Zhangwenlong 阅读(172) | 评论 (0)编辑 收藏

ApacheTomcat整合

一.ApacheTomcat介绍

    Apache是当前使用最为广泛的WWW服务器软件,具有相当强大的静态HTML处理的能力。

     Tomcat服务器是一个免费的开放源代码的Web应用服务器,它是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由ApacheSun   其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的ServletJSP   规范总是能在Tomcat中得到体现,Tomcat5支持最新的Servlet 2.4JSP 2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。

 TomcatIISApacheWeb服务器一样,具有处理HTML页面的功能,另外它还是一个ServletJSP容器,独立的Servlet容器是Tomcat的默认模式。

 

二.为什么需要整合

整合的最主要原因是为了在现有的硬件条件下提供最大的负载。

如果单独使用TomcatJSP服务器,在工作效率上会存在问题,Tomcat处理静态HTML的能力不如Apache,并且所能承受的最大并发连接数也有一定的限制;

在测试中,当并发连接较多时,Tomcat就会处于僵死状态,对后继的请求连接失去响应。所以现在提出一个整合解决方案:将htmljsp的功能部分进行明确分工,让tomcat只处理jsp部分,其它的由apache这个web server处理。ApacheTomcat各司其职,那么服务器的整体效率就能够得到提升。

 

三.整合的基本原理

 作为Apache下面的子项目,Tomcat Apache之间有着天然的联系。在实际操作中,主要是Apache作为主服务器运行,当监听到有jsp或者servlet的请求时,将请求转发给tomcat服务器,由tomcat服务器进行解析后,发回apache,再由apache发回用户。

tomcat中有两个监听的端口,一个是8080用于提供web服务,一个是8009用于监听来自于apache的请求。当apache收到jsp或者servlet请求时,就向tomcat 8009端口发送请求,交由tomcat处理后,再返回给apache,由apache返回给客户。

 

四.安装ApacheTomcat服务器

   操作系统环境:Windows xp home

   安装文件:apache-tomcat-6.0.14.exe apache_2.2.6-win32-x86-openssl-0.9.8e.msi mod_jk-apache-2.2.4.so

 

  apache tomcat 的官方网站上面下载apache tomcat,安装apachetomcat

     http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32下载 mod_jk-apache-2.2.4.so

     mod_jk-apache-2.2.4.so拷贝到apache安装目录下面的modules目录中。

 五.修改Tomcat设置

     tomcatconf目录下建一个workers.properties的文本文件,添加如下配置

 

     workers.tomcat_home="tomcat安装目录"

     #mod_jk模块知道Tomcat的安装路径

     workers.java_home="java安装目录"

     #mod_jk模块知道jdk路径

     ps="

     worker.list=ajp13

     #这里是关键,名字要和httpd.conf的一致。如果这里改了httpd.conf也要改。

     worker.ajp13.port=8009

     #工作端口,tomcatjk监听端口,可以查看Server.xml中有port="8009"           

     worker.ajp13.host=localhost

     #Tomcat所在机器,如果安装在与apache不同的机器则需要设置IP

     worker.ajp13.type=ajp13

     #类型,好像不能改,会出问题

     worker.ajp13.lbfactor=1

     #负载平衡因子   

 

六.修改Apache设置

修改apache安装目录下conf目录下的httpd.conf,增加如下配置

 

  LoadModule jk_module modules/mod_jk-apache-2.2.4.so

       JkWorkersFile "tomcat安装目录/conf/workers.properties"

    JkLogFile "apache安装目录/logs/mod_jk.log"

 

      JkMount /*.jsp ajp13

      JkMount /*.do ajp13

七.整合操作说明

  mod_jk-apache-2.2.4.so相当于是apachetomcat之间的桥梁一样,所以在apache的配置文件下面加上LoadModule jk_module modules/mod_jk-apache-2.2.4.so 将此模块载入。

JkWorkersFile "tomcat安装目录/conf/workers.properties" 说明了mod_jk-apache-2.2.4.so 如何工作,当出现要转发时,将请求发送到那里进行处理,代表了一系列的工作参数。

JkLogFile "apache安装目录/logs/mod_jk.log" 设定日志的地址。

JkMount 说明了将什么样的URL进行发送到tomcat进行处理。JkMount /*.jsp ajp13 说明了要将jsp请求发到tomcat,JkMount /*.do ajp13说明了要将.do型的servlet发到tomcat进行处理。在实际的分发中,如果servlet命名不带后缀的话,将无法被识别,也就无法进行处理。

八.结束语

在查阅了不少文章之后,我仔细的了解了下这两者进行整合的过程,网上很多文章讲的整合应该不算是真正意义上面的整合,希望此文章能够为正为这些问题苦恼的同行们解决一点小困难……

如果在整合过程中或者需要整合apache,tomcat,iis(下篇文章将讲述)可以给我发邮件:

     zhangwenlong73@gmail.com

posted @ 2008-02-02 10:04 Zhangwenlong 阅读(486) | 评论 (0)编辑 收藏
通过hibernateTemplate 使用session :   Session session =  this.hibernateTemplate.getSessionFactory().openSession();


回调:           hibernateTemplate. execute(new HibernateCallback() {
                            public Object doInHibernate(Session session)
                                    throws HibernateException, SQLException {
                                    //doSomething
                                     }
                        });
posted @ 2007-10-25 23:35 Zhangwenlong 阅读(234) | 评论 (0)编辑 收藏

HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:

q      void delete(Object entity):删除指定持久化实例

q      deleteAll(Collection entities):删除集合内全部持久化类实例

q      find(String queryString):根据HQL查询字符串来返回实例集合

q      findByNamedQuery(String queryName):根据命名查询返回实例集合

q      get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例

q      save(Object entity):保存新的实例

q      saveOrUpdate(Object entity):根据实例状态,选择保存或者更新

q      update(Object entity):更新实例的状态,要求entity是持久状态

q      setMaxResults(int maxResults):设置分页的大小

下面是一个完整DAO类的源代码:

public class PersonDAOHibernate implements PersonDAO

{

    //采用log4j来完成调试时的日志功能

private static Log log = LogFactory.getLog(NewsDAOHibernate.class);

    //以私有的成员变量来保存SessionFactory

private SessionFactory sessionFactory;

//以私有变量的方式保存HibernateTemplate

private HibernateTemplate hibernateTemplate = null;

         //设值注入SessionFactory必需的setter方法

    public void setSessionFactory(SessionFactory sessionFactory)

{

           this.sessionFactory = sessionFactory;

    }

         //初始化本DAO所需的HibernateTemplate

public HIbernateTemplate getHibernateTemplate()

{

         //首先,检查原来的hibernateTemplate实例是否还存在

         if ( hibernateTemplate == null)

         {

                   //如果不存在,新建一个HibernateTemplate实例

                   hibernateTemplate = new HibernateTemplate(sessionFactory);

         }

         return hibernateTemplate;

}

         //返回全部的人的实例

    public List getPersons()

         {       

                   //通过HibernateTemplatefind方法返回Person的全部实例

           return getHibernateTemplate().find("from Person");

    }

         /**

          * 根据主键返回特定实例

          * @ return 特定主键对应的Person实例

          * @ param 主键值

    public News getNews(int personid)

         {

           return (Person)getHibernateTemplate().get(Person.class, new Integer(personid));

    }

         /**

          * @ person 需要保存的Person实例

          */

    public void savePerson(Person person)

         {                

                   getHibernateTemplate().saveOrUpdate(person);

    }

         /**

          * @ param personid 需要删除Person实例的主键

          * /

    public void removePerson(int personid)

         {

                   //先加载特定实例

           Object p = getHibernateTemplate().load(Person.class, new Integer(personid));

                   //删除特定实例

           getHibernateTemplate().delete(p);

    }

}

posted @ 2007-10-25 23:08 Zhangwenlong 阅读(998) | 评论 (0)编辑 收藏