﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-拼搏的人生-文章分类-实用技术</title><link>http://www.blogjava.net/DuYang/category/10760.html</link><description>拼搏在繁华的都市</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:34:00 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:34:00 GMT</pubDate><ttl>60</ttl><item><title>Connection Pool:Proxool</title><link>http://www.blogjava.net/DuYang/articles/46237.html</link><dc:creator>Dalston.Young</dc:creator><author>Dalston.Young</author><pubDate>Mon, 15 May 2006 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/DuYang/articles/46237.html</guid><wfw:comment>http://www.blogjava.net/DuYang/comments/46237.html</wfw:comment><comments>http://www.blogjava.net/DuYang/articles/46237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DuYang/comments/commentRss/46237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DuYang/services/trackbacks/46237.html</trackback:ping><description><![CDATA[  Tomcat从5.x开始就可以在server.xml里配置数据源,后来用到了Proxool对比了一下觉得Proxool更方便更好用,它提供了更多的方法,简单,推荐大家使用.<br />  下载地址:http://proxool.sourceforge.net/ 最新版本为: Proxool 0.9.0RC2<br />  下载后解压缩Proxool 0.9.0RC2后,把Proxool 0.9.0RC2/lib下的.jar文件部署到WEB-INF/lib下.<br />  看看下面的范例(example for Oracle):<br />  Proxool.jsp<br />________________________________________________________________________________________________________________________________________<br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br /><br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;title&gt;Proxool.jsp&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />        &lt;h2&gt;使用Proxool.jsp&lt;/h2&gt;<br />        &lt;%<br />           Connection con=null;<br />           Statement stmt=null;<br />           ResultSet rs=null;<br />           <br />           String ename="";<br />           <br />           try<br />           {<br />             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");<br />             con=DriverManager.getConnection("proxool.JSPBook:oracle.jdbc.driver.OracleDriver:<br />                       jdbc:oracle:thin:@yang:1521:orcl","scott","ss");             <br />             stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,<br />                                      ResultSet.CONCUR_UPDATABLE);<br />             String query="select * from emp";<br />             rs=stmt.executeQuery(query);<br />             while(rs.next())<br />             {<br />               ename=rs.getString("ename");<br />      %&gt;<br />        从emp表中取出姓名&lt;%=ename%&gt;&lt;br&gt;<br />      &lt;%<br />             }<br />             stmt.close();<br />             con.close();<br />           }<br />           catch(SQLException e)<br />           {<br />             out.println("发生异常"+e);<br />           }<br />           finally<br />           {<br />             try<br />             {<br />               if(con!=null)<br />               {<br />                 con.close();<br />               }<br />             }<br />             catch(SQLException ne)<br />             {<br />               out.println("SQLException:"+ne);<br />             }<br />           }<br />        %&gt;<br />    &lt;/bdoy&gt;<br />&lt;/html&gt;<br />Proxool.jsp通过Proxool连接池取得Connection,然后显示emp表格中的ename.<br />首先动态加载Proxool的driver:<br />  Class.forName("org.logicalcobwebs.proxool.ProxoolDriver);<br />然后将Proxool URL分为三个部分: 连接池的别名,JDBC驱动程序(DataBase JDBC Drivers),连接URL.<br /><br />设定Proxool<br />proxool提供了许多连接池的参数,例如:连接池最多有几个Connection,最少有几个Connection,Connection生命期限等等。<br />Proxool主要有以下四种设定方式:<br />(一) 通过java.util.Properties对象来设定,例如:<br />Properties info=new Properties();<br />info.setProperty("proxool.maximum-connection-count","20");<br />info.setProperty("proxool.house-keeping-test-sql","select CURRENT_DATE");<br />info.setProperty("user","your DB username");<br />info.setProperty("password","your DB prassword");<br />String alias="Develop"; //Proxool连接池的别名,根据自己喜好随便写^_^<br />String driverClass="oracle.jdbc.driver.OracleDriver";<br />String driverUrl="jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName";<br />String url="proxool."+alias+":"+drvierClass+":"+driverUrl;<br />connection=DrvierManager.getConnection(rul,info);<br /><br />(二) 通过XML文件来设定,例如:<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!--the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored.--&gt;<br />&lt;proxool&gt;<br />  &lt;alias&gt;Develop&lt;/alias&gt;<br />  &lt;driver-url&gt;<br />    jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />  &lt;/driver-url&gt;<br />  &lt;driver-class&gt;oracle.jdbc.driver.OracleDriver&lt;/driver-class&gt;<br />  &lt;driver-properties&gt;<br />    &lt;property name="user" value="your database name"/&gt;<br />    &lt;property name="password" value="your DB password"/&gt;<br />  &lt;/driver-properties&gt;<br />  &lt;maximum-connection-count&gt;10&lt;/maximum-connection-count&gt;<br />  &lt;house-keeping-test-sql&gt;select CURRENT_DATE&lt;/house-keeping-test-sql&gt;<br />&lt;/proxool&gt;<br />然后通过JAXPConfiguration读取XML文件:<br />JAXPConfigurator.configure("/WEB-INF/classes/proxool.xml",false);<br /><br />(三) 先通过Properties文件来设定,例如:<br />jdbc-0.proxool.alias=Develop<br />jdbc-0.proxool.drvier-url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver;<br />jdbc-0.user=your database username<br />jdbc-0.password=your database password<br />jdbc-0.proxool.maximum-connection-count=10<br />jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE<br />然后通过PropertyConfigurator读取Properties文件:<br />PropertyConfigurator.configure("/WEB-INF/classes/Proxool.properties");<br /><br />(四)在web.xml中,通过servlet来设定.方法又有三种,前两种是按照格式来的:<br />1.XML文件<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;<br />     org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />  &lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />     &lt;param-name&gt;xmlFile&lt;/param-name&gt;<br />     &lt;param-value&gt;WEB-INF/classes/Proxool.xml&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-start&gt;1&lt;/load-on-start&gt;<br />&lt;/servlet&gt;<br /><br />2.Properties文件<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;<br />     org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />  &lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />     &lt;param-name&gt;propertyFile&lt;/param-name&gt;<br />     &lt;param-value&gt;WEB-INF/classes/Proxool.properties&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-start&gt;1&lt;/load-on-start&gt;<br />&lt;/servlet&gt;<br /><br />3.Init Prameter<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;<br />     org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />  &lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />     &lt;init-name&gt;jdbc-0.proxool.alias&lt;/init-param&gt;<br />     &lt;init-value&gt;Develop&lt;/init-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />     &lt;init-name&gt;jdbc-0.proxool.driver-rul&lt;/init-param&gt;<br />     &lt;init-value&gt;<br />        jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />     &lt;/init-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />     &lt;init-name&gt;jdbc-0.proxool.driver-class&lt;/init-param&gt;<br />     &lt;init-value&gt;oracle.jdbc.driver.OracleDriver&lt;/init-value&gt;<br />  &lt;init-param&gt;<br />&lt;/servlet&gt;<br /><br />建议大家使用第四种方法,好处在于当Container启动时,Proxool的参数会自动设定加载到内存中,原因在于:<br />&lt;servlet&gt;<br />......略<br />&lt;load-on-start&gt;1&lt;/load-on-start&gt;<br /><br />一个完整的示例如下:<br />web.xml<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"<br />         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"<br />         version="2.4"&gt;<br />.......略<br />  &lt;servlet&gt;<br />     &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />     &lt;servlet-class&gt;<br />       org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />     &lt;/servlet-class&gt;<br />     &lt;init-param&gt;<br />       &lt;param-name&gt;propertyFile&lt;/param-name&gt;<br />       &lt;param-value&gt;WEB-INF/classes/Proxool.properties&lt;/param-value&gt;<br />     &lt;/init-param&gt;<br />     &lt;load-on-start&gt;1&lt;/load-on-start&gt;<br />  &lt;/servlet&gt;<br />.......略<br />&lt;/web-app&gt;<br /><br />Proxool.proterties<br />jdbc-0.proxool.alias=Develop<br />jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver<br />jdbc-0.proxool.driver.url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />jdbc-0.proxool.maximum-connection-count=10<br />jdbc-0.proxool.prototype-count=4<br />jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE<br />jdbc=0.proxool.verbose=true<br /><br />我们可以用下面的Test Page来进行测试<br />Proxool-config.jsp<br />____________________________________________________<br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br /><br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;title&gt;Proxool.jsp&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />        &lt;h2&gt;使用Proxool.jsp&lt;/h2&gt;<br />        &lt;%<br />           Connection con=null;<br />           Statement stmt=null;<br />           ResultSet rs=null;<br />           <br />           String ename="";<br />           <br />           try<br />           {<br />             con=DriverManager.getConnection("proxool.Develop");             <br />             stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,<br />                                      ResultSet.CONCUR_UPDATABLE);<br />             String query="select * from emp";<br />             rs=stmt.executeQuery(query);<br />             while(rs.next())<br />             {<br />               ename=rs.getString("ename");<br />      %&gt;<br />        从emp表中取出姓名&lt;%=ename%&gt;&lt;br&gt;<br />      &lt;%<br />             }<br />             stmt.close();<br />             con.close();<br />           }<br />           catch(SQLException e)<br />           {<br />             out.println("发生异常"+e);<br />           }<br />           finally<br />           {<br />             try<br />             {<br />               if(con!=null)<br />               {<br />                 con.close();<br />               }<br />             }<br />             catch(SQLException ne)<br />             {<br />               out.println("SQLException:"+ne);<br />             }<br />           }<br />        %&gt;<br />    &lt;/bdoy&gt;<br />&lt;/html&gt;<br />测试结果为:<br />=====================================<br />使用Proxool.jsp<br />从emp表中取出姓名SMITH<br />从emp表中取出姓名ALLEN<br />从emp表中取出姓名WARD<br />从emp表中取出姓名JONES<br />从emp表中取出姓名MARTIN<br />从emp表中取出姓名BLAKE<br />从emp表中取出姓名CLARK<br />从emp表中取出姓名SCOTT<br />从emp表中取出姓名KING<br />从emp表中取出姓名TURNER<br />从emp表中取出姓名ADAMS<br />从emp表中取出姓名JAMES<br />从emp表中取出姓名FORD<br />从emp表中取出姓名MILLER<br />从emp表中取出姓名feiyang<br />从emp表中取出姓名yang<br />从emp表中取出姓名feifei<br />从emp表中取出姓名fei<img src ="http://www.blogjava.net/DuYang/aggbug/46237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DuYang/" target="_blank">Dalston.Young</a> 2006-05-15 16:27 <a href="http://www.blogjava.net/DuYang/articles/46237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDNI---数据来源(Data Source)</title><link>http://www.blogjava.net/DuYang/articles/46188.html</link><dc:creator>Dalston.Young</dc:creator><author>Dalston.Young</author><pubDate>Mon, 15 May 2006 04:01:00 GMT</pubDate><guid>http://www.blogjava.net/DuYang/articles/46188.html</guid><wfw:comment>http://www.blogjava.net/DuYang/comments/46188.html</wfw:comment><comments>http://www.blogjava.net/DuYang/articles/46188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DuYang/comments/commentRss/46188.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DuYang/services/trackbacks/46188.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">Tomcat下JNDI的配置</font>
		<br />
		<br />    JNDI全名为Java Naming and Directory Interface.JNDI主要提供应用程序所需要资源上命名与目录服务.在Java EE环境中,JNDI扮演了一个很重要的角色,<br />它提供了一个接口让用户在不知道资源所在位置的情形下,取得该资源服务.<br />    就好比网络磁盘驱动器的功能一样。如果有人事先将另一台机器上的磁盘驱动器接到用户的机器上,用户在使用的时候根本就分辨不出现在的驱动器是存在本端,<br />还是在另一端的机器上,用户只需取得资源来用,根本就不知道资源在什么地方。<br />    JNDI这个接口基本上是LDAP,LDAP全名为Lightweight Directory Access Protocol.<br />    <br />    要设定JNDI的JDBC数据源和DBCP连接池需要做以下的工作:(for example Oracle DataBase)<br /><br />    一. 安装JDBC Driver<br />    将你DB的JDBC Driver部署到{Tomcat_Install]\common\lib目录下。<br />    二. 设定Tomcat下的server.xml<br />    修改{Tomcat_Install|\conf\server.xml文件中你的站台标签里的&lt;Host&gt;&lt;/Host&gt;之间的内容.如下:<br />    server.xml<br />     &lt;Host&gt;<br />        &lt;Context path="/Develop" docBase="Develop" debug="0" reloadable="true"               crossContext="true"&gt;<br />        &lt;Resource name="jdbc/dy" auth="Container" type="javax.sql.DataSource"/&gt;<br />            &lt;ResourceParams name="jdbc/dy"&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;factory&lt;/name&gt;<br />                  &lt;value&gt;<font color="#0000ff">org.apache.commons.dbcp.BasicDataSourceFactory</font>&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;driverClassName&lt;/name&gt;<br />                  &lt;value&gt;<font color="#ffa500">oracle.jdbc.driver.OracleDriver</font>&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;url&lt;/name&gt;<br />                  &lt;value&gt;<font color="#ffa500">jdbc:oracle:thin:@yang:1521:orcl</font>&lt;/value&gt;<br />               &lt;/parameter&gt;               <br />               &lt;parameter&gt;<br />                  &lt;name&gt;username&lt;/name&gt;<br />                  &lt;value&gt;scott&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;password&lt;/name&gt;<br />                  &lt;value&gt;ss&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;maxActive&lt;/name&gt;<br />                  &lt;value&gt;20&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;maxIdle&lt;/name&gt;<br />                  &lt;value&gt;10&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;maxWait&lt;/name&gt;<br />                  &lt;value&gt;-1&lt;/value&gt;<br />               &lt;/parameter&gt;                                                                 <br />            &lt;/ResourceParams&gt;<br />        &lt;/Context&gt;<br />      &lt;/Host&gt;<br />  上述社定所表示的意思是在Develop站台中,定义一个JDBC数据来源,名称为jdbc/dy.<br />  通过以下的代码来设置的这个jdbc/dy的数据来源和DBCP连接池:<br />  &lt;parameter&gt;<br />     &lt;name&gt;factory&lt;/name&gt;<br />     &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<br />  &lt;/parameter&gt;<br />  设定使用DBCP连接池,这是有Jakarta Project组织所制定的连接池程序,它一样是OpenSource的.<br />参数说明:<br />     &lt;Context&gt;&lt;/Context&gt;用于设置你的站台.<br />     &lt;Context&gt;标签中的path="/Develop"代表网站名称,即: http://IP_DomaninName/Develop; docBase="Develop"代表站台的目录位置,debug则是设定debug level<br />     ,0表示提供最少的信息,9表示提供最都多的信息;reloadable则表示Tomcat执行时,当class,web.xml被更新时,都会自动重新加载,不需要重新启动Tomcat;<br />     maxActive表示连接池的最大数据库连接数;设为0表示无限制;maxIdle表示设定连接池中最小能有几个Connection,若为0表示不限制;maxWait 最大建立连接等待时间。<br />    如果超过此时间将接到异常,设为－1表示无限制,单位为ms;driverClassName JDBC驱动程序;url表示数据库连接字符串.<br /><br /> 三. 设定应用站台中的web.xml<br /> eg:设定Develop的web.xml如下:<br />  &lt;resource-ref&gt;<br />     &lt;description&gt;JNDI JDBC DataSource of Develop&lt;/description&gt;   //一个描述<br />     &lt;res-ref-name&gt;jdbc/dy&lt;/res-ref-name&gt;                        //这里必须为你之前指定的&lt;ResourceParams name="jdbc/dy"&gt;<br />     &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br />     &lt;res-auth&gt;Container&lt;/res-auth&gt;<br />  &lt;/resource-ref&gt;<br /><br /> 四. 使用JDBC数据来源获得Connection对象<br />   Context initContext=new InitialContext();<br />   Context envContext=(Context)initContext.lookup("<font color="#0000ff">java:/comp/env</font>");<br />   或者<br />   Context envContext=(Context)initContext.lookup("<font color="#0000ff">java:comp/env</font>");<br />   DataSourceds conn=(DataSource)envContext.lookup("jdbc/dy");<br />   conn=ds.getConnection();<br /><br />按照这四个步骤做下来后,那么你就可以写个Test Page来测试一下了.<br />Test Page1:<br />_________________________________________________________________________________________________________<br />testpool.jsp<br />&lt;!--测试JNID数据源的配置--&gt;<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="javax.naming.Context"%&gt;<br />&lt;%@ page import="javax.sql.DataSource"%&gt;<br />&lt;%@ page import="javax.naming.InitialContext"%&gt;<br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;%<br />  DataSource ds=null;<br />  try<br />  {<br />      Context initCtx=new InitialContext();<br />      Context envCtx=(Context)initCtx.lookup("java:comp/env");<br />      //从Context中loopup 数据源<br />      ds=(DataSource)envCtx.lookup("jdbc/dy");<br />      if(ds!=null)<br />      {<br />        out.println("已经获得DataSource!");<br />        out.println("&lt;br&gt;");<br />        Connection conn=ds.getConnection();<br />        Statement stmt=conn.createStatement();<br />        ResultSet rst=stmt.executeQuery("select * from emp");<br />        out.println("以下是从数据库里读出来的数据");<br />        out.println("&lt;hr&gt;");<br />        while(rst.next())<br />        {<br />          out.println("empName:"+rst.getString("ename"));<br />          out.println("&lt;br&gt;");<br />        }<br />      }<br />    else<br />        out.println("连接失败");<br />  }<br />  catch(Exception e)<br />  {<br />      out.println(e);<br />  }<br />%&gt;<br />如果成功那么输出结果:<br />========================================<br />已经获得DataSource!<br />以下是从数据库里读出来的数据:<br />empName:SMITH<br />empName:ALLEN<br />empName:WARD<br />empName:JONES<br />empName:MARTIN<br />empName:BLAKE<br />empName:CLARK<br />empName:SCOTT<br />empName:KING<br />empName:TURNER<br />empName:ADAMS<br />empName:JAMES<br />empName:FORD<br />empName:MILLER<br />empName:feiyang<br />empName:yang<br />empName:feifei<br />empName:fei <br /><br /><br />  <br /><br /><img src ="http://www.blogjava.net/DuYang/aggbug/46188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DuYang/" target="_blank">Dalston.Young</a> 2006-05-15 12:01 <a href="http://www.blogjava.net/DuYang/articles/46188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Image Map</title><link>http://www.blogjava.net/DuYang/articles/45270.html</link><dc:creator>Dalston.Young</dc:creator><author>Dalston.Young</author><pubDate>Tue, 09 May 2006 11:55:00 GMT</pubDate><guid>http://www.blogjava.net/DuYang/articles/45270.html</guid><wfw:comment>http://www.blogjava.net/DuYang/comments/45270.html</wfw:comment><comments>http://www.blogjava.net/DuYang/articles/45270.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DuYang/comments/commentRss/45270.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DuYang/services/trackbacks/45270.html</trackback:ping><description><![CDATA[                             图象地图<br /><br />   图象地图分为: 客户端图象地图,服务器端图象地图.但是现在服务器端图象地图已经被前者给淘汰了.什么是图象地图?把一幅图象<br />分成多个区域,每个区域指向不同的URL.例如:把一幅中国地图的图象按照省份划成若干区域,这些区域被称为热点区域,点击热点区域就<br />可以链接到相关的地方,这就是图象地图.<br />   知道了概念,那怎么样产生图象地图呢?<br />1&gt; 必须定义出图象上个热点区域的形状,位置坐标,及指向的URL地址信息,这个过程叫图象热点映射.图象热点映射需要使用&lt;map nam<br />   e=mapname&gt;&lt;/map&gt;标签进行说明.其中name属性为该图象热点映射指定了一个名称.<br />2&gt; 图象热点映射中的各个区域用&lt;are&gt;标签说明,&lt;area&gt;标签的格式为: &lt;area sharp="形状" coords="坐标" href=url&gt;,也可以<br />   nohref替换href,表示该区域单击鼠标无效.&lt;area&gt;标签还可以有个target属性,用来指名浏览器哪个窗口或侦中显示href属性所<br />   指向的资源.<br />3&gt; 定义好图象热点后,接着就要在&lt;img&gt;图象标签中增加一个名为usemap的属性设置,usemap属性指定该图形被用做图象地图,其设置<br />   值为所使用的图象热点名称.<br />eg:<br />&lt;img src="logo.gif" border="0" usemap="#mymap"&gt;<br />&lt;map name=mymap&gt;<br />&lt;area shape="rect" coords="0,0,50,50" href="a.html"&gt;<br />&lt;area shape="rect" coords="50,0,100,50" href="b.html"&gt;<br />&lt;area shape="rect" coords="100,0,150,50" href="c.html"&gt;<br />&lt;/map&gt;<br />sharp属性的设置说明:<br />.rect 定义一个矩形区域,coords属性设置为矩形的左上角,右下角的坐标,各个坐标之间用逗号隔开.<br />.poly 定义一个多边形区域,coords属性设置为多边形个顶点的坐标值.<br />.circle 定义了一个圆形区域,coords属性设置为圆心坐标及半径,前两个参数分别为圆心的横,纵坐标,第三个参数为半径.<br />eg:<br />&lt;map name="mymap"&gt;<br />&lt;area sharp="rect" href="a.html" coords="140,20,280,60"&gt;<br />&lt;area sharp="poly" href="b.html" coords="80,100,60"&gt;<br />&lt;area sharp="circle" href="c.html" coords="100,100,180,80,200,140"&gt;<br />&lt;/map&gt;<br /><br /><img src ="http://www.blogjava.net/DuYang/aggbug/45270.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DuYang/" target="_blank">Dalston.Young</a> 2006-05-09 19:55 <a href="http://www.blogjava.net/DuYang/articles/45270.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分页显示的解决方案</title><link>http://www.blogjava.net/DuYang/articles/44579.html</link><dc:creator>Dalston.Young</dc:creator><author>Dalston.Young</author><pubDate>Fri, 05 May 2006 00:01:00 GMT</pubDate><guid>http://www.blogjava.net/DuYang/articles/44579.html</guid><wfw:comment>http://www.blogjava.net/DuYang/comments/44579.html</wfw:comment><comments>http://www.blogjava.net/DuYang/articles/44579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DuYang/comments/commentRss/44579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DuYang/services/trackbacks/44579.html</trackback:ping><description><![CDATA[
		<p>在JSP开发中,经常遇到数据的查询问题,当查询结果非常多时,就需要进行分页显示.有两种方案解决,一是把所有的资料都查询出来,然后在每页中显示指定资料;另一种是多次查询数据库,每次获得本页的数据.考虑到数据往往是大量甚至是海量,如果一次性的获取,那么这些数据必然占用大量的服务器资源,使系统的性能大大降低..</p>
		<p>=======页面控制的JavaBean======</p>
		<p>/*<br /> * JavaBean.java<br /> *<br /> * Created on 2006年4月14日, 下午3:00<br /> *<br /> * To change this template, choose Tools | Template Manager<br /> * and open the template in the editor.<br /> */</p>
		<p>package jspdev;</p>
		<p>import java.util.Vector;<br />/**<br /> *<br /> * @author DuYang<br /> */<br />public class PageBean {<br />    public int curPage; //当前是第几页<br />    public int maxPage; //一共有多少页<br />    public int maxRowCount; //一共多少行<br />    public int rowsPerPage=5; //每页多少行<br />    public java.util.Vector data; //本页中要显示的资料<br />    public PageBean() {<br />    }<br />    public void countMaxPage()<br />    { //根据总行数计算总页数<br />        if(this.maxRowCount % this.rowsPerPage==0)<br />        {<br />            this.maxPage=this.maxRowCount/this.rowsPerPage;<br />        }<br />        else<br />        {<br />            this.maxPage=this.maxRowCount/this.rowsPerPage+1;<br />        }<br />    }<br />    public Vector getResult()<br />    {<br />        return this.data;   //返回当前的资料<br />    }<br />    public PageBean(ContactBean contact) throws Exception<br />    {<br />        this.maxRowCount=contact.getAvailableCount(); //得到总的行数<br />        this.date=contact.getResult();<br />        this.countMaxPage();<br />    }<br />}<br />=========处理业务逻辑的ContactBean==========</p>
		<p>/*<br /> * ContactBean.java<br /> *<br /> * Created on 2006年4月14日, 下午3:12<br /> *<br /> * To change this template, choose Tools | Template Manager<br /> * and open the template in the editor.<br /> */</p>
		<p>package jspdev;</p>
		<p>import java.util.*;<br />import java.sql.*;<br />/**<br /> *<br /> * @author DuYang<br /> */<br />public class ContactBean {<br />    private Connection con;<br />    Vector v;<br />    /**<br />     *构造方法<br />     *创建数据库连接<br />     *初始化一个vector<br />     */<br />    public ContactBean() throws Exception {<br />        con=DatabaseConn.getConnection();<br />        v=new Vector();<br />    }<br />    /**<br />     *返回查询的记录数<br />     */<br />    public int getAvailableCount()throws Exception<br />    {<br />        int ret=0;<br />        Statement stmt=conn.createStatement();<br />        String sql="select count(*) from contact";<br />        ResultSet rest=stmt.executeQuery(sql);<br />        while(rest.next())<br />        {<br />            ret=rest.getInt(1);<br />        }<br />        return ret;<br />    }<br />    /**<br />     *获得指定的页面数据，并且封装在PageBean中返回<br />     */<br />    public PageBean listDate(String page)throws Exception<br />    {<br />      try<br />      {<br />          PageBean pageBean=new PageBean(this);<br />          int pageNum=Integer.parseInt(page);<br />          Statement stmt=conn.createStatement();<br />          /**注意： 查询(pageNum-1)*pageBean.rowsPerPage到<br />           *(pageNum-1)*pageBean.rowsPerPage之间的数据，<br />           *这里只是一个简单的实现方式<br />           */<br />          String strSql="select top"+pageNum*pageBean.rowsPerPage+"*from contact order by userName";<br />          ResultSet rset=stmt.executeQuery(strSql);<br />          int i=0;<br />          while(rset.next())<br />          {<br />              if(i&gt;(pageNum-1)*pageBean.rowsPerPage-1)<br />              {<br />                  Object[] obj=new Object[6];<br />                  obj[0]=rset.getString("userName");<br />                  obj[1]=new Integer(rset.getInt("mobile"));<br />                  obj[2]=rset.getString("phone");<br />                  obj[3]=rset.getString("mail");<br />                  obj[4]=rset.getDate("lastcontact");<br />                  obj[5]=rset.getString("men");<br />                  v.add(obj);<br />              }<br />              i++;<br />          }<br />          rset.close();<br />          stmt.close();<br />          <br />         pageBean.curPage=pageNum;<br />         pageBean.data=v;<br />         return pageBean;<br />      }<br />      catch(Exception e)<br />         {<br />             e.printStackTrace();<br />             throw e;<br />         }<br />    }<br />    /**<br />     *返回结果集<br />     */<br />    public Vector getResult()throws Exception<br />    {<br />        return v;<br />    }<br />}<br />=======控制器Servlet==========</p>
		<p>/*<br /> * ContactServlet.java<br /> *<br /> * Created on 2006年4月14日, 下午3:44<br /> *<br /> * To change this template, choose Tools | Template Manager<br /> * and open the template in the editor.<br /> */</p>
		<p>package jspdev;</p>
		<p>import javax.servlet.http.*;<br />import java.io.*;<br />/**<br /> *<br /> * @author DuYang<br /> */<br />public class ContactServlet extends javax.servlet.http.HttpServlet{<br />    /**<br />     *处理客户端请求<br />     */    <br />    public void doPost(HttpServletRequest request,HttpServletResponse response)throws javax.servlet.ServletException,IOException<br />    {<br />        response.setContentType("text/html");<br />        PrintWriter out=response.getWriter();<br />        try<br />        {<br />            ContactBean contact=new ContactBean();<br />            PageBean pageCtl=contact.listDate((String)request.getParameter("jumpPage"));<br />            //把PageBean保存在request中<br />            request.setAttribute("pageCtl",pageCtl);<br />        }<br />        catch(Exception e)<br />        {<br />            e.printStackTrace();<br />        }<br />        //把试图派发到目的<br />        javax.servlet.RequestDispatcher dis=request.getRequestDispatcher("/viewcontact");<br />        dis.forward(request,response);<br />    }<br />   public void doGet(HttpServletRequest request,HttpServletResponse response)throws javax.servlet.ServletException,IOException<br />   {<br />       doGet(request,response);<br />   }<br />}<br />=======使用翻页的JSP文件==========</p>
		<p>&lt;jsp:useBean id="pageCtl" class="jspdev.PageBean" scope="request"/&gt;<br /> &lt;table border="1"&gt;<br />  &lt;% <br />  java.util.Vector v=pageCtl.getResult();<br />  java.util.Enumeration e=v.elements();<br />  while(e.hasMoreElement())<br />  {<br />  Object[] obj=(Object)e.nextElement();<br />  %&gt;<br />  &lt;tr&gt;<br />   &lt;td align="center" width="95%"&gt;&lt;%=obj[0]%&gt;&lt;/td&gt;<br />   &lt;td align="center" width="95%"&gt;&lt;%=obj[1]%&gt;&lt;/td&gt;<br />   &lt;td align="center" width="95%"&gt;&lt;%=obj[2]%&gt;&lt;/td&gt;<br />   &lt;td align="center" width="95%"&gt;&lt;%=obj[3]%&gt;&lt;/td&gt;<br />   &lt;td align="center" width="95%"&gt;&lt;%=obj[4]%&gt;&lt;/td&gt;<br />   &lt;td align="center" width="95%"&gt;&lt;%=obj[5]%&gt;&lt;/td&gt;               <br />  &lt;/tr&gt;<br />  &lt;% } %&gt;<br /> &lt;/table&gt;<br /> &lt;%if(pageCtl.maxPage!=1){%&gt;<br /> &lt;form name="PageForm" action="/ch13/servlet/contactservlet" method="post"&gt;<br />  &lt;<a href="mailto:%@include">%@include</a> file="/pageman.jsp"%&gt;<br /> &lt;/form&gt;<br /> &lt;%}%&gt;</p>
		<p>======可重用的组件在你需要分页的地方都可以使用它=======</p>
		<p>&lt;script language="javascript"&gt;<br /> &lt;!--<br />   function Jumping()<br />   {<br />    document.PageForm.submit();<br />    return;<br />   }<br />   function gotoPage(pagenum)<br />   {<br />    document.PageForm.jumpPage.value=pagenum;<br />    document.PageForm.submit();<br />    return;<br />   }<br /> --&gt;<br /> &lt;/script&gt;<br /> <br /> 每页&lt;%=pageCtl.rowsPerPage%&gt;行<br /> 共&lt;%=pageCtl.maxRowCount%&gt;行<br /> 第&lt;%=pageCtl.curPage%&gt;页<br /> 共&lt;%=pageCtl.maxPage%&gt;页<br /> &lt;br&gt;<br /> &lt;%if(pageCtl.curPage==1){out.print("首页 上一页");}<br />else<br /> { %&gt;<br /> &lt;a href="javascript:gotoPage(1)"&gt;首页&lt;/a&gt;<br /> &lt;a href="javascript:gogoPage(&lt;%=pageCur.curPage-1%&gt;)"上一页&lt;/a&gt;<br /> &lt;%}%&gt;<br /> &lt;%if(pageCtl.curPage==pageCtl.maxPage){out.print("下一页 尾页");}<br />else<br /> {%&gt;<br /> &lt;a href="javascript:gotoPage(&lt;%=pageCtl.curPage+1)"&gt;下一页&lt;/a&gt;<br />  &lt;a href="javascript:gotoPage(&lt;%=pageCtl.maxPage)"&gt;尾页&lt;/a&gt;<br />&lt;%}%&gt;</p>
		<p> 转到第&lt;select name="jumpPage" onchange="Jumping()"&gt;<br />     &lt;% for(int i=1;i&lt;pageCtl.maxPage;i++)<br />     {<br />       if(i==pageCtl.curPage)<br />       {<br />       %&gt;<br />       &lt;option selected value=&lt;%=i%&gt;&gt;&lt;%=i%&gt;&lt;/option&gt;<br />      &lt;%} else{%&gt;<br />      &lt;option value=&lt;%=i%&gt;&gt;&lt;%=i%&gt;&lt;/option&gt;<br />      &lt;%}}%&gt;<br />     &lt;/select&gt;页</p>
<img src ="http://www.blogjava.net/DuYang/aggbug/44579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DuYang/" target="_blank">Dalston.Young</a> 2006-05-05 08:01 <a href="http://www.blogjava.net/DuYang/articles/44579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>