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

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)
調用以上函數只需要傳遞一個完整的文件路徑就可以以字符串的形式讀取文件.
......
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的數據庫連接池配置方法。
在%ResinHome%/conf/resin.conf中找到
<!--
- Sample database pool configuration
- The JDBC name is java:comp/env/jdbc/test
-->
在其下加入相應的信息可以連接到不同的數據庫。
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的演變:在常規的 JSP,Servlet,JavaBean三層結構中,JSP實現View的功能,Servlet實現Controller的功能,JavaBean實現Model的實現。
在Struts中,將常規情況下的Servlet拆分與ActionServlet、FormBean、ActionBean三個部分。ActionServlet配合Struts-config.xml,專職完成頁面導航,而不再負責具體的數據獲取與相應邏輯,這兩部分功能由FormBean和ActionBean來完成。
Struts的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有頁面的導航定義。對于大型的WEB項目,通過此配置文件即可迅速把握其脈絡,這不管是對于前期的開發,還是后期的維護或升級都是大有裨益的。掌握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類,FormBean是對頁面請求的封裝。即把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的產生是為了提供數據給ActionBean,在ActionBean中可以取得FormBean中封裝的數據,經相應的邏輯處理后,調用業務方法完成相應業務要求。
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優缺點
優點:Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟件,這是它的一大優點。使開發者能更深入的了解其內部實現機制。
除此之外,
Struts的優點主要集中體現在兩個方面:Taglib和頁面導航。Taglib是Struts的標記庫,靈活動用,能大大提高開發效率。另外,就目前國內的JSP開發者而言,除了使用JSP自帶的常用標記外,很少開發自己的標記,或許Struts是一個很好的起點。
關于頁面導航,我認為那將是今后的一個發展方向,事實上,這樣做,使系統的脈絡更加清晰。通過一個配置文件,即可把握整個系統各部分之間的聯系,這對于后期的維護有著莫大的好處。尤其是當另一批開發者接手這個項目時,這種優勢體現得更加明顯。
缺點:Taglib是Struts的一大優勢,但對于初學者而言,卻需要一個持續學習的過程,甚至還會打亂你網頁編寫的習慣,但是,當你習慣了它時,你會覺得它真的很棒。
Struts將MVC的Controller一分為三,在獲得結構更加清晰的同時,也增加了系統的復雜度。
Struts從產生到現在還不到半年,但已逐步越來越多運用于商業軟件。雖然它現在還有不少缺點,但它是一種非常優秀的J2EE MVC實現方式,如果你的系統準備采用J2EE MVC架構,那么,不妨考慮一下Struts。
Struts實施經驗:
1)、基于Struts架構的項目開發,首先需要有一個很好的整體規劃,整個系統中包括哪幾個模塊,每個模塊各需要多少FormBean和ActionBean等,而且最好有專人負責Struts-config.xml的管理。開發基于Struts的項目的難點在于配置管理,尤其是對Struts-config.xml的管理。
2)、如果你的項目非常緊,并且項目組中又沒有富有經驗的Struts開發人員,建議不要冒然采用Struts。Struts的掌握需要一個過程,對于一個熟練的JSP程序員,自學大概需要半個月左右的時間。如果結合titls,則需要更長的時間。
3)、如果你在網頁中大量運用taglib,那么你的美工將做出部分犧牲。當你結合Tiles,功能增強的同時,這種犧牲尤為明顯。當然,你對功能和美觀的取舍由你自己決定。
4)、Taglib是一個好東西,但靈活運用它卻需要一個過程,如果你不想在Taglib上花太多的時間,那么只需理解與FORM有關的幾個標記,其它的標記就放著吧,以后再看,先去研究ActionServlet和Struts-config.xml,你會覺得很有成就感。
5)、Struts是否只適合于大型項目呢?No!Struts適合于各種大小的項目,當然,對于大型項目,它所體現出來的優勢更加明顯。
http://www.chinaitlab.com/www/news/article_show.asp?id=33092
posted @
2005-12-15 13:33 kelven 閱讀(839) |
評論 (0) |
編輯 收藏
Resin使用簡介
使用Resin開發Java Web項目時,需要建立自己的WebApp。這里不介紹Resin Cmp/Ejb的開發和使用,只介紹用Resin開發普通的jsp\java servlet項目。在這里還要談到resin.conf的配置。Resin中的應用可以有2種方式發布:一是在Resin的目錄下發布;二是打包成War發布。
1、在Resin的目錄下發布
在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參數的值表示classpath中編譯后的classpath的存放路徑;source參數的值表示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中有個重要的參數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數量
session-timeout :session過期時間,以分鐘為單位。
是否允許cookie :指session是否采用cookies。如果采用cookies,瀏覽器必須支持session才能使用,發布時建議改成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永久保存在數據庫中。其實也就是會話變量的序列化后的保存和重新載入的物理實現。在這里session還支持了多服務器的設置問題,
通過tcp-store參數設置。由于涉及到負載平衡的問題,在這里不詳細敘述,只簡單寫一個例子:
<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發布
以下是介紹對如何在resin下使用已經打包成War的java Web應用進行發布。
其實這個是最簡單也是最清晰的良好方法。在j2ee中,所有的項目都打包成ear發布。其中,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已經為你生成了rwtest目錄,下面是META-INF和WEB-INF還有你自己的JSP\servlet 文件和目錄。是完全符合j2ee的結構的。你可以在rwtest目錄下建立新的jsp\servlet,一樣可以被編譯和解析并運行的。在實際操作中,可以使用Jbuilder 或者 WebSphere等Ide工具進行集成調試和打包,非常的方便。
使用Resin進行java Web項目的開發和調試
這里篇幅有限,不可能講太多,我只對實際中最有用的部分做介紹。
Resin中如果定義了錯誤頁,則出錯后最常見的一大串Exception不會被看到,直接跳轉到錯誤頁。所以建議開發中先不設置錯誤頁。jsp錯誤中最常見的就是Nullpoint Exception,其次是名稱的拼寫錯誤。錯誤也可以在Resin安裝目錄下的log目錄下的stderr.log中找到。通過對該log文件的分析可以看到很多有用的錯誤信息。
在調試jsp的時候,如果定義了compile為true,jsp先被翻譯成Servlet的java文件,再被編譯成class文件。可以在你自己的work目錄中找到該文件。java的名稱在Resin中是這樣子定義的:原先的jsp文件名前加下劃線,再加上_jsp這個字樣。所以在java 應用中的命名不要以_jsp結尾,也不要出現中文名稱等字符;其實名稱以_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”)是靜態編碼,這是Resin為了解決某些環境下還是不能正常顯示而設置的。在Resin的配置文件(/conf/resin.conf)中,可以通過設置<jsp precompile='true' static-encoding='false' recompile-on-error='true'/>中的static-encoding屬性為true或者false,來控制是否靜態編碼。其實在Resin容器的內部,所有的字符都是按照iso-8859-1來處理的。iso-8859-1是一個大字符集,雖然中文的gb2312和8859在字的定義上有不同,但是編碼是包容了gb2312的。按照解決多國語言的方法,在純英文平臺上用iso-8859-1處理內部編碼,而把字符的顯示推向客戶端的機器。所以這樣只要編碼是正確的,
在頁面上顯示中文就不存在問題。Tomcat3.2不方便的地方是Tomcat對數據庫的操作中文支持不好,需要手動在java Bean或者Servlet中硬編碼。通過測試,在Resin中完全沒有這個問題。Tomcat4.0解決了這個問題。不過個人習慣來講還是覺得resin在配置方面方便一些。
在Resin中可以自動解決引入的jar。這個在使用特殊的類或者第三方提供的開發包非常有用。方法非常簡單:只要把該jar或者是zip拷貝到Resin安裝目錄下的lib目錄下面,重新啟動Resin,就可以了。如db2用到的db2java.zip文件,只要輕松拷貝到d:\resin\lib中就可以了。
Resin提供了對Jbuilder的集成調試。可以到:
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一樣調試jsp\servlet了,而且比Tomcat更方便。見圖2:
圖2
調試方法和用Tomcat調試一樣。
其他問題
使用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,這樣子就可以了。只要你曾經安裝過apache,resin可以自己找到httpd.conf文件所在的路徑。
使用命令行方式啟動Resin,如果改動了Resin.conf,Resin會自己重新啟動適應新的配置。這個很適合初期安裝時使用。
Resin對數據庫緩沖池的支持很好。在這里,它提供了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開發還是比較愉快的。只是沒有像Weblogic 或者WebSphere那樣子提供現成的管理控制臺而已。但是從穩定性和方便性來講,Resin個人認為比Tomcat要好很多。況且Resin還有提供了resin-cmp 和 resin-ejb,功能更強大。
posted @
2005-12-15 13:22 kelven 閱讀(2083) |
評論 (0) |
編輯 收藏