??xml version="1.0" encoding="utf-8" standalone="yes"?> Apache?/span>Tomcat整合 一Q?/span>Apache?/span>Tomcat介绍 Apache是当前用最为广泛的WWW服务器YӞh相当强大的静?/span>HTML处理的能力?/span> Tomcat服务器是一个免费的开放源代码?/span>Web应用服务器,它是Apache软g基金?x)?/span>Apache Software FoundationQ的Jakarta目中的一个核心项目,?/span>Apache?/span>Sun?/span> 其他一些公司及(qing)个h共同开发而成。由于有?/span>Sun的参与和支持Q最新的Servlet?/span>JSP 规范L能在Tomcat中得C玎ͼTomcat5支持最新的Servlet 2.4?/span>JSP 2.0规范。因?/span>Tomcat技术先q、性能E_Q而且免费Q因而深?/span>Java爱好者的喜爱q得C部分软g开发商的认可,成ؓ(f)目前比较行?/span>Web应用服务器?/span> Tomcat?/span>IIS?/span>Apache{?/span>Web服务器一Ph处理HTML面的功能,另外它还是一?/span>Servlet?/span>JSP容器Q独立的Servlet容器?/span>Tomcat的默认模式?/span> 二.Z么需要整?/span> 整合的最主要原因是ؓ(f)了在现有的硬件条件下提供最大的负蝲?/span> 如果单独使用Tomcat?/span>JSP服务器,在工作效率上?x)存在问?/span>,Tomcat处理静?/span>HTML的能力不?/span>ApacheQƈ且所能承受的最大ƈ发连接数也有一定的限制Q?/span> 在测试中Q当q发q接较多ӞTomcat׃(x)处于“僉|”状态,对后l的hq接失去响应。所以现在提Z?/span>“整合”解决Ҏ(gu)Q将html?/span>jsp的功能部分进行明分工,?/span>tomcat只处?/span>jsp部分Q其它的?/span>apacheq个web server处理?/span>Apache?/span>Tomcat各司其职Q那么服务器的整体效率就能够得到提升?/span> 三.整合的基本原?/span> 作ؓ(f)Apache下面的子目Q?/span>Tomcat ?/span> Apache之间有着天然的联pR在实际操作中,主要?/span>Apache作ؓ(f)L务器q行Q当监听到有jsp或?/span>servlet的请求时Q将h转发l?/span>tomcat服务器,?/span>tomcat服务器进行解析后Q发?/span>apacheQ再?/span>apache发回用户?/span> ?/span>tomcat中有两个监听的端口,一个是8080用于提供web服务,一个是8009用于监听来自?/span>apache的请求。当apache收到jsp或?/span>servlethӞ向tomcat ?/span>8009端口发送请求,交由tomcat处理后,再返回给apacheQ由apacheq回l客戗?/span> 四.安装Apache?/span>Tomcat服务?/span> 操作pȝ环境Q?/span>Windows xp home 安装文gQ?/span>apache-tomcat-6.0.14.exe apache_2.2.6-win32-x86-openssl-0.9.8e.msi mod_jk-apache-2.2.4.so ?/span>apache ?/span>tomcat 的官方网站上面下?/span>apache ?/span>tomcatQ安?/span>apache?/span>tomcat ?/span>http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32下蝲 mod_jk-apache-2.2.4.so ?/span>mod_jk-apache-2.2.4.so拯?/span>apache安装目录下面?/span>modules目录中?/span> 五.修改Tomcat讄 ?/span>tomcat?/span>conf目录下徏一?/span>workers.properties的文本文Ӟd如下配置 workers.tomcat_home="tomcat安装目录" #?/span>mod_jk模块知道Tomcat的安装\?/span> workers.java_home="java安装目录" #?/span>mod_jk模块知道jdk路径 ps=" worker.list=ajp13 #q里是关键,名字要和httpd.conf的一致。如果这里改?/span>httpd.conf也要攏V?/span> worker.ajp13.port=8009 #工作端口,tomcat?/span>jk监听端口Q可以查?/span>Server.xml中有port="8009" worker.ajp13.host=localhost #Tomcat所在机器,如果安装在与apache不同的机器则需要设|?/span>IP worker.ajp13.type=ajp13 #cdQ好像不能改Q会(x)出问?/span> worker.ajp13.lbfactor=1 #负蝲q因子 六.修改Apache讄 修改apache安装目录?/span>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相当于是apache?/span>tomcat之间的桥梁一P所以在apache的配|文件下面加?/span>LoadModule jk_module modules/mod_jk-apache-2.2.4.so 此模块载入?/span> JkWorkersFile "tomcat安装目录/conf/workers.properties" 说明?/span>mod_jk-apache-2.2.4.so 如何工作Q当出现要{发时Q将h发送到那里q行处理Q代表了一pd的工作参数?/span> JkLogFile "apache安装目录/logs/mod_jk.log" 讑֮日志的地址?/span> JkMount 说明了将什么样?/span>URLq行发送到tomcatq行处理?/span>JkMount /*.jsp ajp13 说明了要?/span>jsph发到tomcat,JkMount /*.do ajp13说明了要?/span>.do型的servlet发到tomcatq行处理。在实际的分发中Q如?/span>servlet命名不带后缀的话Q将无法被识别,也就无法q行处理?/span> 八.l束?/span> 在查阅了不少文章之后Q我仔细的了解了下这两者进行整合的q程Q网上很多文章讲的整合应该不是真正意义上面的整合,希望此文章能够ؓ(f)正ؓ(f)q些问题苦恼的同行们解决一点小困难……?/span> 如果在整合过E中或者需要整?/span>apache,tomcat,iisQ下文章将讲述Q可以给我发邮gQ?br />
HibernateTemplate提供非常多的常用Ҏ(gu)来完成基本的操作Q比如通常的增加、删除、修攏V查询等操作Q?/span>Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,可完成大多?/span>DAO对象?/span>CRUD操作。下面是HibernateTemplate的常用方法简介:(x) q void delete(Object entity)Q删除指定持久化实例 q deleteAll(Collection entities)Q删除集合内全部持久化类实例 q find(String queryString)Q根?/span>HQL查询字符串来q回实例集合 q findByNamedQuery(String queryName)Q根据命名查询返回实例集?/span> q get(Class entityClass, Serializable id)Q根据主键加载特定持久化cȝ实例 q save(Object entity)Q保存新的实?/span> q saveOrUpdate(Object entity)Q根据实例状态,选择保存或者更?/span> q update(Object entity)Q更新实例的状态,要求entity是持久状?/span> q setMaxResults(int maxResults)Q设|分늚大小 下面是一个完?/span>DAOcȝ源代码:(x) public class PersonDAOHibernate implements PersonDAO { //采用log4j来完成调试时的日志功?/span> private static Log log = LogFactory.getLog(NewsDAOHibernate.class); //以私有的成员变量来保?/span>SessionFactory?/span> private SessionFactory sessionFactory; //以私有变量的方式保存HibernateTemplate private HibernateTemplate hibernateTemplate = null; //讑ր注?/span>SessionFactory必需?/span>setterҎ(gu) public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } //初始化本DAO所需?/span>HibernateTemplate public HIbernateTemplate getHibernateTemplate() { //首先Q检查原来的hibernateTemplate实例是否q存?/span> if ( hibernateTemplate == null) { //如果不存在,新徏一?/span>HibernateTemplate实例 hibernateTemplate = new HibernateTemplate(sessionFactory); } return hibernateTemplate; } //q回全部的h的实?/span> public List getPersons() { //通过HibernateTemplate?/span>findҎ(gu)q回Person的全部实?/span> return getHibernateTemplate().find("from Person"); } /** * Ҏ(gu)主键q回特定实例 * @ return 特定主键对应?/span>Person实例 * @ param 主键?/span> 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 需要删?/span>Person实例的主?/span> * / public void removePerson(int personid) { //先加载特定实?/span> Object p = getHibernateTemplate().load(Person.class, new Integer(personid)); //删除特定实例 getHibernateTemplate().delete(p); } } 7. Table的数据类?/span> Name Range Java Type INTEGER | INT as Java type int | java.lang.Integer DOUBLE [PRECISION] | FLOAT as Java type double | java.lang.Double VARCHAR as Integer.MAXVALUE java.lang.String VARCHAR_IGNORECASE as Integer.MAXVALUE java.lang.String CHAR | CHARACTER as Integer.MAXVALUE java.lang.String LONGVARCHAR as Integer.MAXVALUE java.lang.String DATE as Java type java.sql.Date TIME as Java type java.sql.Time TIMESTAMP | DATETIME as Java type java.sql.Timestamp DECIMAL No limit java.math.BigDecimal NUMERIC No limit java.math.BigDecimal BOOLEAN | BIT as Java type boolean | java.lang.Boolean TINYINT as Java type byte | java.lang.Byte SMALLINT as Java type short | java.lang.Short BIGINT as Java type long | java.lang.Long REAL as Java type double | java.lang.Double[1] BINARY as Integer.MAXVALUE byte[] VARBINARY as Integer.MAXVALUE byte[] LONGVARBINARY as Integer.MAXVALUE byte[] OTHER | OBJECT as Integer.MAXVALUE java.lang.Object<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>
zhangwenlong73@gmail.com
回调: hibernateTemplate. execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
//doSomething
}
}Q;
然后建立一个文件夹,比如D:"hsqldb,在hsqldb目录下徏立dataQlib两个子文件夹Q?br />
解压后的lib目录下的hsqldb.jar文gcopy?D:"hsqldb"lib 目录下,
解压后的demo目录下的runServer.bat和runManagerSwing.bat文gcopy?D:"hsqldb 目录下,
2.
修改runServer.bat文g的内容如下:(x)
@java -classpath ../lib/hsqldb.jar org.hsqldb.Server %1 %2 %3 %4 %5 %6 %7 %8 %9
修改runManagerSwing.bat文g的内容如下:(x)
@java -classpath ../lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing %1 %2 %3 %4 %5 %6 %7 %8 %9
3.先运行runServer.batQ启动HSQLDB server,
接着q行runManagerSwing.bat, 先弹出cmdH口Q接着弹出ConnectH口Q?br />
ConnectH口的Type选项讄?HSQL Database Engine ServerQ按okq接到dbQ进入HSQL Database ManagerH口?br />
q时查看data目录下,发现生成4个文Ӟ(x)test.lck, test.log, test.properties, test.script
4.在HSQL Database Manager中execute下面sql 后,
create table test(id bigint , name varchar , remark varchar);
insert into test(id,name,remark)values(1,'admin','this is remark!');
?test.log 中出现内容:(x)
/*C2*/SET SCHEMA PUBLIC
CONNECT USER SA
create table test(id bigint , name varchar , remark varchar)
INSERT INTO TEST VALUES(1,'admin','this is remark!')
HSQL db中的数据是储存在这个test.log文g中的?br />
5.在hsqldb目录下徏立一java文gQ内容如下:(x)
import java.sql.DriverManager;
import java.sql.Statement;
import org.hsqldb.jdbcDriver;
public class HsqlDemo{
public static void main(String[] args){
try {
Class.forName("org.hsqldb.jdbcDriver" );
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost", "sa", "");
if(c != null){
System.out.println("Connected db success!");
String sql = "CREATE TABLE T_USER(ID BIGINT,NAME VARCHAR,BIRTHDAY DATE);";
Statement st = c.createStatement();
st.execute(sql);
sql = "INSERT INTO T_USER(ID,NAME,BIRTHDAY)VALUES('1','ADMIN',SYSDATE);";
st.executeUpdate(sql);
if(st != null){
st.close();
}
c.close();
}
} catch (Exception e) {
System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
e.printStackTrace();
return;
}
}
}
再徏立一test.bat文gQ内容如下(注意配置pathZjdk的安装\径)Q?br />
set path=D:Program FilesJavajdk1.5.0_07bin
javac -classpath lib/hsqldb.jar HsqlDemo.java
java -cp lib/hsqldb.jar;./ HsqlDemo
q行test.bat文g后,?HSQL Database ManagerH口选择ViewQRefresh tree Q可以发现已l多了T_USERq个表,q且表里面已有一条记录?br />
6. 退出HSQL Database Manager, 到Hsql Db 的cmdH口Q按Ctrl+Cl束DB?br />
在hsqldb目录下徏立server.propertiesQ内容如下:(x)
server.port=9394
server.database.0=file:data/mydb9394
server.dbname.0=mydb
server.silent=true
建立runServer2.batQ内容如下:(x)
@java -classpath lib/hsqldb.jar org.hsqldb.Server %1 %2 %3 %4 %5 %6 %7 %8 %9
q时q行runServer2.bat,则会(x)在data目录下创建mydb9394.propertiesQmydb9394.logQmydb9394.lck三个文gQ?br />
再运行runManagerSwing.batQ弹出ConnectH口Q这旉要将
Type选项讄?HSQL Database Engine Server
URL 处设|ؓ(f) jdbc:hsqldb:hsql://localhost:9394/mydb
按ok卛_q接dbq入 HSQL Database Manager界面?br />
在查詢類別對應的表格時,需注意到繼承的問題QHibernate會自動判定繼扉K係,如果查詢的類別是某類別的爉別,則會q回與父別、子別應的所有表D料,例如如果查詢java.lang.ObjectQ由於Object在Java中是所有類別的爉別,所以下面這個查詢會q回資料庫中所有表格的資料Q?br />
<project name="build.xml" default="build">
<property name="src.java.dir" location="src"/>
<property name="build.classes.dir" location="build"/>
<path id="project.classpath">
<pathelement location="${build.classes.dir}"/>
</path>
<target name="init">
<mkdir dir="${build.classes.dir}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src.java.dir}" destdir="${build.classes.dir}">
<include name="**/EventCodooba.java"/>
</javac>
</target>
<target name="build" depends="compile">
<java classname="com.codooba.EventCodooba.EventCodooba" failonerror="true">
<classpath refid="project.classpath"/>
</java>
<echo>If you see this, it works!!!</echo>
</target>
</project>
Hibernate: select user0_.name as col_0_0_ from user user0_ where user0_.age>? momor caterpillar bush |