Windows XP的關機是由Shutdown.exe程序來控制的,位于Windows\System32文件夾中。如果想讓Windows 2000也實現(xiàn)同樣的效果,可以把Shutdown.exe復制到系統(tǒng)目錄下。
比如你的電腦要在22:00關機,可以選擇“開始→運行”,輸入“at 22:00 Shutdown -s”,這樣,到了22點電腦就會出現(xiàn)“系統(tǒng)關機”對話框,默認有30秒鐘的倒計時并提示你保存工作。如果你想以倒計時的方式關機,可以輸入“Shutdown.exe -s -t 3600”,這里表示60分鐘后自動關機,“3600”代表60分鐘。
設置好自動關機后,如果想取消的話,可以在運行中輸入“shutdown -a”。另外輸入“shutdown -i”,則可以打開設置自動關機對話框,對自動關機進行設置。
Shutdown.exe的參數(shù),每個都具有特定的用途,執(zhí)行每一個都會產(chǎn)生不同的效果,比如“-s”就表示關閉本地計算機,“-a”表示取消關機操作,下面列出了更多參數(shù),大家可以在Shutdown.exe中按需使用。
? -f:強行關閉應用程序
-m:\\計算機名:控制遠程計算機
-i:顯示圖形用戶界面,但必須是Shutdown的第一個選項
-l:注銷當前用戶
-r:關機并重啟
-t:時間:設置關機倒計時
-c:“消息內(nèi)容”:輸入關機對話框中的消息內(nèi)容(不能超127個字符)
posted @
2006-08-07 14:18 kelven 閱讀(425) |
評論 (0) |
編輯 收藏
http://popkart.tiancity.com/homepage/
posted @
2006-07-10 13:18 kelven 閱讀(346) |
評論 (2) |
編輯 收藏
1.將數(shù)據(jù)庫驅動程序的JAR文件放在Tomcat的?common/lib?中;
2.在server.xml中設置數(shù)據(jù)源,以MySQL數(shù)據(jù)庫為例,如下:
在<GlobalNamingResources>?</GlobalNamingResources>節(jié)點中加入,
??????<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ù)庫驅動;
????????????maxIdle,最大空閑數(shù),數(shù)據(jù)庫連接的最大空閑時間。超過空閑時間,數(shù)據(jù)庫連
?????????????????????接將被標記為不可用,然后被釋放。設為0表示無限制。
????????????MaxActive,連接池的最大數(shù)據(jù)庫連接數(shù)。設為0表示無限制。
????????????maxWait?,最大建立連接等待時間。如果超過此時間將接到異常。設為-1表示
?????????????????????無限制。
3.在你的web應用程序的web.xml中設置數(shù)據(jù)源參考,如下:
??在<web-app></web-app>節(jié)點中加入,
??<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é)點說明:?description,描述信息;
???????????????res-ref-name,參考數(shù)據(jù)源名字,同上一步的屬性name;
???????????????res-type,資源類型,”javax.sql.DataSource”;
???????????????res-auth,”Container”;
???????????????res-sharing-scope,”Shareable”;
4.在web應用程序的context.xml中設置數(shù)據(jù)源鏈接,如下:
??在<Context></Context>節(jié)點中加入,
??<ResourceLink
???name="jdbc/DBPool"?
???type="javax.sql.DataSource"?
???global="jdbc/DBPool"/>
???屬性說明:name,同第2步和第3步的屬性name值,和子節(jié)點res-ref-name值;
?????????????type,同樣取”javax.sql.DataSource”;
?????????????global,同name值。
?
至此,設置完成,下面是如何使用數(shù)據(jù)庫連接池。
1.建立一個連接池類,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(),獲得一個Connection對象,就可以進行數(shù)據(jù)庫操作,最后別忘了對Connection對象調(diào)用close()方法,注意:這里不會關閉這個Connection,而是將這個Connection放回數(shù)據(jù)庫連接池。
posted @
2006-06-14 11:17 kelven 閱讀(929) |
評論 (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等就會出現(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(文件的真實路徑);
也可以
<%
if (request.getParameter("fileUrl") != null)
{
String strFileUrl = request.getParameter("fileUrl");
//獲取文件名(DealFile是自己寫的一個處理文件的一個類)
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 閱讀(1465) |
評論 (0) |
編輯 收藏
[http://www.javaalmanac.com] - Java開發(fā)者年鑒一書的在線版本. 要想快速查到某種Java技巧的用法及示例代碼, 這是一個不錯的去處.
[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 維護的Java技術文章網(wǎng)站.
[http://www.java.net] - Sun公司維護的一個Java社區(qū)網(wǎng)站.
[http://www.builder.com] - Cnet的Builder.com網(wǎng)站 - 所有的技術文章, 以Java為主.
[http://www.ibm.com/developerworks/java] - IBM的Developerworks技術網(wǎng)站; 這是其中的Java技術主頁.
[http://www.javaworld.com] - 最早的一個Java站點. 每周更新Java技術文章.
[http://www.devx.com/java] - DevX維護的一個Java技術文章網(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的一個Java桌面技術社區(qū)網(wǎng)站.
[http://www.theserverside.com] - 這是一個討論所有Java服務器端技術的網(wǎng)站.
[http://www.jars.com] - 提供Java評論服務. 包括各種framework和應用程序.
[http://www.jguru.com] - 一個非常棒的采用Q&A形式的Java技術資源社區(qū).
[http://www.javaranch.com] - 一個論壇,得到Java問題答案的地方,初學者的好去處。
[http://www.ibiblio.org/javafaq/javafaq.html] - comp.lang.java的FAQ站點 - 收集了來自comp.lang.java新聞組的問題和答案的分類目錄.
http://java.sun.com/docs/books/tutorial/] - 來自SUN公司的官方Java指南 - 對于了解幾乎所有的java技術特性非常有幫助.
http://www.javablogs.com] - 互聯(lián)網(wǎng)上最活躍的一個Java Blog網(wǎng)站.
http://java.about.com/] - 來自About.com的Java新聞和技術文章網(wǎng)站.
posted @
2006-04-05 14:03 kelven 閱讀(411) |
評論 (0) |
編輯 收藏
http://www.021123.com/
posted @
2006-03-24 14:59 kelven 閱讀(364) |
評論 (0) |
編輯 收藏
1.安裝JDK1.4和jakarta-tomcat-4.1.27.exe。
? 路徑分別為 D:\jdk1.4 和 D:\Tomcat 4.1。
? 安裝Tomcat 4時,會要求填寫web訪問端口、用戶名、密碼等信息。
? web訪問端口默認為8080,用戶名默認為admin,密碼自己填寫。
? 啟動Tomcat4,訪問
http://127.0.0.1:8080/ ,就能看到Apache Tomcat/4.1.27的歡迎訪問頁面,頁面上有一些相關介紹信息等。
2.設置數(shù)據(jù)庫的驅動
? 以Oracle的JDBC驅動設置為例:
? Oracle8i的驅動在\oracle\ora81\jdbc\lib\目錄下。名字為classes12.zip。
? Oracle9i的驅動在\oracle9i\jdbc\lib\目錄下,名字為ojdbc14.jar。
? 將這個文件copy到D:\Tomcat 4.1\common\lib 下。
? 注意,如果使用Oracle8i 的驅動,則需要在D:\Tomcat 4.1\common\lib 目錄下將classes12.zip更名為classes12.jar,因為Tomcat4不認識zip的后綴名。
3.設置Web應用。
? 新建一個文件夾,名字為mypool,位置為D:\mypool。這個D:\mypool路徑將是web應用的主目錄。
? 打開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"/>
?
? 完成后,成為這個樣子:
? ? <!-- 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 文件。
? 配置完成后,重新啟動Tomcat,就可以這樣訪問這個web應用了:
http://127.0.0.1:8080/mypool/ 。
4.設置Tomcat的連接池數(shù)據(jù)源。
? 訪問
http://127.0.0.1:8080/admin 頁面,用剛才安裝 Tomcat4 時填寫的用戶名和密碼登錄。
? 登錄成功后,會出現(xiàn)Tomcat 的web應用管理界面(Tomcat Web Server Administration Tool)。
? 然后在左邊的目錄樹點擊“Data Sources”項,右邊可以看到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: ?可用默認值
? Max. Idle Connections: ? ?可用默認值
? Max. Wait for Connection: 可用默認值
? Validation Query: 可不填寫。
? 然后,按下“save”按鈕保存。
? 再按下“Commit Changes”按鈕將配置更改提交完成。
? 此時如果看看 Tomcat4 的窗口,會發(fā)現(xiàn)在最下面有一行文字提示: ?
? ?Debugging -- changes saved to conf/server.xml
?
? 此時 D:\Tomcat 4.1\conf\server.xml 文件的配置已經(jīng)更改保存完畢。
? 如果此時打開D:\Tomcat 4.1\conf\server.xml 文件,會發(fā)現(xiàn)server.xml 文件的內(nèi)容改變了很多。
? 一些注釋文字都被去掉了。
? 還會發(fā)現(xiàn)上面第三步配置Web應用的如下文字
? ?
? ?<!-- Tomcat Root Context -->
? ? ?<!--
? ? ? ? ? <Context path="" docBase="ROOT" debug="0"/>
? ? ? -->
? ?
? ? ?<Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>
? 則被自動修改成了這樣的:
? ? ?<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>
? ?
? ?好了,至此位置,對Oracle的應用連接池已經(jīng)配置完畢。
? ?
? ?仔細對照server.xml 文件,會發(fā)現(xiàn)剛才所配置的連接池信息被放置在<GlobalNamingResources>標簽中,這意味著這個信息是可以被全局引用的,大致是如下的樣子:
? ? <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.設置web應用對連接池的引用。
?
? 打開D:\Tomcat 4.1\conf\server.xml 文件,找到剛才配置的web應用文字,由于剛才server.xml 文件被自動修改過,并去掉了很多注釋內(nèi)容,所以剛才配置的web應用
? ?<Context path="/mypool" docBase="D:\mypool" privileged="true" reloadable="true"/>
? 被自動修改成了這樣的:
? ? ?<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應用對全局連接池的引用說明,如下文字:
? ? <ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/> ?
? 設置完成后,web應用的描述大致如下面的樣子:
? ? <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 文件。
? 注意,設置這個連接池的引用說明是非常重要的一步。
? 一些朋友在Tomcat4中配置連接池失敗的原因大都歸咎與此。還有網(wǎng)上一些文章說這是一個Tomcat4的一個Bug。
? 我用了整整兩天兩夜的時間才明白其中的奧秘。[:(]
? 當時離瘋掉只查一點點。因為畢竟配置一個連接池是很簡單的。[:(]
6.一般情況下,到此,連接池的設置就完成了。
? 然后需要重新啟動Tomcat,這樣就可以使用連接池來工作了。
? 但是,看到很多文章上說,還需要設置一下web.xml才能應用。我沒有設置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.一個簡單的應用示例。
? 寫了一個簡單的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");
? ? ?
? ? ? ?//獲取連接池對象 ? ? ? ? ? ? ? ? ?
? ? ? ?Object obj = (Object) ctx.lookup("jdbc/myOrcl"); ?
? ? ?
? ? ? //類型轉換
? ? ? ?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(); ? ? ?//關閉ResultSet ?
? ? ? ?stmt.close(); ? ?//關閉Statement
? ? ? ?conn.close(); ? ?//將連接放回到連接池
? ? ?}
? ? ?catch(Exception ex)
? ? ?{ ? ?
? ? ? ? ?ex.printStackTrace();
? ? ? ? ?throw new SQLException("cannot get Connection pool."+ex);
? ? ?}
%>
<hr>
--------------------
?
記住,用完后的數(shù)據(jù)庫連接要釋放。
不然當打開的連接過多或惡意刷屏,連接池的連接數(shù)目會被用完。
當連接池的連接數(shù)目用完后,再訪問jsp頁面時,會在頁面出現(xiàn)如下的錯誤信息,報告連接池的連接被耗盡:
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的驅動程序classes12.jar文件copy到目錄 D:\Tomcat 5.0\common\lib\ 下。
Tomcat5的連接池設置和Tomcat4 的差不多,僅說明一下不同點或需要特別注意的地方。
1. Tomcat5啟動后,訪問
http://127.0.0.1:8080/admin 頁面,當設置完Tomcat的連接池數(shù)據(jù)源后,打開D:\Tomcat 5.0\conf\server.xml 文件,會看到配置的連接池相關信息大致如下樣子:
<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.設置web應用對連接池的引用。
?打開D:\Tomcat 5.0\conf\Catalina\localhost\ 目錄,找到和web應用同名的xml文件(mypool.xml),打開這個文件,
修該其<Context></Context>的描述信息,添加如下行:
? ?<ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/> ?
使mypool.xml文件的內(nèi)容看起來大致這個:
?
? ?<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服務,使之生效。
3.JSP頁面測試文件的寫法也是一樣的,不再贅述。
4.一些補充:
? 如果web應用沒有配置對連接池的引用,即沒有配置<ResourceLink>,則會在訪問jsp頁面時出現(xiàn)如下錯誤:
? ? NameNotFoundException: Name jdbc is not bound in this Context
? 如果缺少Oracle的JDBC驅動,則會在訪問jsp頁面時出現(xiàn)如下錯誤:
? ? java.sql.SQLException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
posted @
2006-03-22 11:30 kelven 閱讀(1643) |
評論 (1) |
編輯 收藏
摘要: 首先XMLHttpRequest不是web標準,而是大部分主流瀏覽器都支持的一種擴展技術。它被認為是一種異步調(diào)用的實現(xiàn)技術,因為它本來是被設計在后臺取數(shù)據(jù)用的。在IE中它被作為一個ActiveX控件提供,而其他一些瀏覽器都提供一些本地API以供調(diào)用。下面是一些關于XMLHttpRequest的基本方法:
1、獲...
閱讀全文
posted @
2006-02-26 13:42 kelven 閱讀(397) |
評論 (0) |
編輯 收藏
1、女人永遠也不知道男人為什么要學會堅強?
因為他們自己知道.他們雖然外表堅強.但內(nèi)心很脆弱.他們永遠想讓自己身邊的她覺得自己是最棒的.
2、女人永遠也不知道男人為什么不會輕易掉眼淚?
因為他們自己知道.他們不是不會掉眼淚.只是他明白.一但眼淚掉下來了.這段感情也就結 束了.
3、女人永遠也不知道男人為什么每次在心煩的時候那么喜歡抽煙?
因為他們自己知道.只有在煙霧中才能憶起他們過去美好的時光來尋求一點心里的平衡.
4、女人永遠也不知道男人為什么要在分手以后還會對她噓寒問暖?
因為他們自己知道.他們并不是想跟你做朋友.只是想挽回這段曾經(jīng)屬于他的感情.
5、女人永遠也不知道男人為什么每次在聽到她被欺負了會顯得那么發(fā)狂?
因為他們自己知道.哪怕這次架打輸了.躺下了.他也會覺得高興.因為他們寧愿自己受到傷害.也不愿意看到你哭泣.
6、女人永遠也不知道男人為什么在分手以后會夜夜買醉?
因為他們知道.如果今晚不麻醉自己.那么今晚只能在思念中度過.
7. 女人永遠也不知道男人為什么每次出門會出手那么大方?
因為他們知道.他們寧愿自己一個人省吃檢用.也不愿意你看到你被別人看不起.
8.女人永遠也不知道男人為什么會那么愛對她發(fā)脾氣?
因為他們自己知道.對她發(fā)脾氣并不是不愛她.只是希望她在以后的路上不被別人所欺騙.
9.女人永遠也不知道男人為什么會那么在意你以前的男朋友?
因為他們自己知道.并不是他們不自信.只是他們害怕有一天你會離他而去.
10. 女人永遠也不知道男人為什么看到你為別人寫的日記之后還會那么鎮(zhèn)靜的聽你解釋?
因為他們自己知道.自己并不是不想發(fā)火.只是希望能從你的口中得知到底是他重要還是別人重要?
11、女人永遠也不知道男人為什么不對她說我愛你⒊個字? 閫
因為他們知道.并不是不想說.只是他們自己明白.⒈萬句我愛你用在身上也不夠.
12. 女人永遠也不知道男人為什么會跑到這里來發(fā)貼?
因為他們知道.希望有一天這貼能被你看見.以此來證明你對他的不理解.只有他自己心里明 白.這貼要是沒人回的話.很快便會消失了.你更不知道一個男人的幸福生活來之不易,那是 他將每一個看過的貼子都頂了的緣故。
(如果你不能為你心愛的女人穿上嫁衣,請停下你解她衣扣的手)
愿天下有情人終成眷屬.當你們看到這貼時心里最想的那個人也就是你們最愛的那個人!
posted @
2006-02-25 11:50 kelven 閱讀(390) |
評論 (0) |
編輯 收藏
在
Java文件中,連接SQLserver數(shù)據(jù)庫時,需要一個連接數(shù)據(jù)庫的
驅動文件。
在你安裝
JDK的路徑下的lib文件夾里拷貝一個文件jtds-0.6.jar,并且在環(huán)境變量里設置classpath,例如:你的jdk裝在c:\jdk,那么環(huán)境變量classpath的路徑應設為c:\jdk\lib\jtds-0.6.jar。(環(huán)境變量知道這么設吧?在我的電腦的屬性,高級里。多個路徑之間用分號隔開。)
這里提供SQLserver連接驅動文件jtds-0.6.jar,
下載解壓后拷貝到jdk路徑下的lib文件夾里。
具體在文件中的應用:
import java.sql.*;
String url="
JDBC:jtds:sqlserver://localhost:1433/‘數(shù)據(jù)庫名′";
String driver="net.sourceforge.jtds.jdbc.Driver";
Class.forName(driver);
Connection conn=DriverManager.getConnection(url,"用戶名","密碼");
就可以連接到你的數(shù)據(jù)庫了。
1433是SQLserver默認的端口號,如果要連接到其他機器上,要將localhost改為其他機器的IP地址,如192.168.0.101。
其中數(shù)據(jù)庫名是你所新建的數(shù)據(jù)庫的名稱,用戶名和密碼是你登陸SQLserver是的用戶名和密碼。
有的人安裝SQLserver時用的是
Windows身份驗證,那么用戶名和密碼都為空。如果不能登陸,或者要用SQL身份驗證的話,需要修改
注冊表。在運行里打開regedit,然后查找loginmode(具體位置:hkey_local_machine\software\microsoft\
MSSQLserver\
mssqlserver\),僅用Windows身份驗證的值為1,混合身份驗證的值為2。只要將1改為2,就可以用SQL身份驗證了,用戶名為‘sa',密碼為空。
posted @
2006-02-17 11:59 kelven 閱讀(591) |
評論 (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) |
評論 (1) |
編輯 收藏
諾基亞手機限制碼-1234
保密碼 -12345
*#06#:看手機序列號。
*#2820# :看蘭牙版本信息,需要先將藍牙設置為打開狀態(tài)。
*#92702689# :這個也是大家常用的一條命令,用來查看系統(tǒng)信息。
*#335738#:刪除Email, GPRS, MMS的設置信息
*#7370925538#:刪除電子錢包的內(nèi)容和 密碼 ,這個比較實用,要是忘記了,你既可以用這個命令,也可以 恢復出廠 設置,不過這個更實用。
*#7370#:軟件格式化。刪除存儲空間的內(nèi)容。
*#7780#:一個 恢復出廠 設置的快捷操作。
*#7220#:恢復一些功能
*#92702689#LIFE:查系統(tǒng)版本
*#0000#:查系統(tǒng)版本
以上是一些NOKIA機型的查詢指令,不一定適合所有的NOKIA機型,但是基本上都可以使用。
posted @
2006-02-09 12:35 kelven 閱讀(1065) |
評論 (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之后的補丁才能正常使用)
由于SQL Server Service Packs按照累積形式進行組織,因此,SP3包含了先期發(fā)布的 Service Pack 1(SP1)與 Service Pack 2(SP2)中的所有修正程序,它既可應用于全新安裝的系統(tǒng),也可在已經(jīng)安裝SP1或SP2的系統(tǒng)上加以應用。
優(yōu)勢
除提供最新更新內(nèi)容與修正程序外,SQL Server 2000 SP3還能夠為您提供以下優(yōu)勢:
可維護性
在可維護性方面的改進包括:
得以增強的錯誤報告功能。通過適當配置,SQL Server能夠將關鍵性錯誤信息自動發(fā)送至Microsoft公司。
得以改進的多服務器管理功能。
用于實現(xiàn)監(jiān)控的新增API。數(shù)據(jù)庫管理員(DBA)或第三方工具可以對出現(xiàn)問題的進程加以診斷
性能
SP3引入了針對QLogic’s VI-enabled SANblade QLA2350 Fibre Channel控制器的支持能力。通過在SQL Server網(wǎng)絡互連層上應用虛擬接口(Virtual Interface)技術,在服務器和客戶端系統(tǒng)上針對每條消息所消耗的CPU資源得以顯著降低,同時,系統(tǒng)整體性能得到了相應提高。
安全性
最新提供的安全特性與工具包括:
針對SQL Server 2000在線圖書的內(nèi)容更新。SQL Server 2000在線圖書為廣大客戶提供了用以進一步增強應用環(huán)境安全性所需的更多指導信息。
安全修補程序。SP3針對用戶反映或在持續(xù)測試過程中發(fā)現(xiàn)的各種已知薄弱環(huán)節(jié)提供了相應的修復程序。
SQL Server Agent增強。SP3允許您在不具備管理員權限的情況下運行SQL Server Agent。
posted @
2006-01-17 01:37 kelven 閱讀(3223) |
評論 (1) |
編輯 收藏
現(xiàn)在多數(shù)host裝的還是MySQL 4.0x 版本以下,如果升級到了4.1x 或者移動到使用4.1x 的主機上,估計會遇到一些問題。我在這上面遇到了兩個問題。
一是數(shù)據(jù)導入。在phpMyAdmin內(nèi)導入后,發(fā)現(xiàn)中文變成了亂碼。搜索學習后,了解到需要設置數(shù)據(jù)庫的collation (校勘),如果你的數(shù)據(jù)庫是utf-8的,設置為utf8_general_ci就可以了。
二是,即使正確導入了,在phpMyAdmin里也能正確顯示,但頁面上顯示的文章內(nèi)容都是“???”,而模板里面的漢字都能正常顯示。這讓我頭疼了很久。搜索到Windix’s Weblog上有對此的說明:
“從MySQL 4.1開始引入的多語言支持確實很棒,而且一些特性已經(jīng)超過了其他的數(shù)據(jù)庫系統(tǒng)。不過我在測試過程中發(fā)現(xiàn)使用適用于MySQL 4.1之前的PHP語句操作MySQL數(shù)據(jù)庫會造成亂碼,即使是設置過了表字符集也是如此。我讀了一下新的MySQL在線手冊中第十章‘Character Set Support’后終于找到了解決方法并測試通過。MySQL 4.1的字符集支持(Character Set Support)有兩個方面:字符集(Character set)和排序方式(Collation)。對于字符集的支持細化到四個層次: 服務器(server),數(shù)據(jù)庫(database),數(shù)據(jù)表(table)和連接(connection)。當我們按照原來的方式通過PHP存取MySQL數(shù)據(jù)庫時,就算設置了表的默認字符集為utf8并且通過UTF-8編碼發(fā)送查詢,你會發(fā)現(xiàn)存入數(shù)據(jù)庫的仍然是亂碼。問題就出在這個connection連接層上。解決方法是在發(fā)送查詢前執(zhí)行一下下面這句:
SET NAMES ‘utf8′;”
但是我依舊不知道,如何,在何處讓WordPress運行這個SQL語句。后來在阿修的部落格上查到辦法:
“為著解決這個問題必須去修改wp-includes/wp-db.php內(nèi)的資料連線設定。詳細的修改方式是這樣的:
$this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
//加上下面這行
$this->query(”SET NAMES ‘utf8′”);”
這樣子終于能正常顯示中文的WordPress了。雖然后來還是沒用,但是覺得這個經(jīng)驗會對別人有用。記得有人用email和我討論過這樣子的中文顯示問題,但是我那時哪里知道問題出在MySQL 4.1x上。
還有,4.1x的數(shù)據(jù)庫不向下兼容,所以升級的時候要三思啊。
posted @
2006-01-01 08:02 kelven 閱讀(457) |
評論 (0) |
編輯 收藏
(此為個人學習心得,以后會逐漸完善)
(本例使用的數(shù)據(jù)庫是:MySql)
1.當你用流讀取文件或者從數(shù)據(jù)庫讀取數(shù)據(jù)時,取得的字符串的編碼要與頁面的一致,否則會亂碼例如:

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("讀取文件出錯");
e.printStackTrace();
}
return templateContent;
}
}(假設頁面的編碼為UTF-8)
調(diào)用以上函數(shù)只需要傳遞一個完整的文件路徑就可以以字符串的形式讀取文件.
......
String str=FileOperation.readFile("d:\11.txt");
......
request.setAttribute("str",str);
......
則頁面用requset.getAttribute("str")取得的中文字符將會是亂碼.
解決方案:
將上段取中文字符串的代碼改成:




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





request.setAttribute("str",str);




posted @
2005-12-28 16:16 kelven 閱讀(538) |
評論 (0) |
編輯 收藏
Resin的確是比較狠的應用服務器,運行速度快,配置又簡單!這里介紹一下Resin2.1.12的數(shù)據(jù)庫連接池配置方法。
在%ResinHome%/conf/resin.conf中找到
<!--
- Sample database pool configuration
- The JDBC name is java:comp/env/jdbc/test
-->
在其下加入相應的信息可以連接到不同的數(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>
將相應的驅動放到%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-驅動,然后將其lib下的三個jar文件放到%Resin/lib/%下。
posted @
2005-12-16 12:58 kelven 閱讀(593) |
評論 (0) |
編輯 收藏
Servlet的演變:在常規(guī)的 JSP,Servlet,JavaBean三層結構中,JSP實現(xiàn)View的功能,Servlet實現(xiàn)Controller的功能,JavaBean實現(xiàn)Model的實現(xiàn)。
在Struts中,將常規(guī)情況下的Servlet拆分與ActionServlet、FormBean、ActionBean三個部分。ActionServlet配合Struts-config.xml,專職完成頁面導航,而不再負責具體的數(shù)據(jù)獲取與相應邏輯,這兩部分功能由FormBean和ActionBean來完成。
Struts的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有頁面的導航定義。對于大型的WEB項目,通過此配置文件即可迅速把握其脈絡,這不管是對于前期的開發(fā),還是后期的維護或升級都是大有裨益的。掌握Struts-config.xml是掌握Struts的關鍵所在。
<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>
每一個FormBean 都必須繼承ActionForm類,F(xiàn)ormBean是對頁面請求的封裝。即把HTTP request 封裝在一個對象中,需要說明的一點就是多個HTTP request可以共用一個FormBean,便于維護和重用。
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)相應的邏輯處理后,調(diào)用業(yè)務方法完成相應業(yè)務要求。
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)缺點
優(yōu)點:Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟件,這是它的一大優(yōu)點。使開發(fā)者能更深入的了解其內(nèi)部實現(xiàn)機制。
除此之外,
Struts的優(yōu)點主要集中體現(xiàn)在兩個方面:Taglib和頁面導航。Taglib是Struts的標記庫,靈活動用,能大大提高開發(fā)效率。另外,就目前國內(nèi)的JSP開發(fā)者而言,除了使用JSP自帶的常用標記外,很少開發(fā)自己的標記,或許Struts是一個很好的起點。
關于頁面導航,我認為那將是今后的一個發(fā)展方向,事實上,這樣做,使系統(tǒng)的脈絡更加清晰。通過一個配置文件,即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護有著莫大的好處。尤其是當另一批開發(fā)者接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。
缺點:Taglib是Struts的一大優(yōu)勢,但對于初學者而言,卻需要一個持續(xù)學習的過程,甚至還會打亂你網(wǎng)頁編寫的習慣,但是,當你習慣了它時,你會覺得它真的很棒。
Struts將MVC的Controller一分為三,在獲得結構更加清晰的同時,也增加了系統(tǒng)的復雜度。
Struts從產(chǎn)生到現(xiàn)在還不到半年,但已逐步越來越多運用于商業(yè)軟件。雖然它現(xiàn)在還有不少缺點,但它是一種非常優(yōu)秀的J2EE MVC實現(xiàn)方式,如果你的系統(tǒng)準備采用J2EE MVC架構,那么,不妨考慮一下Struts。
Struts實施經(jīng)驗:
1)、基于Struts架構的項目開發(fā),首先需要有一個很好的整體規(guī)劃,整個系統(tǒng)中包括哪幾個模塊,每個模塊各需要多少FormBean和ActionBean等,而且最好有專人負責Struts-config.xml的管理。開發(fā)基于Struts的項目的難點在于配置管理,尤其是對Struts-config.xml的管理。
2)、如果你的項目非常緊,并且項目組中又沒有富有經(jīng)驗的Struts開發(fā)人員,建議不要冒然采用Struts。Struts的掌握需要一個過程,對于一個熟練的JSP程序員,自學大概需要半個月左右的時間。如果結合titls,則需要更長的時間。
3)、如果你在網(wǎng)頁中大量運用taglib,那么你的美工將做出部分犧牲。當你結合Tiles,功能增強的同時,這種犧牲尤為明顯。當然,你對功能和美觀的取舍由你自己決定。
4)、Taglib是一個好東西,但靈活運用它卻需要一個過程,如果你不想在Taglib上花太多的時間,那么只需理解與FORM有關的幾個標記,其它的標記就放著吧,以后再看,先去研究ActionServlet和Struts-config.xml,你會覺得很有成就感。
5)、Struts是否只適合于大型項目呢?No!Struts適合于各種大小的項目,當然,對于大型項目,它所體現(xiàn)出來的優(yōu)勢更加明顯。
http://www.chinaitlab.com/www/news/article_show.asp?id=33092
posted @
2005-12-15 13:33 kelven 閱讀(839) |
評論 (0) |
編輯 收藏
Resin使用簡介
使用Resin開發(fā)Java Web項目時,需要建立自己的WebApp。這里不介紹Resin Cmp/Ejb的開發(fā)和使用,只介紹用Resin開發(fā)普通的jsp\java servlet項目。在這里還要談到resin.conf的配置。Resin中的應用可以有2種方式發(fā)布:一是在Resin的目錄下發(fā)布;二是打包成War發(fā)布。
1、在Resin的目錄下發(fā)布
在resin.conf中查找<web-app>標簽,該標簽表示一個web應用。
標簽中,id屬性表示該應用的Web路徑。如<web-app id=’/test’>,表示該應用在Web上訪問的時候應該用http://hostname/test/來訪問。app-dir屬性表示該應用的實際路徑。如<app-dir>d:\resin\doc\test</app-dir>表示該應用在d:\resin\doc\test目錄下面。默認值為根下面的和id同名的目錄。Resin可以配置3種error-page:404錯誤也就是文件找不到錯誤頁;Exception違例頁;不能連接java引擎頁。他們分別可以這樣子設置。
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引擎錯誤頁
該頁設置和應用無關,屬于服務器的設置。
<http-server>
<error-page exception-type='connection'
location='/missing_file.html'/>
</http-server>
classpath的設置
參見下面的語句:
<classpath id='WEB-INF/classes' source='WEB-INF/src' compile='true'/>
id參數(shù)的值表示classpath中編譯后的classpath的存放路徑;source參數(shù)的值表示classpath中java源代碼的存放路徑;compile中的值可能是true或者false,表示是否由Resin的srun自動編譯java源代碼。Classpath的設置一般和javaBean或者Servlet的使用有關。id的值表示javaBean的編譯好的包存放的根,source的值表示javaBean的java源代碼存放的根。Servlet相同。
Servlet的設置
參見下面的語句:
<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,其他不變,那么只要在訪問時遇到*.jss的文件就和原來遇到*.jsp一樣處理。通過這個可以指定解析的引擎,如以下的配置:
<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中有個重要的參數(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過期時間,以分鐘為單位。
是否允許cookie :指session是否采用cookies。如果采用cookies,瀏覽器必須支持session才能使用,發(fā)布時建議改成false。enable-url-rewriting和enable-cookies一般配合使用。如果enable-cookies是false,enable-url-rewriting應該設成true比較合適。
file-store :該配置指示服務器是否把session作為文件存放在服務器上。如果把該項注釋掉,則在你的web-app目錄下的WEB-Inf/sessions目錄不保存序列化后的session對象。Session還有jdbc-store配置,對應著把session通過jdbc永久保存在數(shù)據(jù)庫中。其實也就是會話變量的序列化后的保存和重新載入的物理實現(xiàn)。在這里session還支持了多服務器的設置問題,
通過tcp-store參數(shù)設置。由于涉及到負載平衡的問題,在這里不詳細敘述,只簡單寫一個例子:
<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>
這個例子表示session是按照tcp ring的方式傳遞。
temp-dir 的設置
temp-dir指的是應用的臨時目錄。也就是在javax.servlet.context.tempdir中用到的目錄。模認是應用目錄下的WEB-INF\tmp目錄。
以上的設置都可以在<web-app>標簽對中設置,控制某個web應用的設置。
2、打包成War發(fā)布
以下是介紹對如何在resin下使用已經(jīng)打包成War的java Web應用進行發(fā)布。
其實這個是最簡單也是最清晰的良好方法。在j2ee中,所有的項目都打包成ear發(fā)布。其中,Web應用打包成war,ejb應用打包成jar。在resin中,這些都可以直接部署。這里我只對打包成war的Web應用的部署做介紹。
在resin.conf中,查找這個:<war-dir id='webapps'/>。他表示war文件應該被拷貝的路徑。這里指的是相對于resin的安裝路徑,如以上的設置表示d:\resin\webapps。只要重新啟動Resin就可以了。Resin會把該war自動解包到webapps目錄下。你可以在command控制臺或者stdout.log中看到類似于
[2002-04-27 09:56:21.680] initializing application http://haitaiserver:8080/rwtest 的語句。這個表示該Web應用是自動安裝的。只要這個應用是符合j2ee標準的Web應用,應該不會有問題。通過如上顯示的路徑就可以訪問到這個應用。如果你到d:\resin\webapps\rwtest中瀏覽,你會看到Resin已經(jīng)為你生成了rwtest目錄,下面是META-INF和WEB-INF還有你自己的JSP\servlet 文件和目錄。是完全符合j2ee的結構的。你可以在rwtest目錄下建立新的jsp\servlet,一樣可以被編譯和解析并運行的。在實際操作中,可以使用Jbuilder 或者 WebSphere等Ide工具進行集成調(diào)試和打包,非常的方便。
使用Resin進行java Web項目的開發(fā)和調(diào)試
這里篇幅有限,不可能講太多,我只對實際中最有用的部分做介紹。
Resin中如果定義了錯誤頁,則出錯后最常見的一大串Exception不會被看到,直接跳轉到錯誤頁。所以建議開發(fā)中先不設置錯誤頁。jsp錯誤中最常見的就是Nullpoint Exception,其次是名稱的拼寫錯誤。錯誤也可以在Resin安裝目錄下的log目錄下的stderr.log中找到。通過對該log文件的分析可以看到很多有用的錯誤信息。
在調(diào)試jsp的時候,如果定義了compile為true,jsp先被翻譯成Servlet的java文件,再被編譯成class文件。可以在你自己的work目錄中找到該文件。java的名稱在Resin中是這樣子定義的:原先的jsp文件名前加下劃線,再加上_jsp這個字樣。所以在java 應用中的命名不要以_jsp結尾,也不要出現(xiàn)中文名稱等字符;其實名稱以_jsp為開頭也是不合法的。
關于java對多國語言的支持問題,在Resin中得到了很好的解決。以jsp為例,參考Resin自動生成的java Servlet文件。只要在任何的jsp文件的最開始處增加:
<%@page contentType="text/html;charset=gb2312" %>
中文問題就解決了。察看生成的Servlet源文件片斷:
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("GB2312");
以上為設置字符集
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");
以上是對頁面的顯示的編碼。其中,getBytes(“gb2312”)是靜態(tài)編碼,這是Resin為了解決某些環(huán)境下還是不能正常顯示而設置的。在Resin的配置文件(/conf/resin.conf)中,可以通過設置<jsp precompile='true' static-encoding='false' recompile-on-error='true'/>中的static-encoding屬性為true或者false,來控制是否靜態(tài)編碼。其實在Resin容器的內(nèi)部,所有的字符都是按照iso-8859-1來處理的。iso-8859-1是一個大字符集,雖然中文的gb2312和8859在字的定義上有不同,但是編碼是包容了gb2312的。按照解決多國語言的方法,在純英文平臺上用iso-8859-1處理內(nèi)部編碼,而把字符的顯示推向客戶端的機器。所以這樣只要編碼是正確的,
在頁面上顯示中文就不存在問題。Tomcat3.2不方便的地方是Tomcat對數(shù)據(jù)庫的操作中文支持不好,需要手動在java Bean或者Servlet中硬編碼。通過測試,在Resin中完全沒有這個問題。Tomcat4.0解決了這個問題。不過個人習慣來講還是覺得resin在配置方面方便一些。
在Resin中可以自動解決引入的jar。這個在使用特殊的類或者第三方提供的開發(fā)包非常有用。方法非常簡單:只要把該jar或者是zip拷貝到Resin安裝目錄下的lib目錄下面,重新啟動Resin,就可以了。如db2用到的db2java.zip文件,只要輕松拷貝到d:\resin\lib中就可以了。
Resin提供了對Jbuilder的集成調(diào)試。可以到:
http://www.caucho.com/projects/jbuilder/resin-jbuilder.jar免費下載到resin的jbuilder的ide擴展包。然后,把該包該名成:resin-jbuilder.jar,拷貝到jbuilder6\lib\ext目錄下。然后,把Resin2.1解包安裝在jbuilder6\resin-2.1目錄下,就可以了。打開任何的War項目,在project上點右鍵,選擇properties,選擇Servers標簽。在原來的選擇框上,就可以看到多了一項Resin2.1。這樣子就可以象原來用tomcat一樣調(diào)試jsp\servlet了,而且比Tomcat更方便。見圖2:
圖2
調(diào)試方法和用Tomcat調(diào)試一樣。
其他問題
使用Resin可以和apache結合使用。也就是利用apache做http服務器,而Resin做srun服務器。可以參考resin\conf\samples目錄下的apache.conf。主要就是把 app-dir 設成 /usr/local/apache/htdocs(也就是apache的root)。同時在apache 中的http.conf也做了相應的設置。Resin還提供了對該過程的自動安裝程式,運行resin\bin\setup,你可以在彈處的對話框中選擇apache,這樣子就可以了。只要你曾經(jīng)安裝過apache,resin可以自己找到httpd.conf文件所在的路徑。
使用命令行方式啟動Resin,如果改動了Resin.conf,Resin會自己重新啟動適應新的配置。這個很適合初期安裝時使用。
Resin對數(shù)據(jù)庫緩沖池的支持很好。在這里,它提供了DBPool對緩沖池做了封裝。實際使用時,只要在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中就可以這樣子使用了:
先導入 com.caucho.sql.*包,然后如下直接得到連接:
Connection conn = DBPool.getPool("ORCL").getConnection();
個人建議不要如上使用連接池,還是按照ejb的方法用從Context中直接找到的DataSource對象中得到連接通用性比較好。代碼也很簡單:
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)成的管理控制臺而已。但是從穩(wěn)定性和方便性來講,Resin個人認為比Tomcat要好很多。況且Resin還有提供了resin-cmp 和 resin-ejb,功能更強大。
posted @
2005-12-15 13:22 kelven 閱讀(2083) |
評論 (0) |
編輯 收藏
目錄
正則表達式介紹
匹配模式字符子集行結束符分組和引用Unicode支持正則表達式語法參考
- 字符
- 邏輯操作符
- 向后引用
- 邊界元字符
- 重復指示符
- 字符子集
- 預定義子集(元字符)
- 擴展子集(元字符)
- 擴展中文子集(元字符)
- POSIX字符子集(只適用于ASCII)
- Unicode塊和分類
替換表達式
替換表達式
- 特殊字符
- 自定義替換表
匹配模式
匹配模式指得是正則表達式引擎將以何種模式匹配字符串。
模式名稱
|
啟用,禁用
|
缺省啟用
|
說明
|
UNIX_LINES
|
(?d)啟用,(?-d)禁用
|
是
|
啟用Unix行模式。 在此模式下,只有 '\n'被認為是行結束符。它會影響., ^, 和 $ 的行為。
|
CASE_INSENSITIVE
|
(?i)啟用,(?-i)禁用
|
否
|
啟用忽略大小寫模式。 缺省時,忽略大小寫模式只會影響 ASCII字符的匹配。 而Unicode范圍的忽略大小寫匹配需要通過 UNICODE_CASE 標志與本標志聯(lián)合使用。 啟用此模式會影響匹配性能。
|
COMMENTS
|
(?x)啟用,(?-x)禁用
|
否
|
允許空格和注釋出現(xiàn)在正則表達式中。 在此模式下,空格被忽略,以#開始的單行注釋被忽略。
|
MULTILINE
|
(?m)啟用,(?-m)禁用
|
是
|
啟用多行模式。 In multiline mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence.
|
DOTALL
|
(?s)啟用,(?-s)禁用
|
否
|
讓.可以匹配行結束符。 在此模式下,元字符.可以匹配行結束符。缺省不允許如此匹配。
|
UNICODE_CASE
|
(?u)啟用,(?-u)禁用
|
否
|
Enables Unicode-aware case folding. When this flag is specified then case-insensitive matching, when enabled by the CASE_INSENSITIVE flag, is done in a manner consistent with the Unicode Standard. By default, case-insensitive matching assumes that only characters in the US-ASCII charset are being matched. 啟用此模式會影響性能。
|
CANON_EQ
|
(?c)啟用,(?-c)禁用
|
否
|
Enables canonical equivalence. When this flag is specified then two characters will be considered to match if, and only if, their full canonical decompositions match. The expression "a\u030A", for example, will match the string "?" when this flag is specified. By default, matching does not take canonical equivalence into account. 啟用此模式會影響性能。
|
字符子集
字符子集可以含有別的字符子集,并且可以通過聯(lián)合操作符(缺省)和交集操作符(&&)實現(xiàn)組合。聯(lián)合操作符表示某個子集匹配它的子子集所匹配的任意字符。交集操作符表明某個字符子集只匹配它的子子集都匹配的字符。
字符子集所能夠有的操作符的優(yōu)先級如下,從高到低:
- 轉義符\x
- 成組符 [...]
- 區(qū)間符 a-z
- 聯(lián)合符 [a-e][i-u]
- 交集符 [a-z&&[aeiou]]
注意:在字符子集[]內(nèi)部的語法根本不同于正則表達式其它部分中的語法。例如,在字符子集內(nèi)部,正則表達式 . 失去了它原有的含義,而是成了一個匹配.的元字符。
行結束符
行結束符是一個或兩個字符序列,用以表明輸入字符序列中一行的結束。下面的字符被認為是行結束符:
- 一個換行符('\n')。
- 一個回車符加上一個換行符("\r\n")。
- 一個單獨的回車符('\r')。
- 代表下一行的字符('\u0085')。
- 行分隔符('\u2028'),Unicode中被定義。
- 一個分段符('\u2029),Unicode中被定義。
如果 UNIX_LINES 模式被啟用,則只有換行符被認為是行結束符。
如果 MULTILINE 模式被啟用,。
分組和引用
字符分組以它們的左括號的出現(xiàn)順序來排序。例如在表達式((A)(B(C))),有四個分組:
- ((A)(B(C)))
- (A)
- (B(C))
- (C)
第0組永遠表示表達式本身。
分組采用這樣的命名方式,是因為,在一次匹配過程中,正則表達式會被匹配多次。以前的匹配子序列有可能在將來被使用;或者在匹配結束時,程序有可能需要重新獲得所有匹配的子字符序列。
對于正則表達式中的某個分組而言,永遠只保留最后匹配的字符序列。如果對某個分組匹配嘗試失敗,則會保留上次匹配成功的字符序列。例如,對于正則表達式(a(b)?)+而言,字符序列"aba",將會讓分組2匹配的字符序列為"b"。
以(?開始的分組,將不會計入分組數(shù)目,也不會被后續(xù)匹配所引用。
Unicode支持
本正則表達式匹配引擎的實現(xiàn)遵循了《
Unicode技術報告:Unicode正則表達式指南》,實現(xiàn)了該指南的第二層所需的功能,但是在細微處有一些簡單語法修改。
Unicode塊(Block)和分類(Category)通過\p和\P通配苻表示。\p{
prop}匹配含有
prop的輸入序列,而\P{
prop}匹配不含有
prop的輸入序列。Unicode塊通過前綴
In表示,如\p{InMongolian}。Unicode分類通過可選的前綴Is表示,因此\p{L}和\p{IsL}都代表Unicode分類 letters。Unicode塊和分類都可以在正則表達式子集外部和內(nèi)部使用。
目前支持的Unicode塊和分類是《
Unicode標準,第三版》中所指定的塊和分類。 Unicode塊名稱在《
Unicode 字符數(shù)據(jù)庫》的第14章被定義,文件名稱叫
與Perl 5正則表達式語法對比
[TBD]
正則表達式參考
字符
正則表達式字符串
|
匹配的字符串
|
X
|
字符X,包括 CJK ExtB 區(qū)漢字
|
\\
|
反斜杠\
|
\0n |
八進制0n代表的字符(0<=n<=7)
|
\0nn
|
八進制0nn代表的字符(0<=n<=7)
|
\0mnn
|
八進制0mnn代表的字符(0<=m<=3,0<=n<=7)
|
\xhh
|
十六進制 0xhh所代表的字符
|
\uhhhh
|
十六進制 0xhhhh所代表的字符。注意,目前尚不支持CJK ExtB區(qū)漢字。
|
\t
|
制表符('\u0009')
|
\n
|
換行('\u000A')
|
\r
|
回車('\u000D')
|
\a
|
響鈴符('\u0007')
|
\e
|
取消符Escape('\001B')
|
\cx
|
x所代表的控制字符
|
邏輯操作符
正則表達式字符串
|
匹配的字符串
|
XY
|
X后面跟隨Y
|
X|Y
|
X或者Y
|
(X)
|
X作為分組表達式
|
向后引用
正則表達式字符串
|
匹配的字符串
|
\n
|
第n個匹配的分組
|
邊界元字符
邊界字符
|
匹配的字符串
|
^
|
行首
|
$
|
行末
|
\b |
字符邊界
|
\B
|
非字符邊界
|
\A
|
輸入流的開始
|
\G
|
上次匹配的結束處
|
\Z
|
輸入流的結束,或者是最后一個行結束符,參見行結束符。
|
\z
|
輸入流的結束
|
重復指示符
正則表達式字符串
|
匹配的字符串
|
X?
|
X重復一次,或者不重復
|
X*
|
X重復0次或多次
|
X+
|
X重復1次或多次
|
X{n}
|
X重復n次,不多也不少。
|
X{n,}
|
X至少重復n次
|
X{n,m}
|
X至少重復n次,至多重復m次。
|
注:
X{n,m}、?、*、+方式可以聯(lián)合使用。
字符子集
正則表達式字符串子集
|
匹配的字符串
|
組合方式
|
[abc]
|
字符a,b或c,包括 CJK ExtB 區(qū)漢字
|
簡單子集
|
[^abc]
|
任意非a,b或c的字符。
|
排除
|
[a-zA-Z] |
從a到z,或者A到Z,包含a,z,A,Z。
|
區(qū)間
|
[a-d[m-p]]
|
從a到d,或者m到p,等于[a-dm-p]。
|
聯(lián)合
|
[a-z&&[def]]
|
d,e或者f。
|
交集
|
[a-z&&[^bc]]
|
從a到z,除了b和c,等于[ad-z]
|
扣除
|
[a-z&&[^m-p]]
|
從a到z,并且不包括從m到p,等于[a-lq-z]
|
扣除
|
預定義子集(元字符)
邊界字符
|
匹配的字符串
|
.
|
任意字符,可能匹配行結束符。
|
\d
|
數(shù)字[0-9]
|
\D |
非數(shù)字[^0-9]
|
\s
|
空白符[ \t\n\x0B\f\r]
|
\S
|
非空白符[^\s]
|
\w
|
單詞符,包含有字母和數(shù)字[a-zA-Z_0-9]
|
\W
|
非單詞符,不包含有字母和數(shù)字。
|
擴展子集(元字符)
擴展中文子集(元字符)
名稱
|
塊名稱(\p{InXXX})
|
簡化通配符
|
標準Unicode塊,或者漢字列表
|
任意雙字節(jié)字符(漢字或全角符號)
|
\p{InQuqnJiao}
|
\E
|
任意由GBK表示的漢字,不包括GB18030擴展部分, 以及CJK ExtB區(qū)的漢字。
|
任意單字節(jié)字符
|
\p{InFQuanJiao}
|
\~E
|
任意單字節(jié)字符。
|
任意全角ASCII字符
|
\p{InQJAscii}
|
\H
|
標準HalfwidthandFullwidthForms塊
|
任意收錄在BIG5碼集中的雙字節(jié)字符
|
\p{InBig5}
|
\I
|
Big5可編碼雙字節(jié)字符
|
匹配未收錄在BIG5碼集中的雙字節(jié)字符 |
\p{InFBig5}
|
\~I
|
非Big5可編碼雙字節(jié)字符
|
匹配任意漢字(不包括符號)
|
\p{InHanziOrCJKExtB}
|
\X
|
任意漢字,包括GB18030擴展部分。
|
匹配任意漢字(不包括符號)
|
\p{InHanzi}
|
\M
|
任意漢字,不包括GB18030擴展部分。
|
匹配非漢字的雙字節(jié)字符
|
\p{InFHanzi}
|
\~M
|
任意非漢字的雙字節(jié)字符, 包括GB18030擴展部分。
|
地支字符
|
\p{InDiZhi}
|
\U
|
子丑寅卯辰巳午未申酉戌亥
|
匹配收錄在GB碼集中的雙字節(jié)字符
|
\p{InGB}
|
\g
|
收錄在GB碼集中的雙字節(jié)字符, 不包括GB18030擴展部分。
|
匹配非收錄在GB碼集中的雙字節(jié)字符
|
\p{InFGB}
|
\~g
|
未收錄在GB碼集中的雙字節(jié)字符, 不包括GB18030擴展部分。
|
匹配收錄在GBK碼集中的雙字節(jié)字符
|
\p{InGBK}
|
\h
|
收錄在GBK碼集中的雙字節(jié)字符, 不包括GB18030擴展部分。
|
匹配非收錄在GBK碼集中的雙字節(jié)字符
|
\p{InFGBK}
|
\~h
|
未收錄在GBK碼集中的雙字節(jié)字符, 不包括GB18030擴展部分。
|
大寫希臘字母
|
\p{InDaXila}
|
\K
|
ΑΒΓΔΕΖΗΘΙΚΛΜΝ ΞΟΠΡΣΤΥΦΧΨΩ
|
日文片假名
|
\p{InPianJia}
|
\j
|
標準Katakana塊
|
日文平假名
|
\p{InPingJia}
|
\J
|
標準Hiragana塊
|
小寫希臘字母
|
\p{InXiaoXila}
|
\k
|
αβγδεζηθικλμν ξοπρστυφχψω
|
數(shù)學符號
|
\p{InMathe}
|
\m
|
±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙ ∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴
|
中文數(shù)字
|
\p{InCnDigit}
|
\i
|
〇一二三四五六七八九十百千萬億兆吉京
|
大寫中文數(shù)字
|
\p{InDaCnDigit}
|
\N
|
零壹貳叁肆伍陸柒捌玖拾佰仟萬億兆吉京
|
全角標點符號
|
\p{InQJBiaoDian}
|
\o
|
、。·ˉˇ¨〃々—~‖…‘’“”〔〕 〈〉《》「」『』〖〗【】!"'(), -.:;<=>?[]{|}`﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚ ﹛﹜﹝﹞︵︶︹︺︿﹀︽︾﹁﹂﹃﹄ ︻︼︷︸︱︳︴
|
小寫俄文字母
|
\p{InXiaoEWen}
|
\l
|
абвгдеёжзийклмн опрстуфхцчшщъыьэюя
|
大寫俄文字母
|
\p{InDaEWen}
|
\R
|
АБВГДЕЁЖЗИЙКЛМНО ПРСТУФХЦЧШЩЪЫЬЭЮЯ
|
中文序號
|
\p{InCnSN}
|
\q
|
ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ 再加上Unicode標準EnclosedAlphanumerics塊
|
天干字符
|
\p{InTianGan}
|
\T
|
甲乙丙丁戊己庚辛壬癸
|
豎排標點符號
|
\p{InSPBiaoDian}
|
\V
|
︵︶︹︺︿﹀︽︾﹁﹂﹃﹄︻︼︷︸︱︳︴
|
拼音字符
|
\p{InPinyin}
|
\y
|
āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑńňɡ GBK -> 0xA8A1- 0xA8C0 只是Unicode標準LatinExtended-A塊的一部分。
|
注音字符
|
\p{InZhuyin}
|
\Y
|
標準Bopomofo塊
|
制表字符
|
\p{InZhiBiao}
|
\C
|
標準BoxDrawing塊。 經(jīng)檢查發(fā)現(xiàn) textpro 的算法含有部分非標 準Unicode制表符:“∟∣≒≦≧⊿═”。
|
POSIX字符子集(只適用于ASCII)
正則表達式字符串
|
匹配的字符串
|
\p{Lower}
|
小寫字母[a-z]
|
\p{Upper}
|
大寫字母[A-Z]
|
\p{ASCII}
|
所有的ASCII字符[\x00-\x7F]
|
\p{Alpha}
|
大小寫字母[\p{Lower}\p{Upper}]
|
\p{Digit}
|
數(shù)字[0-9]
|
\p{Alnum}
|
字母數(shù)字符,包含大小寫字母和數(shù)字[\p{Alpha}\p{Digit}]
|
\p{Punct}
|
標點符號,!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~之一。
|
\p{Graph}
|
可顯示字符[\p{Alnum}\p{Punct}]
|
\p{Print}
|
可打印字符[\p{Graph}]
|
\p{Blank}
|
空格或者制表符[ \t]
|
\p{Cntrl}
|
控制字符[\x00-\x1F\x7F
|
\p{XDigit}
|
十六進制數(shù)字[0-9a-fA-F]
|
\p{Space}
|
空白符[ \t\n\x0B\f\r]
|
Unicode塊和分類
塊
|
中文名稱(摘自Word XP)
|
代碼區(qū)域
|
BasicLatin
|
基本拉丁語
|
\u0000-\u007F
|
Latin-1Supplement
|
拉丁語-1
|
\u0080-\u00FF
|
LatinExtended-A
|
拉丁語擴充-A
|
\u0100-\u017F
|
LatinExtended-Bound
|
拉丁語擴充-B
|
\u0180-\u024F
|
IPAExtensions
|
國際音標擴充
|
\u0250-\u02AF
|
SpacingModifierLetters
|
進格的修飾字符
|
\u02B0-\u02FF
|
CombiningDiacriticalMarks
|
組合用發(fā)音符
|
\u0300-\u036F
|
Greek
|
基本希臘語
|
\u0370-\u03FF
|
Cyrillic
|
西里爾語
|
\u0400-\u04FF
|
Armenian
|
|
\u0530-\u058F
|
Hebrew
|
|
\u0590-\u05FF
|
Arabic
|
|
\u0600-\u06FF
|
Syriac
|
|
\u0700-\u074F
|
Thaana
|
|
\u0780-\u07BF
|
Devanagari
|
|
\u0900-\u097F
|
Bengali
|
|
\u0980-\u09FF
|
Gurmukhi
|
|
\u0A00-\u0A7F
|
Gujarati
|
|
\u0A80-\u0AFF
|
Oriya
|
|
\u0B00-\u0B7F
|
Tamil
|
|
\u0B80-\u0BFF
|
Telugu
|
|
\u0C00-\u0C7F
|
Kannada
|
|
\u0C80-\u0CFF
|
Malayalam
|
|
\u0D00-\u0D7F
|
Sinhala
|
|
\u0D800-\uDFF
|
Thai
|
|
\u0E00-\u0E7F
|
Lao
|
|
\u0E80-\u0EFF
|
Tibetan
|
藏語
|
\u0F00-\u0FFF
|
Myanmar
|
|
\u1000-\u109F
|
Georgian
|
|
\u10A0-\u10FF
|
HangulJamo
|
|
\u1100-\u11FF
|
Ethiopic
|
|
\u1200-\u137F
|
Cherokee
|
|
\u13A0-\u13FF
|
UnifiedCanadianAboriginalSyllabics
|
|
\u1400-\u167F
|
Ogham
|
|
\u1680-\u169F
|
Runic
|
|
\u16A0-\u16FF
|
Khmer
|
|
\u1780-\u17FF
|
Mongolian
|
蒙古語
|
\u1800-\u18AF
|
LatinExtendedAdditional
|
|
\u1E00-\u1EFF
|
GreekExtended
|
|
\u1F00-\u1FFF
|
GeneralPunctuation
|
廣義標點
|
\u2000-\u206F
|
SuperscriptsandSubscripts
|
|
\u2070-\u209F
|
CurrencySymbols
|
貨幣符號
|
\u20A0-\u20CF
|
CombiningMarksforSymbols
|
|
\u20D0-\u20FF
|
LetterlikeSymbols
|
類似字母的符號
|
\u2100-\u214F
|
NumberForms
|
數(shù)字形式
|
\u2150-\u218F
|
Arrows
|
箭頭
|
\u2190-\u21FF
|
MathematicalOperators
|
數(shù)學運算符
|
\u2200-\u22FF
|
MiscellaneousTechnical
|
零雜技術用符號
|
\u2300-\u23FF
|
ControlPictures
|
|
\u2400-\u243F
|
OpticalCharacterRecognition
|
|
\u2440-\u245F
|
EnclosedAlphanumerics
|
帶括號的字母數(shù)字
|
\u2460-\u24FF
|
BoxDrawing
|
制表符
|
\u2500-\u257F
|
BlockElements
|
方塊圖形
|
\u2580-\u259F
|
GeometricShapes
|
幾何圖形
|
\u25A0-\u25FF
|
MiscellaneousSymbols
|
零雜丁貝符(示意符等)
|
\u2600-\u26FF
|
Dingbats
|
|
\u2700-\u27BF
|
BraillePatterns
|
|
\u2800-\u28FF
|
CJKRadicalsSupplement
|
|
\u2E80-\u2EFF
|
KangxiRadicals
|
|
\u2F00-\u2FDF
|
IdeographicDescriptionCharacters
|
|
\u2FF0-\u2FFF
|
CJKSymbolsandPunctuation
|
CJK符號和標點
|
\u3000-\u303F
|
Hiragana
|
平假名
|
\u3040-\u309F
|
Katakana
|
片假名
|
\u30A0-\u30FF
|
Bopomofo
|
注音
|
\u3100-\u312F
|
HangulCompatibilityJamo
|
|
\u3130-\u318F
|
Kanbun
|
|
\u3190-\u319F
|
BopomofoExtended
|
擴展注音
|
\u31A0-\u31BF
|
EnclosedCJKLettersandMonths
|
帶括號的CJK字母及月份
|
\u3200-\u32FF
|
CJKCompatibility
|
CJK兼容字符
|
\u3300-\u33FF
|
CJKUnifiedIdeographsExtensionA
|
CJK統(tǒng)一漢字擴展-A
|
\u3400-\u4dBF
|
CJKUnifiedIdeographs
|
CJK統(tǒng)一漢字
|
\u4E00-\u9fAF
|
YiSyllables
|
|
\uA000-\uA48F
|
YiRadicals
|
|
\uA490-\uA4CF
|
HangulSyllables
|
|
\uAC00-\uD7A3
|
HighSurrogates
|
|
\uD800-\uDB7F
|
HighPrivateUseSurrogates
|
|
\uDB80-\uDBFF
|
LowSurrogates
|
|
\uDC00-\uDFFF
|
PrivateUse
|
專用區(qū)
|
\uE000-\uF8FF
|
CJKCompatibilityIdeographs
|
CJK兼容漢字
|
\uF900-\uFAFF
|
AlphabeticPresentationForms
|
|
\uFB00-\uFB4F
|
ArabicPresentationForms-A
|
|
\uFB50-\uFDFF
|
CombiningHalfMarks
|
|
\uFE20-\uFE2F
|
CJKCompatibilityForms
|
CJK兼容形式
|
\uFE30-\uFE4F
|
SmallFormVariants
|
小寫變體
|
\uFE50-\uFE6F
|
ArabicPresentationForms-Bound
|
|
\uFE70-\ufeFF
|
Specials
|
|
\uFFF0-\uFFFF
|
HalfwidthandFullwidthForms
|
半形及全形字符
|
\uFF00-\uFFEF
|
分類
|
全稱
|
說明
|
Cn
|
|
UNASSIGNED
|
Lu
|
|
UPPERCASE_LETTER
|
Ll
|
|
LOWERCASE_LETTER
|
Lt
|
|
TITLECASE_LETTER
|
Lm
|
|
MODIFIER_LETTER
|
Lo
|
|
OTHER_LETTER
|
Mn
|
|
NON_SPACING_MARK
|
Me
|
|
ENCLOSING_MARK
|
Mc
|
|
COMBINING_SPACING_MARK
|
Nd
|
|
DECIMAL_DIGIT_NUMBER
|
Nl
|
|
LETTER_NUMBER
|
No
|
|
OTHER_NUMBER
|
Zs
|
|
SPACE_SEPARATOR
|
Zl
|
|
LINE_SEPARATOR
|
Zp
|
|
PARAGRAPH_SEPARATOR
|
Cc
|
|
CNTRL
|
Cf
|
|
FORMAT
|
Co
|
|
PRIVATE_USE
|
Cs
|
|
SURROGATE
|
Pd
|
|
DASH_PUNCTUATION
|
Ps
|
|
START_PUNCTUATION
|
Pe
|
|
END_PUNCTUATION
|
Pc
|
|
CONNECTOR_PUNCTUATION
|
Po
|
|
OTHER_PUNCTUATION
|
Sm
|
|
MATH_SYMBOL
|
Sc
|
|
CURRENCY_SYMBOL
|
Sk
|
|
MODIFIER_SYMBOL
|
So
|
|
OTHER_SYMBOL
|
L
|
|
LETTER
|
M
|
|
MARK
|
N
|
|
NUMBER
|
Z
|
|
SEPARATOR
|
C
|
|
CONTROL
|
P
|
|
PUNCTUATION
|
S
|
|
SYMBOL |
LD
|
|
LETTER_OR_DIGIT
|
L1
|
|
Latin-1
|
all
|
|
ALL
|
ASCII
|
|
ASCII
|
Alnum
|
|
字母數(shù)字(0-9,a-z,A-Z)
|
Alpha
|
|
字母(a-z,A-Z)
|
Blank
|
|
空格和制表符(' '|\t)
|
Cntrl
|
|
控制字符,不可打印
|
Digit
|
|
數(shù)字(0-9)
|
Graph
|
|
可打印且可視字母(例如空格' '是可打印的但不是可視字母,而 `a' 兩者都是。)
|
Lower
|
|
小寫字母
|
Print
|
|
可打印字母(非控制字符)
|
Punct
|
|
標符號(字母、數(shù)字、控制、空白符以外的字母),如:!@#$%}{<>,./?[]等等。
|
Space
|
|
空白符(' ',\t,0x09,0x0A,0x0B,0x0C,0x0D,0x20)
|
Upper
|
|
大寫字母
|
XDigit
|
|
十六進制數(shù)字(0-9,a-f, A-F)
|
替換表達式
特殊字符
特殊字符介紹
|
描述
|
\n
|
換行
|
\b
|
向前刪除一個字符。當這個字符位于替換串之首時,將刪除匹配串之前的一個字符。若匹配串位于行首,將使匹配串所在行與前一行相合并。
|
\d
|
向后刪除一個字符。當這個字符位于替換串之末時,將刪除匹配串之后的一個字符。若匹配串位于行末,將使匹配串所在行與下一行相合并。
|
\e
|
插入一個ESC字符
|
\t
|
插入一個TAB字符
|
\n
|
n代表查找正則表達式中的子表達式(組)。\1代表第一個子表達式,\2代表第二個子表達式,依次類推。\0代表整個匹配到的字符串。
|
\v
|
大寫下一個字母
|
\U
|
全部大寫以后的字母,直到碰到其它指示符為止。
|
\l
|
小寫下一個字母
|
\L
|
全部小寫以后的字母,直到碰到其它指示符為止。
|
\E
|
取消所有的字母大小寫指示符。
|
自定義替換表
在查找/替換中使用自定義替換表
有的時候,上述簡單的自定義替換功能是不夠的。例如,用戶可能希望只把出現(xiàn)在括號內(nèi)的源串替換為目標串。這種文本處理可以通過在查找/替換中使用自定義替換表來解決。
在查找/替換功能中使用自定義替換表的替換函數(shù)是\Tn,其中n是0-9的數(shù)字, 注意n為0表示第10張?zhí)鎿Q表。如果略去n,其效果相當于\T1,即使用第一張?zhí)鎿Q表。例如要把所有放在方括號中的漢字替換為拼音,可以查找“\[(\E)\]”,替換為“\T{\1}”。即把第一個子表達式的匹配內(nèi)容按自定義替換表轉換。注意,如果\T函數(shù)的參數(shù)不在替換表的源串中,\T函數(shù)的結果與源串相同,即不做任何變換。
有些情況下,用戶可能希望只使用替換表的一部分內(nèi)容。還是以拼音為例,前面給出的替換表中包含了拼音的音調(diào),如果在替換時不希望加上這些音調(diào)數(shù)字,可以使用“過濾”功能。所謂過濾,其實是用一個正則表達式去分析替換表的目標串,并把其中的某個子表達式取出來。
使用“過濾”時,在“設置自定義替換表”對話框中,點“過濾”按鈕,在彈出的對話框中填入一個正則表達式。再以拼音為例,表達式可以寫為“(\p{Alpha}+)(\d)”,其中第一對括號中的是不含音調(diào)的拼音,第二對括號是音調(diào)。在調(diào)用\T函數(shù)時,JTextPro會在目標串中查找這個正則表達式。但是如何把其中的子表達式取出來呢?\T函數(shù)還有一個可選的下標,取第n個子表達式的值就寫作\T{...}[n]。所以,把放在方括號中的漢字替換為不帶調(diào)的拼音,可以查找“\[(\E)\]”,替換為“\T{\1}[1]”
posted @
2005-12-12 13:38 kelven 閱讀(966) |
評論 (0) |
編輯 收藏
我收集的Eclipse插件
Poperties Editor
http://propedit.sourceforge.jp/eclipse/updates/
eclipseME
http://eclipseme.org/updates/
Eclipse加速插件KeepResident
http://suif.stanford.edu/pub/keepresident/
MyEclipse J2EE開發(fā)插件,支持SERVLET/JSP/EJB/數(shù)據(jù)庫操縱等
www.myeclipseide.com
Properties Editor 編輯java的屬性文件,并可以自動存盤為Unicode格式
http://propedit.sourceforge.jp/index_en.html
http://propedit.sourceforge.jp/eclipse/updates/
Colorer Take 為上百種類型的文件按語法著色
http://colorer.sourceforge.net/
XMLBuddy 編輯xml文件
www.xmlbuddy.com
Code Folding 加入多種代碼折疊功能(比eclipse自帶的更多)
http://www.coffee-bytes.com/servlet/PlatformSupport
Easy Explorer 從eclipse中訪問選定文件、目錄所在的文件夾
http://easystruts.sourceforge.net/
Fat Jar 打包插件,可以方便的完成各種打包任務,可以包含外部的包等
http://fjep.sourceforge.net/
RegEx Test 測試正則表達式
http://brosinski.com/stephan/archives/000028.php
JasperAssistant 報表插件(強,要錢的)
http://www.jasperassistant.com/
Jigloo GUI Builder JAVA的GUI編輯插件
http://cloudgarden.com/jigloo/
Profiler 性能跟蹤、測量工具,能跟蹤、測量BS程序
http://sourceforge.net/projects/eclipsecolorer/
AdvanQas 提供對if/else等條件語句的提示和快捷幫助(自動更改結構等)
http://eclipsecolorer.sourceforge.net/advanqas/index.html
Log4E Log4j插件,提供各種和Log4j相關的任務,如為方法、類添加一個logger等
http://log4e.jayefem.de/index.php/Main_Page
VSSPlugin VSS插件
http://sourceforge.net/projects/vssplugin
Implementors 提供跳轉到一個方法的實現(xiàn)類,而不是接中的功能(實用!)
http://eclipse-tools.sourceforge.net/implementors/
Call Hierarchy 顯示一個方法的調(diào)用層次(被哪些方法調(diào),調(diào)了哪些方法)
http://eclipse-tools.sourceforge.net/call-hierarchy/index.html
EclipseTidy 檢查和格式化HTML/XML文件
http://eclipsetidy.sourceforge.net/
Checkclipse 檢查代碼的風格、寫法是否符合規(guī)范
http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm
Hibernate Synchronizer Hibernate插件,自動映射等
http://www.binamics.com/hibernatesync/
spring updatesite 插件
http://springide.org/updatesite/
VeloEclipse Velocity插件
http://propsorter.sourceforge.net/
EditorList 方便的列出所有打開的Editor
http://editorlist.sourceforge.net/
MemoryManager 內(nèi)存占用率的監(jiān)視
http://cloudgarden.com/memorymanager/
Eclipse的游戲插件
http://eclipse-games.sourceforge.net/
JBoss-IDE
http://jboss.sourceforge.net/jbosside/updates/
自動反編譯class,安裝后要設定class文件缺省關聯(lián)到jode
http://www.technoetic.com/eclipse/update
jigloo swing/sw設計工具,里面自帶的form/anchor布局很好用!
http://cloudgarden.soft-gems.net/update-site/
jinto的資源文件編輯工具,同時編輯多種語言,而且自動轉換成iso8859-1編碼。很好用!
http://www.guh-software.de/eclipse/
posted @
2005-12-12 13:30 kelven 閱讀(713) |
評論 (1) |
編輯 收藏
1. SELECT語句的子查詢:
語法: SELECT ... FROM (subquery) AS name ...
先創(chuàng)建一個表:
CREATE TABLE t1 (s1 INT, s2 CHAR(5), s3 FLOAT);
INSERT INTO t1 VALUES (1,'1',1.0);
INSERT INTO t1 VALUES (2,'2',2.0);
我們就可以進行以下的嵌套查詢了:
SELECT sb1,sb2,sb3
FROM (SELECT s1 AS sb1, s2 AS sb2, s3*2 AS sb3 FROM t1) AS sb
WHERE sb1 > 1;
結果是:
2, '2', 4.0
.
我們知道下面語句是不會得到正確結果的,因為對經(jīng)過Group by排序的集合進行求均值是不能得到正確答案的:
SELECT AVG(SUM(column1)) FROM t1 GROUP BY column1
所以我們可以通過下面的嵌套查詢實現(xiàn)同樣的效果:
SELECT AVG(sum_column1)
FROM (SELECT SUM(column1) AS sum_column1
FROM t1 GROUP BY column1) AS t1;
2.行的子查詢(Row Subquery):
看下面的例子:
SELECT * FROM t1 WHERE ROW(1,2) = (SELECT column1, column2 FROM t2);
這個查詢是返回column1等于column2的結果行。Row函數(shù)中的1和2相當于構造參數(shù)。想必Blogjava上的同志對這些應該比較清楚,也不去詳細介紹了。
3.使用Exist和Not Exist參數(shù)
這里的Exist和Not Exist用途及用法和在其他沒有什么大的區(qū)別,我就簡單舉幾個范例好了:
范例一: SELECT DISTINCT store_type FROM Stores
WHERE EXISTS (SELECT * FROM Cities_Stores
WHERE Cities_Stores.store_type = Stores.store_type);
范例二: SELECT DISTINCT store_type FROM Stores
WHERE NOT EXISTS (SELECT * FROM Cities_Stores
WHERE Cities_Stores.store_type = Stores.store_type);
范例三: 這個例子中嵌套使用了Not Exist語法,稍微注意一下:
SELECT DISTINCT store_type FROM Stores S1
WHERE NOT EXISTS (
SELECT * FROM Cities WHERE NOT EXISTS (
SELECT * FROM Cities_Stores
WHERE Cities_Stores.city = Cities.city
AND Cities_Stores.store_type = Stores.store_type));
4.條件關聯(lián)關系查詢:
解釋起來麻煩,直接看例子吧:
SELECT column1 FROM t1 AS x
WHERE x.column1 = (SELECT column1 FROM t2 AS x
WHERE x.column1 = (SELECT column1 FROM t3
WHERE x.column2 = t3.column1));
跟其他數(shù)據(jù)庫做法是一樣的。
5.其他使用方法和注意:
除了上面這些還有很多很多,不過就不去細講了,因為這些跟別的數(shù)據(jù)庫差不多,只是為了給大家一個參考,提提就夠了。
SELECT (SELECT s1 FROM t2) FROM t1;
SELECT (SELECT s2 FROM t1);
支持子查詢的語法有:SELECT,INSERT,UPDATE,DELETE,SET和DO。
子查詢可以使用任何普通查詢中使用的關鍵詞:如DINSTINCT,GROUP BY,LIMIT,ORDER BY,UNION,ALL,UNION ALL等。可以使用<,>, <=, >=, =, <>運算符進行比較,也可以使用ANY ,IN和SOME進行集合的匹配。
posted @
2005-10-31 21:34 kelven 閱讀(451) |
評論 (0) |
編輯 收藏
文件的建立/檢查與刪除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文件的建立、檢查與刪除</title>
</head>
<body>
<%
String path=request.getRealPath("");
//out.println(path);
File f=new File(path,"File.txt");
//out.println(f);
//out.println(f.exists());
//檢查File.txt是否存在
if(f.exists()){
f.delete();//刪除File.txt文件
out.println(path + "\\File.txt 存在,已刪除。");
}else{
f.createNewFile();//在當前目錄下建立一個名為File.txt的文件
out.println(path + "\\File.txt 不存在,已建立。");//輸出目前所在的目錄路徑
}
%>
目錄的建立/檢查與刪除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>目錄的建立/檢查與刪除</title>
</head>
<body>
<%
String path=request.getRealPath("");
path=path + "\\Sub";//將要建立的目錄路徑
File d=new File(path);//建立代表Sub目錄的File對象,并得到它的一個引用
if(d.exists()){//檢查Sub目錄是否存在
d.delete();
("Sub目錄存在,已刪除");
}else{
d.mkdir();//建立Sub目錄
out.println("Sub目錄不存在,已建立");
}
%>
</body>
</html>
如何在JSP中處理虛擬目錄
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>JSP中如何處理虛擬目錄</title>
</head>
<body>
取得虛擬目錄對應的磁盤路徑<br>
Web站點主目錄的位置為<font color=#ff0000><%=request.getRealPath("/")%></font><br>
JSP網(wǎng)頁所在的目錄位置<font color=#ff0000><%=request.getRealPath("./")%></font><br>
JSP網(wǎng)頁所在目錄上一層目錄的位置<font color=#ff0000><%=request.getRealPath("../")%></font><br>
</body>
</html>
文件屬性的取得
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date,java.io.*"%>
<html>
<head>
<title>文件屬性的取得</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File f=new File(path,"ReadData.txt");
if(f.exists()){
%>
<%=f.getName()%>的屬性如下:<br><br>
文件長度為:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%><br>
<%=f.isDirectory()?"是目錄":"不是目錄"%><br>
<%=f.canRead()?"可讀取":"不可讀取"%><br>
<%=f.canWrite()?"可寫入":"不可寫入"%><br>
<%=f.isHidden()?"是隱藏文件":"不是隱藏文件"%><br>
文件的最后修改日期為:<%=new Date(f.lastModified())%><br>
<%
}else{
f.createNewFile();//在當前目錄下建立一個名為ReaData.txt的文件
%>
<%=f.getName()%>的屬性如下:<br><br>
文件長度為:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%><br>
<%=f.isDirectory()?"是目錄":"不是目錄"%><br>
<%=f.canRead()?"可讀取":"不可讀取"%><br>
<%=f.canWrite()?"可寫入":"不可寫入"%><br>
<%=f.isHidden()?"是隱藏文件":"不是隱藏文件"%><br>
文件的最后修改日期為:<%=new Date(f.lastModified())%><br>
<%
}
%>
</body>
</html>
取出目錄中文件的方法
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>取出目錄中文件的方法--列出目錄中的文件</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File d=new File(path);//建立當前目錄中文件的File對象
File list[]=d.listFiles();//取得代表目錄中所有文件的File對象數(shù)組
out.println("<font color=#ff0000>" + path + "目錄下的文件:</font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isFile()){
out.println(list<I>.getName() + "<br>");
}
}
out.println("<br><font color=#ff0000>" + path + "目錄下的目錄:</font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isDirectory()){
out.println(list<I>.getName() + "<br>");
}
}
%>
</body>
</html>
判斷是否為空白文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>判斷是否為空白文件</title>
</head>
<body>
<%
String path=request.getRealPath("/");
out.println(path);
FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader對象,并實例化為fr
//對FileReader類生成的對象使用read()方法,可以從字符流中讀取下一個字符。
if(fr.read()==-1)//判斷是否已讀到文件的結尾
{
out.print("AtEnd.txt文件中沒有數(shù)據(jù)<br>");
}else{
out.println("AtEnd.txt文件中有數(shù)據(jù)");
}
fr.close();
%>
</body>
</html>
<B>讀取所有的文件數(shù)據(jù)</B>
<ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2"
bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
<td bgcolor="e6e6e6" class="code" style="font-size:9pt">
<pre><ccid_code> <%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.lang.*"%>
<html>
<head>
<title>讀取所有的文件數(shù)據(jù)</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
//關鍵在于讀取過程中,要判斷所讀取的字符是否已經(jīng)到了文件的末尾,并且這個字符是不是文件中的斷行符,即判斷該字符值是否為13
。
int c=fr.read();//從文件中讀取一個字符
//判斷是否已讀到文件結尾
while(c!=-1){
out.print((char)c);//輸出讀到的數(shù)據(jù)
c=fr.read();//從文件中繼續(xù)讀取數(shù)據(jù)
if(c==13){//判斷是否為斷行字符
out.print("<br>");//輸出分行標簽
fr.skip(1);//略過一個字符
/c=fr.read();//讀取一個字符
}
}
fr.close();
%>
</body>
</html>
一行一行讀取數(shù)據(jù)
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文件讀取</title>
</head>
<body>
<%
String path=request.getRealPath("");//取得當前目錄的路徑
FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader對象,并實例化為fr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader對象,并實例化為br
String Line=br.readLine();//從文件讀取一行字符串
//判斷讀取到的字符串是否不為空
while(Line!=null){
out.println(Line + "<br>");//輸出從文件中讀取的數(shù)據(jù)
Line=br.readLine();//從文件中繼續(xù)讀取一行數(shù)據(jù)
}
br.close();//關閉BufferedReader對象
fr.close();//關閉文件
%>
</body>
</html>
略過文件中的字符不讀取
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>略過字節(jié)不讀取</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
fr.skip(2);//跳過2個字節(jié)
int c=fr.read();//讀取一個字節(jié)
while(c!=-1){
out.print((char)c);
c=fr.read();
}
fr.close();
%>
</body>
</html>
將數(shù)據(jù)寫入文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>將數(shù)據(jù)寫入文件</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter對象,并實例化fw
//將字符串寫入文件
fw.write("大家好!");
fw.write("本書是《JSP編程技巧》");
fw.write("請多多指教!");
fw.write("email:stride@sina.com");
fw.close();
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//建立BufferedReader對象,并實例化為br
String Line=br.readLine();
//讀取一行數(shù)據(jù)
out.println(Line + "<br>");
br.close();//關閉BufferedReader對象
fr.close();
%>
</body>
</html>
將寫入文件的數(shù)據(jù)分行
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>將寫入文件的數(shù)據(jù)分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好!");
bw.write("本書是《JSP編程技巧》。");
bw.newLine();//斷行
bw.write("請多多指教!");
bw.newLine();//斷行
bw.write("email: stride@sina.com");
bw.flush();//將數(shù)據(jù)更新至文件
fw.close();//關閉文件流
out.println("寫入文件內(nèi)容為:<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);
String Line=br.readLine();//讀取一行數(shù)據(jù)
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();
%>
</body>
</html>
如何將數(shù)據(jù)追加寫入到文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>將寫入文件的數(shù)據(jù)分行</title>
</head>
<body>
<%
%>
</body>
</html></I></I></I></>
posted @
2005-10-31 21:30 kelven 閱讀(372) |
評論 (0) |
編輯 收藏