posts - 22,comments - 35,trackbacks - 0
          Windows XP的關(guān)機(jī)是由Shutdown.exe程序來控制的,位于Windows\System32文件夾中。如果想讓W(xué)indows 2000也實(shí)現(xiàn)同樣的效果,可以把Shutdown.exe復(fù)制到系統(tǒng)目錄下。

          比如你的電腦要在22:00關(guān)機(jī),可以選擇“開始→運(yùn)行”,輸入“at 22:00 Shutdown -s”,這樣,到了22點(diǎn)電腦就會(huì)出現(xiàn)“系統(tǒng)關(guān)機(jī)”對(duì)話框,默認(rèn)有30秒鐘的倒計(jì)時(shí)并提示你保存工作。如果你想以倒計(jì)時(shí)的方式關(guān)機(jī),可以輸入“Shutdown.exe -s -t 3600”,這里表示60分鐘后自動(dòng)關(guān)機(jī),“3600”代表60分鐘。

          設(shè)置好自動(dòng)關(guān)機(jī)后,如果想取消的話,可以在運(yùn)行中輸入“shutdown -a”。另外輸入“shutdown -i”,則可以打開設(shè)置自動(dòng)關(guān)機(jī)對(duì)話框,對(duì)自動(dòng)關(guān)機(jī)進(jìn)行設(shè)置。

          Shutdown.exe的參數(shù),每個(gè)都具有特定的用途,執(zhí)行每一個(gè)都會(huì)產(chǎn)生不同的效果,比如“-s”就表示關(guān)閉本地計(jì)算機(jī),“-a”表示取消關(guān)機(jī)操作,下面列出了更多參數(shù),大家可以在Shutdown.exe中按需使用。

          ? -f:強(qiáng)行關(guān)閉應(yīng)用程序
            -m:\\計(jì)算機(jī)名:控制遠(yuǎn)程計(jì)算機(jī)
            -i:顯示圖形用戶界面,但必須是Shutdown的第一個(gè)選項(xiàng)
            -l:注銷當(dāng)前用戶
            -r:關(guān)機(jī)并重啟
            -t:時(shí)間:設(shè)置關(guān)機(jī)倒計(jì)時(shí)
            -c:“消息內(nèi)容”:輸入關(guān)機(jī)對(duì)話框中的消息內(nèi)容(不能超127個(gè)字符)
          posted @ 2006-08-07 14:18 kelven 閱讀(426) | 評(píng)論 (0)編輯 收藏
          http://popkart.tiancity.com/homepage/
          posted @ 2006-07-10 13:18 kelven 閱讀(347) | 評(píng)論 (2)編輯 收藏
          1.將數(shù)據(jù)庫驅(qū)動(dòng)程序的JAR文件放在Tomcat的?common/lib?中;
          2.在server.xml中設(shè)置數(shù)據(jù)源,以MySQL數(shù)據(jù)庫為例,如下:
          在<GlobalNamingResources>?</GlobalNamingResources>節(jié)點(diǎn)中加入,
          ??????<Resource
          ??????name="jdbc/DBPool"
          ??????type="javax.sql.DataSource"
          ??????password="root"
          ??????driverClassName="com.mysql.jdbc.Driver"
          ??????maxIdle="2"
          ??????maxWait="5000"
          ??????username="root"
          ??????url="jdbc:mysql://127.0.0.1:3306/test"
          ??????maxActive="4"/>
          ???屬性說明:name,數(shù)據(jù)源名稱,通常取”jdbc/XXX”的格式;
          ????????????type,”javax.sql.DataSource”;
          ????????????password,數(shù)據(jù)庫用戶密碼;
          ????????????driveClassName,數(shù)據(jù)庫驅(qū)動(dòng);
          ????????????maxIdle,最大空閑數(shù),數(shù)據(jù)庫連接的最大空閑時(shí)間。超過空閑時(shí)間,數(shù)據(jù)庫連
          ?????????????????????接將被標(biāo)記為不可用,然后被釋放。設(shè)為0表示無限制。
          ????????????MaxActive,連接池的最大數(shù)據(jù)庫連接數(shù)。設(shè)為0表示無限制。
          ????????????maxWait?,最大建立連接等待時(shí)間。如果超過此時(shí)間將接到異常。設(shè)為-1表示
          ?????????????????????無限制。
          3.在你的web應(yīng)用程序的web.xml中設(shè)置數(shù)據(jù)源參考,如下:
          ??在<web-app></web-app>節(jié)點(diǎn)中加入,
          ??<resource-ref>
          ????<description>MySQL?DB?Connection?Pool</description>
          ????<res-ref-name>jdbc/DBPool</res-ref-name>
          ????<res-type>javax.sql.DataSource</res-type>
          ????<res-auth>Container</res-auth>
          ????<res-sharing-scope>Shareable</res-sharing-scope>
          ?</resource-ref>
          ??子節(jié)點(diǎn)說明:?description,描述信息;
          ???????????????res-ref-name,參考數(shù)據(jù)源名字,同上一步的屬性name;
          ???????????????res-type,資源類型,”javax.sql.DataSource”;
          ???????????????res-auth,”Container”;
          ???????????????res-sharing-scope,”Shareable”;
          4.在web應(yīng)用程序的context.xml中設(shè)置數(shù)據(jù)源鏈接,如下:
          ??在<Context></Context>節(jié)點(diǎn)中加入,
          ??<ResourceLink
          ???name="jdbc/DBPool"?
          ???type="javax.sql.DataSource"?
          ???global="jdbc/DBPool"/>
          ???屬性說明:name,同第2步和第3步的屬性name值,和子節(jié)點(diǎn)res-ref-name值;
          ?????????????type,同樣取”javax.sql.DataSource”;
          ?????????????global,同name值。
          ?
          至此,設(shè)置完成,下面是如何使用數(shù)據(jù)庫連接池。
          1.建立一個(gè)連接池類,DBPool.java,用來創(chuàng)建連接池,代碼如下:
          import?javax.naming.Context;
          import?javax.naming.InitialContext;
          import?javax.naming.NamingException;
          import?javax.sql.DataSource;

          public?class?DBPool?{
          ????private?static?DataSource?pool;
          ????static?{
          ?????????Context?env?=?null;
          ??????????try?{
          ??????????????env?=?(Context)?new?InitialContext().lookup("java:comp/env");
          ??????????????pool?=?(DataSource)env.lookup("jdbc/DBPool");
          ??????????????if(pool==null)?
          ??????????????????System.err.println("'DBPool'?is?an?unknown?DataSource");
          ???????????????}?catch(NamingException?ne)?{
          ??????????????????ne.printStackTrace();
          ??????????}
          ??????}
          ????public?static?DataSource?getPool()?{
          ????????return?pool;
          ????}
          }

          2.在要用到數(shù)據(jù)庫操作的類或jsp頁面中,用DBPool.getPool().getConnection(),獲得一個(gè)Connection對(duì)象,就可以進(jìn)行數(shù)據(jù)庫操作,最后別忘了對(duì)Connection對(duì)象調(diào)用close()方法,注意:這里不會(huì)關(guān)閉這個(gè)Connection,而是將這個(gè)Connection放回?cái)?shù)據(jù)庫連接池。
          posted @ 2006-06-14 11:17 kelven 閱讀(931) | 評(píng)論 (0)編輯 收藏

          <%@ page import="java.io.*"%>
          <%
          String root=application.getRealPath("/");
          String fileName=request.getParameter("fileName");
          String filePath=request.getParameter("filePath");

          response.setContentType("application/octet-stream");
          response.setHeader("Content-Disposition",
          "attachment; filename=\"" +fileName+ "\"");

          try{
          java.io.OutputStream os = response.getOutputStream(); //不加此行將只能下載文本文件.下載jpg等就會(huì)出現(xiàn)打不開的現(xiàn)象.
          java.io.FileInputStream fis = new java.io.FileInputStream(root+filePath);
          byte[] b = new byte[1024];
          int i = 0;
          while ( (i = fis.read(b)) > 0 )
          {
          os.write(b, 0, i);
          }

          fis.close();
          os.flush();
          os.close();
          }
          catch ( Exception e )
          {
          System.out.println ( "IOException." + e );
          }
          %>

          java.io.FileInputStream fis = new java.io.FileInputStream(文件的真實(shí)路徑);
          也可以

          <%
          if (request.getParameter("fileUrl") != null)
          {
          String strFileUrl = request.getParameter("fileUrl");

          //獲取文件名(DealFile是自己寫的一個(gè)處理文件的一個(gè)類)
          DealFile dealFile = new DealFile(strFileUrl);
          String filename = dealFile.getFileName();

          response.setHeader("content-type","application/octet-stream");
          response.setHeader("Content-Disposition","attachment;filename=\""+ filename+"\"");

          BufferedInputStream bis = null;
          BufferedOutputStream bos = null;
          try
          {
          //從文件所在目錄以流的方式讀取文件
          bis = new BufferedInputStream(new FileInputStream(getServletContext().getRealPath(strFileUrl)));

          bos = new BufferedOutputStream(response.getOutputStream());

          byte[] buff = new byte[2048];
          int bytesRead;

          while(-1 != (bytesRead = bis.read(buff, 0, buff.length)))
          {
          bos.write(buff,0,bytesRead);
          }
          bos.flush();
          }
          catch(final IOException e)
          {
          System.out.println ( "IOException." + e );
          }
          finally
          {
          if (bis != null)
          bis.close();
          if (bos != null)
          bos.close();
          }
          return;
          }
          %>

          posted @ 2006-04-14 16:04 kelven 閱讀(1466) | 評(píng)論 (0)編輯 收藏

          [http://www.javaalmanac.com] - Java開發(fā)者年鑒一書的在線版本. 要想快速查到某種Java技巧的用法及示例代碼, 這是一個(gè)不錯(cuò)的去處.
          [http://www.onjava.com] - O'Reilly的Java網(wǎng)站. 每周都有新文章.
          [http://java.sun.com] - 官方的Java開發(fā)者網(wǎng)站 - 每周都有新文章發(fā)表.
          [http://www.developer.com/java] - 由Gamelan.com 維護(hù)的Java技術(shù)文章網(wǎng)站.
          [http://www.java.net] - Sun公司維護(hù)的一個(gè)Java社區(qū)網(wǎng)站.
          [http://www.builder.com] - Cnet的Builder.com網(wǎng)站 - 所有的技術(shù)文章, 以Java為主.
          [http://www.ibm.com/developerworks/java] - IBM的Developerworks技術(shù)網(wǎng)站; 這是其中的Java技術(shù)主頁.
          [http://www.javaworld.com] - 最早的一個(gè)Java站點(diǎn). 每周更新Java技術(shù)文章.
          [http://www.devx.com/java] - DevX維護(hù)的一個(gè)Java技術(shù)文章網(wǎng)站.
          [http://www.fawcette.com/javapro] - JavaPro在線雜志網(wǎng)站.
          [http://www.sys-con.com/java] - Java Developers Journal的在線雜志網(wǎng)站.
          [http://www.javadesktop.org] - 位于Java.net的一個(gè)Java桌面技術(shù)社區(qū)網(wǎng)站.
          [http://www.theserverside.com] - 這是一個(gè)討論所有Java服務(wù)器端技術(shù)的網(wǎng)站.
          [http://www.jars.com] - 提供Java評(píng)論服務(wù). 包括各種framework和應(yīng)用程序.
          [http://www.jguru.com] - 一個(gè)非常棒的采用Q&A形式的Java技術(shù)資源社區(qū).
          [http://www.javaranch.com] - 一個(gè)論壇,得到Java問題答案的地方,初學(xué)者的好去處。
          [http://www.ibiblio.org/javafaq/javafaq.html] - comp.lang.java的FAQ站點(diǎn) - 收集了來自comp.lang.java新聞組的問題和答案的分類目錄.
          http://java.sun.com/docs/books/tutorial/] - 來自SUN公司的官方Java指南 - 對(duì)于了解幾乎所有的java技術(shù)特性非常有幫助.
          http://www.javablogs.com] - 互聯(lián)網(wǎng)上最活躍的一個(gè)Java Blog網(wǎng)站.
          http://java.about.com/] - 來自About.com的Java新聞和技術(shù)文章網(wǎng)站.

          posted @ 2006-04-05 14:03 kelven 閱讀(412) | 評(píng)論 (0)編輯 收藏
          http://www.021123.com/
          posted @ 2006-03-24 14:59 kelven 閱讀(364) | 評(píng)論 (0)編輯 收藏
          1.安裝JDK1.4和jakarta-tomcat-4.1.27.exe。

          ? 路徑分別為 D:\jdk1.4 和 D:\Tomcat 4.1。
          ? 安裝Tomcat 4時(shí),會(huì)要求填寫web訪問端口、用戶名、密碼等信息。
          ? web訪問端口默認(rèn)為8080,用戶名默認(rèn)為admin,密碼自己填寫。

          ? 啟動(dòng)Tomcat4,訪問http://127.0.0.1:8080/ ,就能看到Apache Tomcat/4.1.27的歡迎訪問頁面,頁面上有一些相關(guān)介紹信息等。


          2.設(shè)置數(shù)據(jù)庫的驅(qū)動(dòng)

          ? 以O(shè)racle的JDBC驅(qū)動(dòng)設(shè)置為例:

          ? Oracle8i的驅(qū)動(dòng)在\oracle\ora81\jdbc\lib\目錄下。名字為classes12.zip。

          ? Oracle9i的驅(qū)動(dòng)在\oracle9i\jdbc\lib\目錄下,名字為ojdbc14.jar。

          ? 將這個(gè)文件copy到D:\Tomcat 4.1\common\lib 下。

          ? 注意,如果使用Oracle8i 的驅(qū)動(dòng),則需要在D:\Tomcat 4.1\common\lib 目錄下將classes12.zip更名為classes12.jar,因?yàn)門omcat4不認(rèn)識(shí)zip的后綴名。


          3.設(shè)置Web應(yīng)用。

          ? 新建一個(gè)文件夾,名字為mypool,位置為D:\mypool。這個(gè)D:\mypool路徑將是web應(yīng)用的主目錄。

          ? 打開D:\Tomcat 4.1\conf\server.xml 文件,找到如下行:
          ?
          ? ?<!-- Tomcat Root Context -->
          ? ? ?<!--
          ? ? ? ? ?<Context path="" docBase="ROOT" debug="0"/>
          ? ? ?-->
          ?
          ?
          ? 在這下面,加入如下行:
          ?
          ? <Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>

          ?
          ? 完成后,成為這個(gè)樣子:

          ? ? <!-- Tomcat Root Context -->
          ? ? ?<!--
          ? ? ? ? ? <Context path="" docBase="ROOT" debug="0"/>
          ? ? ? -->
          ? ?
          ? ? ?<Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>

          ? 保存D:\Tomcat 4.1\conf\server.xml 文件。

          ? 配置完成后,重新啟動(dòng)Tomcat,就可以這樣訪問這個(gè)web應(yīng)用了: http://127.0.0.1:8080/mypool/


          4.設(shè)置Tomcat的連接池?cái)?shù)據(jù)源。

          ? 訪問 http://127.0.0.1:8080/admin 頁面,用剛才安裝 Tomcat4 時(shí)填寫的用戶名和密碼登錄。

          ? 登錄成功后,會(huì)出現(xiàn)Tomcat 的web應(yīng)用管理界面(Tomcat Web Server Administration Tool)。

          ? 然后在左邊的目錄樹點(diǎn)擊“Data Sources”項(xiàng),右邊可以看到JNDI配置的頁面。
          ?
          ? 在右上角的下拉框中選擇“Create New Data Source”,接下來填寫配置信息:
          ?
          ? JNDI Name: jdbc/myOrcl ?
          ? Data Source URL: jdbc:oracle:thin:@192.168.6.40:1521:dbserver
          ? JDBC Driver Class: oracle.jdbc.driver.OracleDriver
          ? User Name: myname
          ? Password: mypassword
          ? Max. Active Connections: ?可用默認(rèn)值
          ? Max. Idle Connections: ? ?可用默認(rèn)值
          ? Max. Wait for Connection: 可用默認(rèn)值
          ? Validation Query: 可不填寫。

          ? 然后,按下“save”按鈕保存。
          ? 再按下“Commit Changes”按鈕將配置更改提交完成。

          ? 此時(shí)如果看看 Tomcat4 的窗口,會(huì)發(fā)現(xiàn)在最下面有一行文字提示: ?

          ? ?Debugging -- changes saved to conf/server.xml
          ?
          ? 此時(shí) D:\Tomcat 4.1\conf\server.xml 文件的配置已經(jīng)更改保存完畢。


          ? 如果此時(shí)打開D:\Tomcat 4.1\conf\server.xml 文件,會(huì)發(fā)現(xiàn)server.xml 文件的內(nèi)容改變了很多。
          ? 一些注釋文字都被去掉了。

          ? 還會(huì)發(fā)現(xiàn)上面第三步配置Web應(yīng)用的如下文字
          ? ?
          ? ?<!-- Tomcat Root Context -->
          ? ? ?<!--
          ? ? ? ? ? <Context path="" docBase="ROOT" debug="0"/>
          ? ? ? -->
          ? ?
          ? ? ?<Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>

          ? 則被自動(dòng)修改成了這樣的:

          ? ? ?<Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true" charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" docBase="D:\mypool" mapperClass="org.apache.catalina.core.StandardContextMapper" path="/mypool" privileged="true" reloadable="true" swallowOutput="false" useNaming="true" wrapperClass="org.apache.catalina.core.StandardWrapper">
          ? ? ? ? </Context>

          ? ?
          ? ?好了,至此位置,對(duì)Oracle的應(yīng)用連接池已經(jīng)配置完畢。
          ? ?
          ? ?仔細(xì)對(duì)照server.xml 文件,會(huì)發(fā)現(xiàn)剛才所配置的連接池信息被放置在<GlobalNamingResources>標(biāo)簽中,這意味著這個(gè)信息是可以被全局引用的,大致是如下的樣子:

          ? ? <GlobalNamingResources>
          ? ? <Environment name="simpleValue" override="true" type="java.lang.Integer" value="30"/>
          ? ? <Resource name="jdbc/myOrcl" scope="Shareable" type="javax.sql.DataSource"/>
          ? ? <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" scope="Shareable" type="org.apache.catalina.UserDatabase"/>
          ? ?
          ? ? <ResourceParams name="jdbc/myOrcl">
          ? ? ? <parameter>
          ? ? ? ? <name>maxWait</name>
          ? ? ? ? <value>5000</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>maxActive</name>
          ? ? ? ? <value>200</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>password</name>
          ? ? ? ? <value>mypassword</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>url</name>
          ? ? ? ? <value>jdbc:oracle:thin:@192.168.6.40:1521:dbserver</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>driverClassName</name>
          ? ? ? ? <value>oracle.jdbc.driver.OracleDriver</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>maxIdle</name>
          ? ? ? ? <value>20</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>username</name>
          ? ? ? ? <value>myname</value>
          ? ? ? </parameter>
          ? ? </ResourceParams>
          ? ? <ResourceParams name="UserDatabase">
          ? ? ? <parameter>
          ? ? ? ? <name>factory</name>
          ? ? ? ? <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>pathname</name>
          ? ? ? ? <value>conf/tomcat-users.xml</value>
          ? ? ? </parameter>
          ? ? </ResourceParams>
          ? </GlobalNamingResources> ?


          5.設(shè)置web應(yīng)用對(duì)連接池的引用。
          ?
          ? 打開D:\Tomcat 4.1\conf\server.xml 文件,找到剛才配置的web應(yīng)用文字,由于剛才server.xml 文件被自動(dòng)修改過,并去掉了很多注釋內(nèi)容,所以剛才配置的web應(yīng)用

          ? ?<Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>

          ? 被自動(dòng)修改成了這樣的:

          ? ? ?<Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true" charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" docBase="D:\mypool" mapperClass="org.apache.catalina.core.StandardContextMapper" path="/mypool" privileged="true" reloadable="true" swallowOutput="false" useNaming="true" wrapperClass="org.apache.catalina.core.StandardWrapper">
          ? ? ? ? </Context>

          ? 在<Context></Context>的描述中加上本web應(yīng)用對(duì)全局連接池的引用說明,如下文字:

          ? ? <ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/> ?

          ? 設(shè)置完成后,web應(yīng)用的描述大致如下面的樣子:

          ? ? <Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true" charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" docBase="D:\mypool" mapperClass="org.apache.catalina.core.StandardContextMapper" path="/mypool" privileged="true" reloadable="true" swallowOutput="false" useNaming="true" wrapperClass="org.apache.catalina.core.StandardWrapper"> ?
          ? ?
          ? ? ? <ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/> ? ? ?
          ? ?
          ?</Context>


          ? 保存D:\Tomcat 4.1\conf\server.xml 文件。

          ? 注意,設(shè)置這個(gè)連接池的引用說明是非常重要的一步。
          ? 一些朋友在Tomcat4中配置連接池失敗的原因大都?xì)w咎與此。還有網(wǎng)上一些文章說這是一個(gè)Tomcat4的一個(gè)Bug。
          ? 我用了整整兩天兩夜的時(shí)間才明白其中的奧秘。[:(]
          ? 當(dāng)時(shí)離瘋掉只查一點(diǎn)點(diǎn)。因?yàn)楫吘古渲靡粋€(gè)連接池是很簡(jiǎn)單的。[:(]


          6.一般情況下,到此,連接池的設(shè)置就完成了。

          ? 然后需要重新啟動(dòng)Tomcat,這樣就可以使用連接池來工作了。

          ? 但是,看到很多文章上說,還需要設(shè)置一下web.xml才能應(yīng)用。我沒有設(shè)置web.xml,連接池也可以完全使用。

          ? 現(xiàn)在說一下web.xml的配置方法。

          ? 在D:\mypool中新建文件夾,命名為WEB-INF,注意是大寫的字母。

          ? 然后在D:\mypool\WEB-INF\ 下新建文件web.xml,其內(nèi)容為:

          ? <web-app>
          ? ? <resource-ref>
          ? ? ? ? <description>Oracle DataSource example</description>
          ? ? ? ? <res-ref-name>jdbc/myOrcl</res-ref-name>
          ? ? ? ? <res-type>javax.sql.DataSource</res-type>
          ? ? ? ? <res-auth>Container</res-auth>
          ? ? </resource-ref>
          ? </web-app>

          ? 保存D:\mypool\WEB-INF\web.xml 文件。


          7.一個(gè)簡(jiǎn)單的應(yīng)用示例。

          ? 寫了一個(gè)簡(jiǎn)單的JSP頁面,用連接池來訪問數(shù)據(jù)庫。

          內(nèi)容如下:
          ---------------------
          <%@ page contentType="text/html;charset=GBK"%>
          <%@ page import="javax.naming.*"%>
          <%@ page import="javax.sql.*"%>
          <%@ page import="java.sql.*"%>
          <%
          ? ? try
          ? ? { ? ? ? ? ? ? ? ? ?
          ? ? ? ?Context initCtx = new InitialContext();
          ?
          ? ? ? ?if(initCtx==null)
          ? ? ? ? ? throw new Exception("沒有匹配的環(huán)境");

          ? ? ? ?Context ctx = (Context) initCtx.lookup("java:comp/env");
          ? ? ?
          ? ? ? ?//獲取連接池對(duì)象 ? ? ? ? ? ? ? ? ?
          ? ? ? ?Object obj = (Object) ctx.lookup("jdbc/myOrcl"); ?
          ? ? ?
          ? ? ? //類型轉(zhuǎn)換
          ? ? ? ?javax.sql.DataSource ds = (javax.sql.DataSource)obj;
          ? ? ? ? ?
          ? ? ? ?if(ds==null)
          ? ? ? ? ? throw new Exception("沒有匹配數(shù)據(jù)庫"); ?
          ? ?
          ? ? ? ?Connection conn = ds.getConnection();
          ? ? ?
          ? ? ? ?Statement stmt = conn.createStatement(); ? ? ? ? ? ? ? ? ?
          ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
          ? ? ? ?String strSql="select * from grade"; ?//SQL,要保證grade數(shù)據(jù)表里面有記錄。
          ? ? ? ? ? ? ? ? ? ? ?
          ? ? ? ?ResultSet rs=stmt.executeQuery(strSql);

          ? ? ? ?if(rs.next())
          ? ? ? ? ?{ ? ? ? ? ? ? ? ? ? ?
          ? ? ? ? ? out.println(rs.getString(1)); ? ? ? ? ? ? ? ? ? ? ? ? ?
          ? ? ? ? ? out.println(rs.getString(2)); ? ? ? ? ? ? ? ? ? ? ?
          ? ? ? ? ?}
          ? ? ? ?rs.close(); ? ? ?//關(guān)閉ResultSet ?
          ? ? ? ?stmt.close(); ? ?//關(guān)閉Statement
          ? ? ? ?conn.close(); ? ?//將連接放回到連接池
          ? ? ?}

          ? ? ?catch(Exception ex)

          ? ? ?{ ? ?
          ? ? ? ? ?ex.printStackTrace();
          ? ? ? ? ?throw new SQLException("cannot get Connection pool."+ex);
          ? ? ?}
          %>

          <hr>
          --------------------
          ?
          記住,用完后的數(shù)據(jù)庫連接要釋放。
          不然當(dāng)打開的連接過多或惡意刷屏,連接池的連接數(shù)目會(huì)被用完。
          當(dāng)連接池的連接數(shù)目用完后,再訪問jsp頁面時(shí),會(huì)在頁面出現(xiàn)如下的錯(cuò)誤信息,報(bào)告連接池的連接被耗盡:
          java.sql.SQLException: DBCP could not obtain an idle db connection, pool exhausted




          二、Win2k下Tomcat5 的連接池的配置

          安裝jakarta-tomcat-5.0.13.exe,假如Tomcat5的安裝目錄為 D:\Tomcat 5.0 。

          別忘了把oracle的驅(qū)動(dòng)程序classes12.jar文件copy到目錄 D:\Tomcat 5.0\common\lib\ 下。

          Tomcat5的連接池設(shè)置和Tomcat4 的差不多,僅說明一下不同點(diǎn)或需要特別注意的地方。


          1. Tomcat5啟動(dòng)后,訪問 http://127.0.0.1:8080/admin 頁面,當(dāng)設(shè)置完Tomcat的連接池?cái)?shù)據(jù)源后,打開D:\Tomcat 5.0\conf\server.xml 文件,會(huì)看到配置的連接池相關(guān)信息大致如下樣子:

          <GlobalNamingResources>
          ? ? <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
          ? ? <Resource name="jdbc/myOrcl" type="javax.sql.DataSource"/>
          ? ? <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
          ? ? <ResourceParams name="jdbc/myOrcl">
          ? ? ? <parameter>
          ? ? ? ? <name>maxWait</name>
          ? ? ? ? <value>5000</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>maxActive</name>
          ? ? ? ? <value>4</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>password</name>
          ? ? ? ? <value>mypassword</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>url</name>
          ? ? ? ? <value>jdbc:oracle:thin:@127.0.0.1:1521:dbserver</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>driverClassName</name>
          ? ? ? ? <value>oracle.jdbc.driver.OracleDriver</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>maxIdle</name>
          ? ? ? ? <value>2</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>username</name>
          ? ? ? ? <value>myusername</value>
          ? ? ? </parameter>
          ? ? </ResourceParams>
          ? ? <ResourceParams name="UserDatabase">
          ? ? ? <parameter>
          ? ? ? ? <name>factory</name>
          ? ? ? ? <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
          ? ? ? </parameter>
          ? ? ? <parameter>
          ? ? ? ? <name>pathname</name>
          ? ? ? ? <value>conf/tomcat-users.xml</value>
          ? ? ? </parameter>
          ? ? </ResourceParams>
          ? </GlobalNamingResources>

          可以看到,一些連接池的信息配置參數(shù)已經(jīng)和Tomcat4不同了。
          但大致配置步驟和方法都是一樣的。


          2.設(shè)置web應(yīng)用對(duì)連接池的引用。

          ?打開D:\Tomcat 5.0\conf\Catalina\localhost\ 目錄,找到和web應(yīng)用同名的xml文件(mypool.xml),打開這個(gè)文件,
          修該其<Context></Context>的描述信息,添加如下行:

          ? ?<ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/> ?

          使mypool.xml文件的內(nèi)容看起來大致這個(gè):
          ?
          ? ?<Context docBase="D:/mypool" path="/mypool" privileged="true" reloadable="true">
          ? ? ?<ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/>
          ? ?</Context>

          然后保存mypool.xml,需要重新Tomcat5服務(wù),使之生效。


          3.JSP頁面測(cè)試文件的寫法也是一樣的,不再贅述。

          4.一些補(bǔ)充:

          ? 如果web應(yīng)用沒有配置對(duì)連接池的引用,即沒有配置<ResourceLink>,則會(huì)在訪問jsp頁面時(shí)出現(xiàn)如下錯(cuò)誤:
          ? ? NameNotFoundException: Name jdbc is not bound in this Context

          ? 如果缺少Oracle的JDBC驅(qū)動(dòng),則會(huì)在訪問jsp頁面時(shí)出現(xiàn)如下錯(cuò)誤:
          ? ? java.sql.SQLException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
          posted @ 2006-03-22 11:30 kelven 閱讀(1644) | 評(píng)論 (1)編輯 收藏
               摘要:         首先XMLHttpRequest不是web標(biāo)準(zhǔn),而是大部分主流瀏覽器都支持的一種擴(kuò)展技術(shù)。它被認(rèn)為是一種異步調(diào)用的實(shí)現(xiàn)技術(shù),因?yàn)樗緛硎潜辉O(shè)計(jì)在后臺(tái)取數(shù)據(jù)用的。在IE中它被作為一個(gè)ActiveX控件提供,而其他一些瀏覽器都提供一些本地API以供調(diào)用。下面是一些關(guān)于XMLHttpRequest的基本方法: 1、獲...  閱讀全文
          posted @ 2006-02-26 13:42 kelven 閱讀(398) | 評(píng)論 (0)編輯 收藏
          1、女人永遠(yuǎn)也不知道男人為什么要學(xué)會(huì)堅(jiān)強(qiáng)?
          因?yàn)樗麄冏约褐?他們雖然外表堅(jiān)強(qiáng).但內(nèi)心很脆弱.他們永遠(yuǎn)想讓自己身邊的她覺得自己是最棒的.

          2、女人永遠(yuǎn)也不知道男人為什么不會(huì)輕易掉眼淚?
          因?yàn)樗麄冏约褐?他們不是不會(huì)掉眼淚.只是他明白.一但眼淚掉下來了.這段感情也就結(jié) 束了.


          3、女人永遠(yuǎn)也不知道男人為什么每次在心煩的時(shí)候那么喜歡抽煙?
          因?yàn)樗麄冏约褐?只有在煙霧中才能憶起他們過去美好的時(shí)光來尋求一點(diǎn)心里的平衡.


          4、女人永遠(yuǎn)也不知道男人為什么要在分手以后還會(huì)對(duì)她噓寒問暖?
          因?yàn)樗麄冏约褐?他們并不是想跟你做朋友.只是想挽回這段曾經(jīng)屬于他的感情.


          5、女人永遠(yuǎn)也不知道男人為什么每次在聽到她被欺負(fù)了會(huì)顯得那么發(fā)狂?
          因?yàn)樗麄冏约褐?哪怕這次架打輸了.躺下了.他也會(huì)覺得高興.因?yàn)樗麄儗幵缸约菏艿絺?/FONT>害.也不愿意看到你哭泣.


          6、女人永遠(yuǎn)也不知道男人為什么在分手以后會(huì)夜夜買醉?

          因?yàn)樗麄冎?如果今晚不麻醉自己.那么今晚只能在思念中度過.


          7. 女人永遠(yuǎn)也不知道男人為什么每次出門會(huì)出手那么大方?

          因?yàn)樗麄冎?他們寧愿自己一個(gè)人省吃檢用.也不愿意你看到你被別人看不起.


          8.女人永遠(yuǎn)也不知道男人為什么會(huì)那么愛對(duì)她發(fā)脾氣?
          因?yàn)樗麄冏约褐?對(duì)她發(fā)脾氣并不是不愛她.只是希望她在以后的路上不被別人所欺騙.

          9.女人永遠(yuǎn)也不知道男人為什么會(huì)那么在意你以前的男朋友?
          因?yàn)樗麄冏约褐?并不是他們不自信.只是他們害怕有一天你會(huì)離他而去.

          10. 女人永遠(yuǎn)也不知道男人為什么看到你為別人寫的日記之后還會(huì)那么鎮(zhèn)靜的聽你解釋?

          因?yàn)樗麄冏约褐?自己并不是不想發(fā)火.只是希望能從你的口中得知到底是他重要還是別人重要?


          11、女人永遠(yuǎn)也不知道男人為什么不對(duì)她說我愛你⒊個(gè)字?

          因?yàn)樗麄冎?并不是不想說.只是他們自己明白.⒈萬句我愛你用在身上也不夠.

          12. 女人永遠(yuǎn)也不知道男人為什么會(huì)跑到這里來發(fā)貼?
          因?yàn)樗麄冎?希望有一天這貼能被你看見.以此來證明你對(duì)他的不理解.只有他自己心里明 白.這貼要是沒人回的話.很快便會(huì)消失了.你更不知道一個(gè)男人的幸福生活來之不易,那是 他將每一個(gè)看過的貼子都頂了的緣故。


          (如果你不能為你心愛的女人穿上嫁衣,請(qǐng)停下你解她衣扣的手)


          愿天下有情人終成眷屬.當(dāng)你們看到這貼時(shí)心里最想的那個(gè)人也就是你們最愛的那個(gè)人!
          posted @ 2006-02-25 11:50 kelven 閱讀(392) | 評(píng)論 (0)編輯 收藏
          Java文件中,連接SQLserver數(shù)據(jù)庫時(shí),需要一個(gè)連接數(shù)據(jù)庫的驅(qū)動(dòng)文件。

          在你安裝JDK的路徑下的lib文件夾里拷貝一個(gè)文件jtds-0.6.jar,并且在環(huán)境變量里設(shè)置classpath,例如:你的jdk裝在c:\jdk,那么環(huán)境變量classpath的路徑應(yīng)設(shè)為c:\jdk\lib\jtds-0.6.jar。(環(huán)境變量知道這么設(shè)吧?在我的電腦的屬性,高級(jí)里。多個(gè)路徑之間用分號(hào)隔開。)

          這里提供SQLserver連接驅(qū)動(dòng)文件jtds-0.6.jar,下載解壓后拷貝到j(luò)dk路徑下的lib文件夾里。

          具體在文件中的應(yīng)用:

          import java.sql.*;
          String url="JDBC:jtds:sqlserver://localhost:1433/‘?dāng)?shù)據(jù)庫名′";
          String driver="net.sourceforge.jtds.jdbc.Driver";
          Class.forName(driver);
          Connection conn=DriverManager.getConnection(url,"用戶名","密碼");
          就可以連接到你的數(shù)據(jù)庫了。

          1433是SQLserver默認(rèn)的端口號(hào),如果要連接到其他機(jī)器上,要將localhost改為其他機(jī)器的IP地址,如192.168.0.101。


          其中數(shù)據(jù)庫名是你所新建的數(shù)據(jù)庫的名稱,用戶名和密碼是你登陸SQLserver是的用戶名和密碼。

          有的人安裝SQLserver時(shí)用的是Windows身份驗(yàn)證,那么用戶名和密碼都為空。如果不能登陸,或者要用SQL身份驗(yàn)證的話,需要修改注冊(cè)表。在運(yùn)行里打開regedit,然后查找loginmode(具體位置:hkey_local_machine\software\microsoft\MSSQLserver\
          mssqlserver\),僅用Windows身份驗(yàn)證的值為1,混合身份驗(yàn)證的值為2。只要將1改為2,就可以用SQL身份驗(yàn)證了,用戶名為‘sa',密碼為空。
          posted @ 2006-02-17 11:59 kelven 閱讀(591) | 評(píng)論 (0)編輯 收藏


              String root = getServletContext().getRealPath("/");
              String path 
          = request.getParameter("path");
              String name 
          = request.getParameter("name");


              response.setContentType(
          "unknown");
              response.addHeader(
          "Content-Disposition""filename=\"" + name + "\"");


              
          try
              
          {
                  java.io.OutputStream    os  
          = response.getOutputStream();
                  java.io.FileInputStream fis 
          = new java.io.FileInputStream(root + path + name);


                  
          byte[] b = new byte[1024];
                  
          int    i = 0;


                  
          while ( (i = fis.read(b)) > 0 ) 
                  
          {
                      os.write(b, 
          0, i);
                  }



                  fis.close();
                  os.flush();
                  os.close();
              }

              
          catch ( Exception e )
              
          {
              }
          posted @ 2006-02-16 12:21 kelven 閱讀(1985) | 評(píng)論 (1)編輯 收藏
          諾基亞手機(jī)限制碼-1234
            保密碼 -12345
            *#06#:看手機(jī)序列號(hào)。  
            *#2820# :看蘭牙版本信息,需要先將藍(lán)牙設(shè)置為打開狀態(tài)。
            *#92702689# :這個(gè)也是大家常用的一條命令,用來查看系統(tǒng)信息。
            *#335738#:刪除Email, GPRS, MMS的設(shè)置信息
            *#7370925538#:刪除電子錢包的內(nèi)容和 密碼 ,這個(gè)比較實(shí)用,要是忘記了,你既可以用這個(gè)命令,也可以 恢復(fù)出廠 設(shè)置,不過這個(gè)更實(shí)用。
            *#7370#:軟件格式化。刪除存儲(chǔ)空間的內(nèi)容。
            *#7780#:一個(gè) 恢復(fù)出廠 設(shè)置的快捷操作。
            *#7220#:恢復(fù)一些功能
              *#92702689#LIFE:查系統(tǒng)版本
              *#0000#:查系統(tǒng)版本

          以上是一些NOKIA機(jī)型的查詢指令,不一定適合所有的NOKIA機(jī)型,但是基本上都可以使用。
          posted @ 2006-02-09 12:35 kelven 閱讀(1065) | 評(píng)論 (0)編輯 收藏
          下載地址:http://download.17hk.com/soft.asp?softid=44   (21.6M)
                              http://www.it1848.com/Soft/cyrjxz/yyrjxz/200510/Soft_20051014114011.html (46.4M)

          (WindowsXP SP2系統(tǒng)上SQLServer2000必須要安裝SP3之后的補(bǔ)丁才能正常使用)

          由于SQL Server Service Packs按照累積形式進(jìn)行組織,因此,SP3包含了先期發(fā)布的 Service Pack 1(SP1)與 Service Pack 2(SP2)中的所有修正程序,它既可應(yīng)用于全新安裝的系統(tǒng),也可在已經(jīng)安裝SP1或SP2的系統(tǒng)上加以應(yīng)用。

            優(yōu)勢(shì)
            除提供最新更新內(nèi)容與修正程序外,SQL Server 2000 SP3還能夠?yàn)槟峁┮韵聝?yōu)勢(shì):

            可維護(hù)性
            在可維護(hù)性方面的改進(jìn)包括:
          得以增強(qiáng)的錯(cuò)誤報(bào)告功能。通過適當(dāng)配置,SQL Server能夠?qū)㈥P(guān)鍵性錯(cuò)誤信息自動(dòng)發(fā)送至Microsoft公司。
            得以改進(jìn)的多服務(wù)器管理功能。
            用于實(shí)現(xiàn)監(jiān)控的新增API。數(shù)據(jù)庫管理員(DBA)或第三方工具可以對(duì)出現(xiàn)問題的進(jìn)程加以診斷
            性能
            SP3引入了針對(duì)QLogic’s VI-enabled SANblade QLA2350 Fibre Channel控制器的支持能力。通過在SQL Server網(wǎng)絡(luò)互連層上應(yīng)用虛擬接口(Virtual Interface)技術(shù),在服務(wù)器和客戶端系統(tǒng)上針對(duì)每條消息所消耗的CPU資源得以顯著降低,同時(shí),系統(tǒng)整體性能得到了相應(yīng)提高。
            安全性
            最新提供的安全特性與工具包括:
            針對(duì)SQL Server 2000在線圖書的內(nèi)容更新。SQL Server 2000在線圖書為廣大客戶提供了用以進(jìn)一步增強(qiáng)應(yīng)用環(huán)境安全性所需的更多指導(dǎo)信息。
            安全修補(bǔ)程序。SP3針對(duì)用戶反映或在持續(xù)測(cè)試過程中發(fā)現(xiàn)的各種已知薄弱環(huán)節(jié)提供了相應(yīng)的修復(fù)程序。
            SQL Server Agent增強(qiáng)。SP3允許您在不具備管理員權(quán)限的情況下運(yùn)行SQL Server Agent。
          posted @ 2006-01-17 01:37 kelven 閱讀(3224) | 評(píng)論 (1)編輯 收藏
              現(xiàn)在多數(shù)host裝的還是MySQL 4.0x 版本以下,如果升級(jí)到了4.1x 或者移動(dòng)到使用4.1x 的主機(jī)上,估計(jì)會(huì)遇到一些問題。我在這上面遇到了兩個(gè)問題。
              一是數(shù)據(jù)導(dǎo)入。在phpMyAdmin內(nèi)導(dǎo)入后,發(fā)現(xiàn)中文變成了亂碼。搜索學(xué)習(xí)后,了解到需要設(shè)置數(shù)據(jù)庫的collation (校勘),如果你的數(shù)據(jù)庫是utf-8的,設(shè)置為utf8_general_ci就可以了。
              二是,即使正確導(dǎo)入了,在phpMyAdmin里也能正確顯示,但頁面上顯示的文章內(nèi)容都是“???”,而模板里面的漢字都能正常顯示。這讓我頭疼了很久。搜索到Windix’s Weblog上有對(duì)此的說明:
              “從MySQL 4.1開始引入的多語言支持確實(shí)很棒,而且一些特性已經(jīng)超過了其他的數(shù)據(jù)庫系統(tǒng)。不過我在測(cè)試過程中發(fā)現(xiàn)使用適用于MySQL 4.1之前的PHP語句操作MySQL數(shù)據(jù)庫會(huì)造成亂碼,即使是設(shè)置過了表字符集也是如此。我讀了一下新的MySQL在線手冊(cè)中第十章‘Character Set Support’后終于找到了解決方法并測(cè)試通過。MySQL 4.1的字符集支持(Character Set Support)有兩個(gè)方面:字符集(Character set)和排序方式(Collation)。對(duì)于字符集的支持細(xì)化到四個(gè)層次: 服務(wù)器(server),數(shù)據(jù)庫(database),數(shù)據(jù)表(table)和連接(connection)。當(dāng)我們按照原來的方式通過PHP存取MySQL數(shù)據(jù)庫時(shí),就算設(shè)置了表的默認(rèn)字符集為utf8并且通過UTF-8編碼發(fā)送查詢,你會(huì)發(fā)現(xiàn)存入數(shù)據(jù)庫的仍然是亂碼。問題就出在這個(gè)connection連接層上。解決方法是在發(fā)送查詢前執(zhí)行一下下面這句:
          SET NAMES ‘utf8′;”
              但是我依舊不知道,如何,在何處讓W(xué)ordPress運(yùn)行這個(gè)SQL語句。后來在阿修的部落格上查到辦法:
            “為著解決這個(gè)問題必須去修改wp-includes/wp-db.php內(nèi)的資料連線設(shè)定。詳細(xì)的修改方式是這樣的:
          $this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
          //加上下面這行
          $this->query(”SET NAMES ‘utf8′”);”
          這樣子終于能正常顯示中文的WordPress了。雖然后來還是沒用,但是覺得這個(gè)經(jīng)驗(yàn)會(huì)對(duì)別人有用。記得有人用email和我討論過這樣子的中文顯示問題,但是我那時(shí)哪里知道問題出在MySQL 4.1x上。
          還有,4.1x的數(shù)據(jù)庫不向下兼容,所以升級(jí)的時(shí)候要三思啊。
          posted @ 2006-01-01 08:02 kelven 閱讀(459) | 評(píng)論 (0)編輯 收藏
          (此為個(gè)人學(xué)習(xí)心得,以后會(huì)逐漸完善)

          (本例使用的數(shù)據(jù)庫是:MySql)

          1.當(dāng)你用流讀取文件或者從數(shù)據(jù)庫讀取數(shù)據(jù)時(shí),取得的字符串的編碼要與頁面的一致,否則會(huì)亂碼

          例如:

          public class FileOperation {

              
          //path為文件的全路徑
              public static String readFile(String path){
                  String templateContent
          ="";
                  
          try{
                      BufferedReader br
          =new BufferedReader(new FileReader(path));
                      String temp
          =null;
                      
          while((temp=br.readLine())!=null){
                          templateContent
          =templateContent+temp+"\n";
                      }

                      br.close();
                  }

                  
          catch(Exception e){
                      System.out.println(
          "讀取文件出錯(cuò)");
                      e.printStackTrace();
                  }

                  
                  
          return templateContent;
              }

          }


          (假設(shè)頁面的編碼為UTF-8)

          調(diào)用以上函數(shù)只需要傳遞一個(gè)完整的文件路徑就可以以字符串的形式讀取文件.

          ......

          String str
          =FileOperation.readFile("d:\11.txt");

          ......

          request.setAttribute("str",str);

          ......

          則頁面用requset.getAttribute("str")取得的中文字符將會(huì)是亂碼.

          解決方案:

          將上段取中文字符串的代碼改成:



          String str
          =new String(FileOperation.readFile("d:\11.txt").getBytes("UTF-8"));



          request.setAttribute(
          "str",str);




          posted @ 2005-12-28 16:16 kelven 閱讀(540) | 評(píng)論 (0)編輯 收藏
          Resin的確是比較狠的應(yīng)用服務(wù)器,運(yùn)行速度快,配置又簡(jiǎn)單!這里介紹一下Resin2.1.12的數(shù)據(jù)庫連接池配置方法。

          在%ResinHome%/conf/resin.conf中找到
          <!--
          - Sample database pool configuration
          - The JDBC name is java:comp/env/jdbc/test
          -->
          在其下加入相應(yīng)的信息可以連接到不同的數(shù)據(jù)庫。

          Mysql:
          <resource-ref>
          <res-ref-name>jdbc/blog</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <init-param driver-name="com.caucho.jdbc.mysql.Driver"/>
          <init-param url="jdbc:mysql_caucho://localhost:3306/blog"/>
          <init-param user="root"/>
          <init-param password="****"/>
          <init-param max-connections="20"/>
          <init-param max-idle-time="30"/>
          </resource-ref>

          將相應(yīng)的驅(qū)動(dòng)放到%Resin/lib/%下。

          MS-Sql:
          <resource-ref>
          <res-ref-name>jdbc/blog</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <init-param driver-name="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
          <init-param url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=blog"/>
          <init-param user="sa"/>
          <init-param password="****"/>
          <init-param max-connections="20"/>
          <init-param max-idle-time="30"/>
          </resource-ref>
          首先要下載安裝sqlserver-jdbc-驅(qū)動(dòng),然后將其lib下的三個(gè)jar文件放到%Resin/lib/%下。
          posted @ 2005-12-16 12:58 kelven 閱讀(595) | 評(píng)論 (0)編輯 收藏

          Servlet的演變:在常規(guī)的 JSP,Servlet,JavaBean三層結(jié)構(gòu)中,JSP實(shí)現(xiàn)View的功能,Servlet實(shí)現(xiàn)Controller的功能,JavaBean實(shí)現(xiàn)Model的實(shí)現(xiàn)。

          在Struts中,將常規(guī)情況下的Servlet拆分與ActionServlet、FormBean、ActionBean三個(gè)部分。ActionServlet配合Struts-config.xml,專職完成頁面導(dǎo)航,而不再負(fù)責(zé)具體的數(shù)據(jù)獲取與相應(yīng)邏輯,這兩部分功能由FormBean和ActionBean來完成。

          Struts的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有頁面的導(dǎo)航定義。對(duì)于大型的WEB項(xiàng)目,通過此配置文件即可迅速把握其脈絡(luò),這不管是對(duì)于前期的開發(fā),還是后期的維護(hù)或升級(jí)都是大有裨益的。掌握Struts-config.xml是掌握Struts的關(guān)鍵所在。

          <struts-config>

             <data-sources />

             <form-beans >
                <form-bean name="systemForm" type="com.gdglc.survey.form.SystemForm" />
                <form-bean name="FindMemberForm" type="org.apache.struts.validator.DynaValidatorForm">
                   <form-property name="findName" type="java.lang.String"/>
                </form-bean>
             </form-beans>

             <global-exceptions />

             <global-forwards>
                <forward name="showMsg" path="/msg.jsp" />
             </global-forwards>

             <action-mappings>

                <action 
                   path="/list" 
                   type="com.gdglc.survey.action.ListAction">
                   <forward name="list" path="/list.jsp"/>
                </action>

                <action
                   attribute="systemForm"
                   input="/admin/System_Base_List.jsp"
                   name="systemForm"
                   path="/systemBaseModify"
                   type="com.gdglc.survey.action.SystemAction"
                   scope="request"
                   validate="false">
                </action>

             </action-mappings>

             <message-resources parameter="com.gdglc.application" />
            
             <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
                <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
             </plug-in>

          </struts-config>

          每一個(gè)FormBean 都必須繼承ActionForm類,F(xiàn)ormBean是對(duì)頁面請(qǐng)求的封裝。即把HTTP request 封裝在一個(gè)對(duì)象中,需要說明的一點(diǎn)就是多個(gè)HTTP request可以共用一個(gè)FormBean,便于維護(hù)和重用。


          public final class RegUserForm extends ActionForm{

             private String logname;
             private String password;
             private String email;

             public RegUserForm(){
                logname = null;
                password = null;
                email = null;
             }

             ......

             public void reset(ActionMapping mapping, HttpServletRequest request)
             {
                logname = null;
                password = null;
                email = null;
             }

             public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) 
             {
                ActionErrors errors=new ActionErrors();
                if(this.password==null)
                   errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("password is null!!"));
                ......
                return errors;
              }
          }

          FormBean的產(chǎn)生是為了提供數(shù)據(jù)給ActionBean,在ActionBean中可以取得FormBean中封裝的數(shù)據(jù),經(jīng)相應(yīng)的邏輯處理后,調(diào)用業(yè)務(wù)方法完成相應(yīng)業(yè)務(wù)要求。

          public final class RegUserAction extends Action
          {
             public ActionForward execute(ActionMapping mapping,
                                                            ActionForm form, 
                                                            HttpServletRequest request,
                                                            HttpServletResponse response)

             {
                ......
                if(true)
                   return mapping.findForwad("list");
                else {
                   ActionErrors errors=new ActionErrors();
                   errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("...."));
                   this.saveErrors(request,errors);
                   return new ActionForward(mapping.getInput());
                }
             }
          }

          Struts優(yōu)缺點(diǎn)
          優(yōu)點(diǎn):


          Struts跟Tomcat、Turbine等諸多Apache項(xiàng)目一樣,是開源軟件,這是它的一大優(yōu)點(diǎn)。使開發(fā)者能更深入的了解其內(nèi)部實(shí)現(xiàn)機(jī)制。

          除此之外,Struts的優(yōu)點(diǎn)主要集中體現(xiàn)在兩個(gè)方面:Taglib和頁面導(dǎo)航。Taglib是Struts的標(biāo)記庫,靈活動(dòng)用,能大大提高開發(fā)效率。另外,就目前國(guó)內(nèi)的JSP開發(fā)者而言,除了使用JSP自帶的常用標(biāo)記外,很少開發(fā)自己的標(biāo)記,或許Struts是一個(gè)很好的起點(diǎn)。

          關(guān)于頁面導(dǎo)航,我認(rèn)為那將是今后的一個(gè)發(fā)展方向,事實(shí)上,這樣做,使系統(tǒng)的脈絡(luò)更加清晰。通過一個(gè)配置文件,即可把握整個(gè)系統(tǒng)各部分之間的聯(lián)系,這對(duì)于后期的維護(hù)有著莫大的好處。尤其是當(dāng)另一批開發(fā)者接手這個(gè)項(xiàng)目時(shí),這種優(yōu)勢(shì)體現(xiàn)得更加明顯。

          缺點(diǎn):

          Taglib是Struts的一大優(yōu)勢(shì),但對(duì)于初學(xué)者而言,卻需要一個(gè)持續(xù)學(xué)習(xí)的過程,甚至還會(huì)打亂你網(wǎng)頁編寫的習(xí)慣,但是,當(dāng)你習(xí)慣了它時(shí),你會(huì)覺得它真的很棒。

          Struts將MVC的Controller一分為三,在獲得結(jié)構(gòu)更加清晰的同時(shí),也增加了系統(tǒng)的復(fù)雜度。

          Struts從產(chǎn)生到現(xiàn)在還不到半年,但已逐步越來越多運(yùn)用于商業(yè)軟件。雖然它現(xiàn)在還有不少缺點(diǎn),但它是一種非常優(yōu)秀的J2EE MVC實(shí)現(xiàn)方式,如果你的系統(tǒng)準(zhǔn)備采用J2EE MVC架構(gòu),那么,不妨考慮一下Struts。

          Struts實(shí)施經(jīng)驗(yàn):

          1)、基于Struts架構(gòu)的項(xiàng)目開發(fā),首先需要有一個(gè)很好的整體規(guī)劃,整個(gè)系統(tǒng)中包括哪幾個(gè)模塊,每個(gè)模塊各需要多少FormBean和ActionBean等,而且最好有專人負(fù)責(zé)Struts-config.xml的管理。開發(fā)基于Struts的項(xiàng)目的難點(diǎn)在于配置管理,尤其是對(duì)Struts-config.xml的管理。

          2)、如果你的項(xiàng)目非常緊,并且項(xiàng)目組中又沒有富有經(jīng)驗(yàn)的Struts開發(fā)人員,建議不要冒然采用Struts。Struts的掌握需要一個(gè)過程,對(duì)于一個(gè)熟練的JSP程序員,自學(xué)大概需要半個(gè)月左右的時(shí)間。如果結(jié)合titls,則需要更長(zhǎng)的時(shí)間。

          3)、如果你在網(wǎng)頁中大量運(yùn)用taglib,那么你的美工將做出部分犧牲。當(dāng)你結(jié)合Tiles,功能增強(qiáng)的同時(shí),這種犧牲尤為明顯。當(dāng)然,你對(duì)功能和美觀的取舍由你自己決定。

          4)、Taglib是一個(gè)好東西,但靈活運(yùn)用它卻需要一個(gè)過程,如果你不想在Taglib上花太多的時(shí)間,那么只需理解與FORM有關(guān)的幾個(gè)標(biāo)記,其它的標(biāo)記就放著吧,以后再看,先去研究ActionServlet和Struts-config.xml,你會(huì)覺得很有成就感。

          5)、Struts是否只適合于大型項(xiàng)目呢?No!Struts適合于各種大小的項(xiàng)目,當(dāng)然,對(duì)于大型項(xiàng)目,它所體現(xiàn)出來的優(yōu)勢(shì)更加明顯。

          http://www.chinaitlab.com/www/news/article_show.asp?id=33092
          posted @ 2005-12-15 13:33 kelven 閱讀(839) | 評(píng)論 (0)編輯 收藏
          Resin使用簡(jiǎn)介

          使用Resin開發(fā)Java Web項(xiàng)目時(shí),需要建立自己的WebApp。這里不介紹Resin Cmp/Ejb的開發(fā)和使用,只介紹用Resin開發(fā)普通的jsp\java servlet項(xiàng)目。在這里還要談到resin.conf的配置。Resin中的應(yīng)用可以有2種方式發(fā)布:一是在Resin的目錄下發(fā)布;二是打包成War發(fā)布。

          1、在Resin的目錄下發(fā)布

          在resin.conf中查找<web-app>標(biāo)簽,該標(biāo)簽表示一個(gè)web應(yīng)用。

          標(biāo)簽中,id屬性表示該應(yīng)用的Web路徑。如<web-app id=’/test’>,表示該應(yīng)用在Web上訪問的時(shí)候應(yīng)該用http://hostname/test/來訪問。app-dir屬性表示該應(yīng)用的實(shí)際路徑。如<app-dir>d:\resin\doc\test</app-dir>表示該應(yīng)用在d:\resin\doc\test目錄下面。默認(rèn)值為根下面的和id同名的目錄。Resin可以配置3種error-page:404錯(cuò)誤也就是文件找不到錯(cuò)誤頁;Exception違例頁;不能連接java引擎頁。他們分別可以這樣子設(shè)置。

          404文件找不到頁

          <web-app id='/app1'>

          <error-page error-code='404' location='/file_not_found.jsp'/>

          </web-app>

          Exception 違例頁

          <web-app id='/foo'>

          <error-page exception-type='java.lang.NullPointerException'

          location='/nullpointer.jsp'/>

          </web-app>

          不能連接到srun Servlet引擎錯(cuò)誤頁

          該頁設(shè)置和應(yīng)用無關(guān),屬于服務(wù)器的設(shè)置。

          <http-server>

          <error-page exception-type='connection'

          location='/missing_file.html'/>

          </http-server>

          classpath的設(shè)置

          參見下面的語句:

          <classpath id='WEB-INF/classes' source='WEB-INF/src' compile='true'/>

          id參數(shù)的值表示classpath中編譯后的classpath的存放路徑;source參數(shù)的值表示classpath中java源代碼的存放路徑;compile中的值可能是true或者false,表示是否由Resin的srun自動(dòng)編譯java源代碼。Classpath的設(shè)置一般和javaBean或者Servlet的使用有關(guān)。id的值表示javaBean的編譯好的包存放的根,source的值表示javaBean的java源代碼存放的根。Servlet相同。

          Servlet的設(shè)置

          參見下面的語句:

          <servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>

          <servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>

          <servlet-mapping url-pattern='/servlet/*' servlet-name='invoker'/>

          一般就是指定那些需要通過srun的解析。比如在這里,把*.jsp改成*.jss,其他不變,那么只要在訪問時(shí)遇到*.jss的文件就和原來遇到*.jsp一樣處理。通過這個(gè)可以指定解析的引擎,如以下的配置:

          <servlet-mapping url-pattern='*.xtp' servlet-name='com.caucho.jsp.XtpServlet'/>

          在Servlet中,也可以指定servlet。如

          <servlet servlet-name='hello' servlet-class='test.HelloWorld'/>

          <servlet-mapping url-pattern='/hello.html' servlet-name='hello'/>

          在servlet-mapping中有個(gè)重要的參數(shù)case-sensitive 如果在windows上,最好配置成false,忽略大小寫,從而和windows的約定一致。

          Session的配置

          參見如下的配置語句:

          <session-config>

          <session-max>4096</session-max>

          <session-timeout>30</session-timeout>

          <enable-cookies>true</enable-cookies>

          <enable-url-rewriting>true</enable-url-rewriting>

          <file-store>WEB-INF/sessions</file-store>

          </session-config>

          session-max :最大 session數(shù)量

          session-timeout :session過期時(shí)間,以分鐘為單位。

          是否允許cookie :指session是否采用cookies。如果采用cookies,瀏覽器必須支持session才能使用,發(fā)布時(shí)建議改成false。enable-url-rewriting和enable-cookies一般配合使用。如果enable-cookies是false,enable-url-rewriting應(yīng)該設(shè)成true比較合適。

          file-store :該配置指示服務(wù)器是否把session作為文件存放在服務(wù)器上。如果把該項(xiàng)注釋掉,則在你的web-app目錄下的WEB-Inf/sessions目錄不保存序列化后的session對(duì)象。Session還有jdbc-store配置,對(duì)應(yīng)著把session通過jdbc永久保存在數(shù)據(jù)庫中。其實(shí)也就是會(huì)話變量的序列化后的保存和重新載入的物理實(shí)現(xiàn)。在這里session還支持了多服務(wù)器的設(shè)置問題,

          通過tcp-store參數(shù)設(shè)置。由于涉及到負(fù)載平衡的問題,在這里不詳細(xì)敘述,只簡(jiǎn)單寫一個(gè)例子:

          <http-server>

          <http id='a' port='80'/>

          <srun id='a' host='host-a' port='6802'/>

          <http id='b' port='80'/>

          <srun id='b' host='host-b' port='6802'/>

          <host id=''>

          <web-app id=''>

          <session-config>

          <tcp-store/>

          <always-load-session/>

          </session-config>

          </web-app>

          </host>

          </http-server>

          這個(gè)例子表示session是按照tcp ring的方式傳遞。

          temp-dir 的設(shè)置

          temp-dir指的是應(yīng)用的臨時(shí)目錄。也就是在javax.servlet.context.tempdir中用到的目錄。模認(rèn)是應(yīng)用目錄下的WEB-INF\tmp目錄。

          以上的設(shè)置都可以在<web-app>標(biāo)簽對(duì)中設(shè)置,控制某個(gè)web應(yīng)用的設(shè)置。

          2、打包成War發(fā)布

          以下是介紹對(duì)如何在resin下使用已經(jīng)打包成War的java Web應(yīng)用進(jìn)行發(fā)布。

          其實(shí)這個(gè)是最簡(jiǎn)單也是最清晰的良好方法。在j2ee中,所有的項(xiàng)目都打包成ear發(fā)布。其中,Web應(yīng)用打包成war,ejb應(yīng)用打包成jar。在resin中,這些都可以直接部署。這里我只對(duì)打包成war的Web應(yīng)用的部署做介紹。

          在resin.conf中,查找這個(gè):<war-dir id='webapps'/>。他表示war文件應(yīng)該被拷貝的路徑。這里指的是相對(duì)于resin的安裝路徑,如以上的設(shè)置表示d:\resin\webapps。只要重新啟動(dòng)Resin就可以了。Resin會(huì)把該war自動(dòng)解包到webapps目錄下。你可以在command控制臺(tái)或者stdout.log中看到類似于

          [2002-04-27 09:56:21.680] initializing application http://haitaiserver:8080/rwtest 的語句。這個(gè)表示該Web應(yīng)用是自動(dòng)安裝的。只要這個(gè)應(yīng)用是符合j2ee標(biāo)準(zhǔn)的Web應(yīng)用,應(yīng)該不會(huì)有問題。通過如上顯示的路徑就可以訪問到這個(gè)應(yīng)用。如果你到d:\resin\webapps\rwtest中瀏覽,你會(huì)看到Resin已經(jīng)為你生成了rwtest目錄,下面是META-INF和WEB-INF還有你自己的JSP\servlet 文件和目錄。是完全符合j2ee的結(jié)構(gòu)的。你可以在rwtest目錄下建立新的jsp\servlet,一樣可以被編譯和解析并運(yùn)行的。在實(shí)際操作中,可以使用Jbuilder 或者 WebSphere等Ide工具進(jìn)行集成調(diào)試和打包,非常的方便。

          使用Resin進(jìn)行java Web項(xiàng)目的開發(fā)和調(diào)試

          這里篇幅有限,不可能講太多,我只對(duì)實(shí)際中最有用的部分做介紹。

          Resin中如果定義了錯(cuò)誤頁,則出錯(cuò)后最常見的一大串Exception不會(huì)被看到,直接跳轉(zhuǎn)到錯(cuò)誤頁。所以建議開發(fā)中先不設(shè)置錯(cuò)誤頁。jsp錯(cuò)誤中最常見的就是Nullpoint Exception,其次是名稱的拼寫錯(cuò)誤。錯(cuò)誤也可以在Resin安裝目錄下的log目錄下的stderr.log中找到。通過對(duì)該log文件的分析可以看到很多有用的錯(cuò)誤信息。

          在調(diào)試jsp的時(shí)候,如果定義了compile為true,jsp先被翻譯成Servlet的java文件,再被編譯成class文件。可以在你自己的work目錄中找到該文件。java的名稱在Resin中是這樣子定義的:原先的jsp文件名前加下劃線,再加上_jsp這個(gè)字樣。所以在java 應(yīng)用中的命名不要以_jsp結(jié)尾,也不要出現(xiàn)中文名稱等字符;其實(shí)名稱以_jsp為開頭也是不合法的。

          關(guān)于java對(duì)多國(guó)語言的支持問題,在Resin中得到了很好的解決。以jsp為例,參考Resin自動(dòng)生成的java Servlet文件。只要在任何的jsp文件的最開始處增加:

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

          中文問題就解決了。察看生成的Servlet源文件片斷:

          response.setContentType("text/html;charset=gb2312");

          request.setCharacterEncoding("GB2312");

          以上為設(shè)置字符集

          private static byte []_jsp_string26;

          private static byte []_jsp_string27;

          _jsp_string26 = "\r\n</table>\r\n<table class=\"type\">\r\n<tr>\r\n <td>".getBytes("GB2312");

          _jsp_string27 = "\r\n</td><td>\r\n</tr>\r\n<!--\r\n<tr>\r\n<td>\r\".getBytes("GB2312");

          以上是對(duì)頁面的顯示的編碼。其中,getBytes(“gb2312”)是靜態(tài)編碼,這是Resin為了解決某些環(huán)境下還是不能正常顯示而設(shè)置的。在Resin的配置文件(/conf/resin.conf)中,可以通過設(shè)置<jsp precompile='true' static-encoding='false' recompile-on-error='true'/>中的static-encoding屬性為true或者false,來控制是否靜態(tài)編碼。其實(shí)在Resin容器的內(nèi)部,所有的字符都是按照iso-8859-1來處理的。iso-8859-1是一個(gè)大字符集,雖然中文的gb2312和8859在字的定義上有不同,但是編碼是包容了gb2312的。按照解決多國(guó)語言的方法,在純英文平臺(tái)上用iso-8859-1處理內(nèi)部編碼,而把字符的顯示推向客戶端的機(jī)器。所以這樣只要編碼是正確的,

          在頁面上顯示中文就不存在問題。Tomcat3.2不方便的地方是Tomcat對(duì)數(shù)據(jù)庫的操作中文支持不好,需要手動(dòng)在java Bean或者Servlet中硬編碼。通過測(cè)試,在Resin中完全沒有這個(gè)問題。Tomcat4.0解決了這個(gè)問題。不過個(gè)人習(xí)慣來講還是覺得resin在配置方面方便一些。

          在Resin中可以自動(dòng)解決引入的jar。這個(gè)在使用特殊的類或者第三方提供的開發(fā)包非常有用。方法非常簡(jiǎn)單:只要把該jar或者是zip拷貝到Resin安裝目錄下的lib目錄下面,重新啟動(dòng)Resin,就可以了。如db2用到的db2java.zip文件,只要輕松拷貝到d:\resin\lib中就可以了。

          Resin提供了對(duì)Jbuilder的集成調(diào)試。可以到:

          http://www.caucho.com/projects/jbuilder/resin-jbuilder.jar免費(fèi)下載到resin的jbuilder的ide擴(kuò)展包。然后,把該包該名成:resin-jbuilder.jar,拷貝到j(luò)builder6\lib\ext目錄下。然后,把Resin2.1解包安裝在jbuilder6\resin-2.1目錄下,就可以了。打開任何的War項(xiàng)目,在project上點(diǎn)右鍵,選擇properties,選擇Servers標(biāo)簽。在原來的選擇框上,就可以看到多了一項(xiàng)Resin2.1。這樣子就可以象原來用tomcat一樣調(diào)試jsp\servlet了,而且比Tomcat更方便。見圖2:

          圖2

          調(diào)試方法和用Tomcat調(diào)試一樣。

          其他問題

          使用Resin可以和apache結(jié)合使用。也就是利用apache做http服務(wù)器,而Resin做srun服務(wù)器。可以參考resin\conf\samples目錄下的apache.conf。主要就是把 app-dir 設(shè)成 /usr/local/apache/htdocs(也就是apache的root)。同時(shí)在apache 中的http.conf也做了相應(yīng)的設(shè)置。Resin還提供了對(duì)該過程的自動(dòng)安裝程式,運(yùn)行resin\bin\setup,你可以在彈處的對(duì)話框中選擇apache,這樣子就可以了。只要你曾經(jīng)安裝過apache,resin可以自己找到httpd.conf文件所在的路徑。

          使用命令行方式啟動(dòng)Resin,如果改動(dòng)了Resin.conf,Resin會(huì)自己重新啟動(dòng)適應(yīng)新的配置。這個(gè)很適合初期安裝時(shí)使用。

          Resin對(duì)數(shù)據(jù)庫緩沖池的支持很好。在這里,它提供了DBPool對(duì)緩沖池做了封裝。實(shí)際使用時(shí),只要在resin.conf這樣配置:

          <dbpool.sql>

          <id>ORCL</id>

          <driver>oracle.jdbc.driver.OracleDriver</driver>

          <url>jdbc:oracle:thin:@localhost:1521:SMTH</url>

          <!-- <url>jdbc:oracle:oci8:@SMTH</url> -->

          <user>scott</user>

          <password>tiger</password>

          <max-connections>5</max-connections>

          </dbpool.sql>

          然后,在你的jsp或者servlet中就可以這樣子使用了:

          先導(dǎo)入 com.caucho.sql.*包,然后如下直接得到連接:

          Connection conn = DBPool.getPool("ORCL").getConnection();

          個(gè)人建議不要如上使用連接池,還是按照ejb的方法用從Context中直接找到的DataSource對(duì)象中得到連接通用性比較好。代碼也很簡(jiǎn)單:

          Context ctx = new InitialContext();

          DataSource ds = (DataSource)ctx.lookup(“jdbc/EmployeeDB”);

          Connection conn = ds.getConnection();

          在Resin中如下配置jdbc就可以了:

          <resource-ref>

          <res-ref-name> jdbc/EmployeeDB</res-ref-name>

          <res-type>javax.sql.DataSource</res-type>

          <init-param driver-name="com.caucho.jdbc.mysql.Driver"/>

          <init-param url="jdbc:mysql_caucho://localhost:3306/test"/>

          <init-param user="name"/>

          <init-param password="password"/>

          <init-param max-connections="20"/>

          <init-param max-idle-time="30"/>

          </resource-ref>

          用Resin Web Server開發(fā)還是比較愉快的。只是沒有像Weblogic 或者WebSphere那樣子提供現(xiàn)成的管理控制臺(tái)而已。但是從穩(wěn)定性和方便性來講,Resin個(gè)人認(rèn)為比Tomcat要好很多。況且Resin還有提供了resin-cmp 和 resin-ejb,功能更強(qiáng)大。

          posted @ 2005-12-15 13:22 kelven 閱讀(2085) | 評(píng)論 (0)編輯 收藏
          主站蜘蛛池模板: 荃湾区| 凌海市| 城口县| 峡江县| 腾冲县| 龙井市| 宜章县| 兴业县| 惠州市| 开封市| 富阳市| 克拉玛依市| 吉安市| 图片| 彰化县| 中山市| 诏安县| 莫力| 武夷山市| 曲水县| 德清县| 湄潭县| 朝阳区| 济南市| 老河口市| 肇州县| 华宁县| 土默特右旗| 乌审旗| 淮安市| 莱西市| 台山市| 阳西县| 中江县| 嘉禾县| 象山县| 玉田县| 陕西省| 宁陵县| 蛟河市| 卢龙县|