Datasource對象是由Tomcat提供的,因而需要使用JNDI來獲得Datasouce
在Javax.naming 中提供了Context接口,
數據源的配置涉及到Server.xml和web.xml,需要在server.xml中加入如下內容:說明一下:我的數據庫是MYsql
<Context path="/text" docBase="d:/upload" debug="0">
<Resource name="jdbc/testDb" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/testDB">\\數據源的名稱
<parameter><name>username</name><value>root</value></parameter>數據庫的名稱
<parameter><name>password</name><value>password</value></parameter>數據庫密碼
<parameter><name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value></parameter>\\要加載的驅動
<parameter><name>url</name>
<value>jdbc:mysql://172.20.0.73/rk?</value></parameter>\\要連接的URL
</ResourceParams>
</Context>
具體還有一些詳細的選項例如:MaxActive等,參加Server.xml中說明
另外在Web.xml中加入如下內容:
<description>test connection</description>\\描述
<res-ref-name>jdbc/testDB</res-ref-name>\\名稱與上對應
<res-type>javax.sql.DataSource</res-type>\\與上對應
<res-auth>Container</res-auth>\\與上一置
</resource-ref>
配置以上內容后,只要在你的Jsp或Javabean 中按以下方式創建連接,就可以
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/testDB");
conn = ds.getConnection();
以上代碼均測試成功,但是在Server.xml中配置數據庫的URL中我不能加入useUnicode=true&characterEncoding=GBK,所以從數據庫中取出來的漢字都是????
剛剛解決了上面的問題,可以這樣加入
jdbc:mysql://172.20.0.73/rk?useUnicode=true&characterEncoding=GBK
因為&是特殊字符
我用如下代碼來解決這個問題:
public static String toChinese(String strvalue) {
try{
if(strvalue==null)
{
return null;
}
else {
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}
寫Blog 的時候停了幾次電,真是郁悶,數據庫的連接池的概念我現在還是不太清晰,加強學習,看書去了1
posted @
2005-10-27 13:03 rkind 閱讀(193) |
評論 (0) |
編輯 收藏
今天做了一個新聞上傳的頁面,遇到一些問題
首先是數據庫的設計,考慮新聞有一個優先級的問題,因些我在表中需要設置一個recommand的字段,我想設成一個布爾類型,可是發現在mysql里面沒有這種類型,查查了都推薦使用ENUM這種類型,可以設置兩個值
一個設成true一個設成false,然后我在JSP中就可以通過Insert一個布爾值往這個字段傳值,
今天在表單中使用了單選框,原來以為需要使用request.getparameterValus,后來發現不用
最后在上傳新聞的過程中,tomcat提示一個叫invalid column 什么 key的錯誤,調試了很多次才發現是表中的
有一個ID 的主建,本來是自動增長的,可是死了幾次機,居然變成不是自動增長的,狂暈
這幾天電壓總是不夠,一天死很多次機,搞的現在一個勁按ctrl+s
posted @
2005-10-27 13:02 rkind 閱讀(161) |
評論 (0) |
編輯 收藏
今天在原來上傳文件頁面的基礎上,想添加一段文件的簡介
因為同時要上傳文件,所以ENCTYPE="multipart/form-data" 必須要加在form里面
可是這樣的話,我再servlet里面用request.getParameter()方法無論如何都只是獲得null值,
不是一般的郁悶,百度了一下,有人出現了同樣的問題可是它用的是jspsmartupload組件實現文件上傳的,
而我用的commons fileupload組件,仔細看了一下這個組件的api,可是英語太差了,沒有發現相關的信息
我又嘗試用session傳遞參數,可是發現有點麻煩,因為在表單提交之時你就得賦給session表單上它的數值,
這似乎要javascript,可是偶也不會,
后來只有google了,搜索了一些中文網頁,也沒有找到資料,試試不限制語言,呵呵呵,一大片,后來被俺發
現了這個
I cannot read the submitter using request.getParameter("submitter") (it returns null). ]
Situation:
javax.servlet.HttpServletRequest.getParameter(String) returns null when the ContentType is multipart/form-data
Solutions:
Solution A:
1. download http://www.servlets.com/cos/index.html
2. invoke getParameters() on com.oreilly.servlet.MultipartRequest
Solution B:
1. download http://jakarta.apache.org/commons/sandbox/fileupload/
2. invoke readHeaders() in
org.apache.commons.fileupload.MultipartStream
Solution C:
1. download http://users.boone.net/wbrameld/multipartformdata/
2. invoke getParameter on
com.bigfoot.bugar.servlet.http.MultipartFormData
Solution D:
Use Struts. Struts 1.1 handles this automatically.
說是不詳細,接著往下看,另一種解決方法
> Solution B:
> 1. download
> http://jakarta.apache.org/commons/sandbox/fileupload/
> 2. invoke readHeaders() in
> org.apache.commons.fileupload.MultipartStream
The Solution B as given by my dear friend is a bit hectic and a bit complex :(
We can try the following solution which I found much simpler (at least in usage).
1. Download one of the versions of UploadFile from http://jakarta.apache.org/commons/fileupload/
2. Invoke parseRequest(request) on org.apache.commons.fileupload.FileUploadBase which returns list of org.apache.commons.fileupload.FileItem objects.
3. Invoke isFormField() on each of the FileItem objects. This determines whether the file item is a form paramater or stream of uploaded file.
4. Invoke getFieldName() to get parameter name and getString() to get parameter value on FileItem if it's a form parameter. Invoke write(java.io.File) on FileItem to save the uploaded file stream to a file if the FileItem is not a form parameter.
按照上面的步驟來,果然一切都ok,GOOGLE真不錯,主要是getFieldName和getString,
雖然說這種做法有一點麻煩,但稍微判斷加工一下,總比獲取不到強
posted @
2005-10-27 13:01 rkind 閱讀(858) |
評論 (0) |
編輯 收藏
大家在JSP的開發過程中,經常出現中文亂碼的問題,可能一至困擾著您,我現在把我在JSP開發中遇到的中文亂碼的問題及解決辦法寫出來供大家參考。
一、JSP頁面顯示亂碼
下面的顯示頁面(display.jsp)就出現亂碼:
<html>
<head>
<title>JSP的中文處理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP的中文處理");
%>
</body>
</html>
對不同的WEB服務器和不同的JDK版本,處理結果就不一樣。原因:服務器使用的編碼方式不同和瀏覽器對不同的字符顯示結果不同而導致的。解決辦法:在JSP頁面中指定編碼方式(gb2312),即在頁面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除亂碼了。完整頁面如下:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP的中文處理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP的中文處理");
%>
</body>
</html>
二、表單提交中文時出現亂碼
下面是一個提交頁面(submit.jsp),代碼如下:
<html>
<head>
<title>JSP的中文處理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form name="form1" method="post" action="process.jsp">
<div align="center">
<input type="text" name="name">
<input type="submit" name="Submit" value="Submit">
</div>
</form>
</body>
</html>
下面是處理頁面(process.jsp)代碼:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP的中文處理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%=request.getParameter("name")%>
</body>
</html>
如果submit.jsp提交英文字符能正確顯示,如果提交中文時就會出現亂碼。原因:瀏覽器默認使用UTF-8編碼方式來發送請求,而UTF-8和GB2312編碼方式表示字符時不一樣,這樣就出現了不能識別字符。解決辦法:通過request.seCharacterEncoding("gb2312")對請求進行統一編碼,就實現了中文的正常顯示。修改后的process.jsp代碼如下:
<%@ page contentType="text/html; charset=gb2312"%>
<%
request.seCharacterEncoding("gb2312");
%>
<html>
<head>
<title>JSP的中文處理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%=request.getParameter("name")%>
</body>
</html>
三、數據庫連接出現亂碼
只要涉及中文的地方全部是亂碼,解決辦法:在數據庫的數據庫URL中加上useUnicode=true&characterEncoding=GBK就OK了。
四、數據庫的顯示亂碼
在mysql4.1.0中,varchar類型,text類型就會出現中文亂碼,對于varchar類型把它設為binary屬性就可以解決中文問題,對于text類型就要用一個編碼轉換類來處理,實現如下:
public class Convert {
/** 把ISO-8859-1碼轉換成GB2312
*/
public static String ISOtoGB(String iso){
String gb;
try{
if(iso.equals("") || iso == null){
return "";
}
else{
iso = iso.trim();
gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
return gb;
}
}
catch(Exception e){
System.err.print("編碼轉換錯誤:"+e.getMessage());
return "";
}
}
}
把它編譯成class,就可以調用Convert類的靜態方法ISOtoGB()來轉換編碼。
如果你還有什么不懂之處:我給大家推薦一個好的JSP-JAVA網站:
http://www.phy.hbnu.edu.cn/dsp/
Linux和Java是互聯網的寵兒,更是互聯網時代的兩頭雄師, Linux的網絡安全性和開放源代碼,Java的平臺獨立性和安全易用性,正好符合Internet平臺的要求,Linux和Java真是天生一對鴛鴦。雙獅資源網給你提供了最好的Linux和Java學習資源, 歡迎大家多多訪問并宣傳:
http://www.phy.hbnu.edu.cn/dsp/
posted @
2005-10-27 13:00 rkind 閱讀(139) |
評論 (0) |
編輯 收藏
前言:
本來我都是使用JBuilderX當主力IDE、但使用了Eclipse后
發現...Eclipse原來也這么好用...漸漸的就愛上了它......
Eclipse優點:免費、程序代碼排版功能、有中文化包、可增
設許多功能強大的外掛、支持多種操作系統(Windows、
Linux、Solaris、Mac OSX)..等等。
開此篇討論串的目的,是希望能將Eclipse的一些使用技巧集
合起來...歡迎大家繼續補充下去...由于Eclipse的版本眾多
,希望補充的先進們能順便說明一下您所使用的版本~
Eclipse網站:
http://www.eclipse.org/
Eclipse中文化教學:JavaWorld站內文章參考
(使用版本:Eclipse 2.1.2 Release + 中文化)
熱鍵篇:
Template:Alt + /
修改處:窗口->喜好設定->工作臺->按鍵->編輯->內容輔助。
個人習慣:Shift+SPACE(空白)。
簡易說明:編輯程序代碼時,打sysout +Template啟動鍵,就
會自動出現:System.out.println(); 。
設定Template的格式:窗口->喜好設定->Java->編輯器->模板。
程序代碼自動排版:Ctrl+Shift+F
修改處:窗口->喜好設定->工作臺->按鍵->程序代碼->格式。
個人習慣:Alt+Z。
自動排版設定:窗口->喜好設定->Java->程序代碼格式制作程序。
樣式頁面->將插入tab(而非空格鍵)以內縮,該選項取消勾選
,下面空格數目填4,這樣在自動編排時會以空格4作縮排。
快速執行程序:Ctrl + F11
個人習慣:ALT+X
修改處:窗口->喜好設定->工作臺->按鍵->執行->啟動前一次的啟動作業。
簡易說明:第一次執行時,它會詢問您執行模式,
設置好后,以后只要按這個熱鍵,它就會快速執行。
<ALT+Z(排版完)、ATL+X(執行)>..我覺得很順手^___^
自動匯入所需要的類別:Ctrl+Shift+O
簡易說明:
假設我們沒有Import任何類別時,當我們在程序里打入:
BufferedReader buf =
new BufferedReader(new InputStreamReader(System.in));
此時Eclipse會警示說沒有匯入類別,這時我們只要按下Ctrl+Shift+O
,它就會自動幫我們Import類別。
查看使用類別的原始碼:Ctrl+鼠標左鍵點擊
簡易說明:可以看到您所使用類別的原始碼。
將選取的文字批注起來:Ctrl+/
簡易說明:Debug時很方便。
修改處:窗口->喜好設定->工作臺->按鍵->程序代碼->批注
視景切換:Ctrl+F8
個人習慣:Alt+S。
修改處:窗口->喜好設定->工作臺->按鍵->窗口->下一個視景。
簡易說明:可以方便我們快速切換編輯、除錯等視景。
密技篇:
一套Eclipse可同時切換,英文、繁體、簡體顯示:
1.首先要先安裝完中文化包。
2.在桌面的快捷方式后面加上參數即可,
英文-> -nl "zh_US"
繁體-> -nl "zh_TW"
簡體-> -nl "zh_CN"。
(其它語系以此類推)
像我2.1.2中文化后,我在我桌面的Eclipse快捷方式加入參數-n1 "zh_US"。
"C:\Program Files\eclipse\eclipse.exe" -n "zh_US"
接口就會變回英文語系嚕。
利用Eclipse,在Word編輯文書時可不必將程序代碼重新編排:
將Eclipse程序編輯區的程序代碼整個復制下來(Ctrl+C),直接貼(Ctrl+V)到
Word或WordPad上,您將會發現在Word里的程序代碼格式,跟Eclipse
所設定的完全一樣,包括字型、縮排、關鍵詞顏色。我曾試過JBuilder
、GEL、NetBeans...使用復制貼上時,只有縮排格式一樣,字型、顏
色等都不會改變。
外掛篇:
外掛安裝:將外掛包下載回來后,將其解壓縮后,您會發現features、
plugins這2個數據夾,將里面的東西都復制或移動到Eclipse的features
、plugins數據夾內后,重新啟動Eclipse即可。
讓Eclipse可以像JBuilderX一樣使用拖拉方式建構GUI的外掛:
1.Jigloo SWT/Swing GUI Builder :
http://cloudgarden.com/jigloo/index.html
下載此版本:Jigloo plugin for Eclipse (using Java 1.4 or 1.5)
安裝后即可由檔案->新建->其它->GUI Form選取要建構的GUI類型。
2.Eclipse Visual Editor Project:
http://www.eclipse.org/vep/
點選下方Download Page,再點選Latest Release 0.5.0進入下載。
除了VE-runtime-0.5.0.zip要下載外,以下這2個也要:
EMF build 1.1.1: (build page) (download zip)
GEF Build 2.1.2: (build page) (download zip)
3.0 M8版本,請下載:
EMF build I200403250631
GEF Build I20040330
VE-runtime-1.0M1
安裝成功后,便可由File->New->Visual Class開始UI設計。
安裝成功后,即可由新建->Java->AWT與Swing里選擇
所要建構的GUI類型開始進行設計。VE必須配合著對應
版本,才能正常使用,否則即使安裝成功,使用上仍會
有問題。
使用Eclipse來開發JSP程序:
外掛名稱:lomboz(下載頁面)
http://forge.objectweb.org/project/showfiles.php?group_id=97
請選擇適合自己版本的lomboz下載,lomboz.212.p1.zip表示2.1.2版,
lomboz.3m7.zip表示M7版本....以此類推。
lomboz安裝以及設置教學:
Eclipse開發JSP-教學文件
Java轉exe篇:
實現方式:Eclipse搭配JSmooth(免費)。
1.先由Eclipse制作包含Manifest的JAR。
制作教學
2.使用JSmooth將做好的JAR包裝成EXE。
JSmooth下載頁面:
http://jsmooth.sourceforge.net/index.php
3.制作完成的exe文件,可在有裝置JRE的Windows上執行。
Eclipse-Java編輯器最佳設定:
編輯器字型設定:工作臺->字型->Java編輯器文字字型。
(建議設定Courier New -regular 10)
編輯器相關設定:窗口->喜好設定->Java->編輯器
外觀:顯示行號、強調對稱顯示的方括號、強調顯示現行行、
顯示打印邊距,將其勾選,Tab寬度設4,打印編距字段設80。
程序代碼協助:采預設即可。
語法:可設定關鍵詞、字符串等等的顯示顏色。
附注:采預設即可。
輸入:全部字段都勾選。
浮動說明:采預設即可。
導覽:采預設即可。
使自動排版排出來的效果,最符合Java設計慣例的設定:
自動排版設定:窗口->喜好設定->Java->程序代碼制作格式。
換行:全部不勾選。
分行:行長度上限設:80。
樣式:只將強制轉型后插入空白勾選。
內縮空格數目:設為4。
Eclipse的教學文件:
Eclipse 3.0系列熱鍵表 - 中英對照解說版 (by sungo) ~New~
Window+GCC+CDT用Eclipse開發C、C++ (by sungo) ~New~
其它:
擴充Eclipse的Java 開發工具(中文)
使用Eclipse開發J2EE 應用程序(中文)
使用Eclipse平臺進行除錯(中文)
用Eclipse進行XML 開發(中文)
開發Eclipse外掛程序(中文)
國際化您的Eclipse外掛程序(英文)
將Swing編輯器加入Eclipse(英文)
如何測試你的Eclipse plug-in符合國際市場需求(英文)
Eclipse的相關網站:
http://eclipse-plugins.2y.net/eclipse/index.jsp
http://www.eclipseplugincentral.com/
Eclipse相關教學[簡體]
寫程序寫到很累了,想休息一下??玩玩小Game是
不錯的選擇,下面介紹使用Eclipse玩Game的Plug-in。
補充外掛篇:
Eclipse-Games:
http://eclipse-games.sourceforge.net/
版本選:Latest Release 3.0.1 (Release Notes) Sat, 3 Jan 2004
外掛安裝完后,重新開啟Eclipse。
窗口->自訂視景->其它->勾選Game Actions。
再將Eclipse關閉,重新再啟動,就可以開始玩嚕。
(共有4種:采地雷I、采地雷II、貪食蛇、倉庫番。)
(Eclipse 2.1.2 +中文化 玩Game -倉庫番)
補充:(于Eclipse使用assertion機制)
Eclipse版本:2.1.3 release。
JDK1.4版新加入的assertion機制(關鍵詞:assert),由于JDK1.4編譯器
預設是兼容1.3,所以要使用assert必須在編譯時加上-source 1.4的參數。
C:\>javac -source 1.4 XXX.java
執行時則必須加-ea 或-enableassertions參數啟動。
C:\>java -ea XXX
如要在Eclipse中使用assertion機制,請作以下設定:
設定一:(編譯設定)
Windows->Preferance->Java->Compiler->Compliance and Classfiles
頁面。將..JDK Compliance level->Compiler compliance level調成1.4。
設定二:(執行設定)
Run->Run->(x)=Arguments頁面,在VM arguments加入-da參數,按下
Run button便可看到啟動assertion后的執行結果。
(Eclipse 2.1.3 release + assertion測試)
<assert判別為false,所以show出AssertionError>
新版(m8+)的eclipse可以設vm arguments
另外提供一種設法,是在eclipse啟動時加入vm arguments(跟加大eclipse預設內存大小的方式一樣)
這樣就不用每次run都得需去設vm arguments
posted @
2005-10-27 13:00 rkind 閱讀(173) |
評論 (0) |
編輯 收藏
一、J2EE提出的背景
1、 企業級應用框架的需求
在許多企業級應用中,例如數據庫連接、郵件服務、事務處理等都是一些通用企業需求模塊,這些模塊如果每次再開發中都由開發人員來完成的話,將會造成開發周期長和代碼可靠性差等問題。于是許多大公司開發了自己的通用模塊服務。這些服務性的軟件系列同陳為中間件。
2、 為了通用必須要提出規范,不然無法達到通用
在上面的需求基礎之上,許多公司都開發了自己的中間件,但其與用戶的溝通都各有不同,從而導致用戶無法將各個公司不同的中間件組裝在一塊為自己服務。從而產生瓶頸。于是提出標準的概念。其實J2EE就是基于JAVA技術的一系列標準。
注:中間件的解釋 中間件處在操作系統和更高一級應用程序之間。他充當的功能是:將應用程序運行環境與操作系統隔離,從而實現應用程序開發者不必為更多系統問題憂慮,而直接關注該應用程序在解決問題上的能力 。我們后面說到的容器的概念就是中間件的一種。
二、相關名詞解釋
容器:充當中間件的角色
WEB容器:給處于其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變量接口交互,不必關注其它系統問題。主要有WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵守J2EE規范中的WEB APPLICATION 標準。我們把遵守以上標準的WEB服務器就叫做J2EE中的WEB容器。
EJB容器:Enterprise java bean 容器。更具有行業領域特色。他提供給運行在其中的組件EJB各種管理功能。只要滿足J2EE規范的EJB放入該容器,馬上就會被容器進行高效率的管理。并且可以通過現成的接口來獲得系統級別的服務。例如郵件服務、事務管理。
WEB容器和EJB容器在原理上是大體相同的,更多的區別是被隔離的外界環境。WEB容器更多的是跟基于HTTP的請求打交道。而EJB容器不是。它是更多的跟數據庫、其它服務打交道。但他們都是把與外界的交互實現從而減輕應用程序的負擔。例如SERVLET不用關心HTTP的細節,直接引用環境變量session,request,response就行、EJB不用關心數據庫連接速度、各種事務控制,直接由容器來完成。
RMI/IIOP:遠程方法調用/internet對象請求中介協議,他們主要用于通過遠程調用服務。例如,遠程有一臺計算機上運行一個程序,它提供股票分析服務,我們可以在本地計算機上實現對其直接調用。當然這是要通過一定的規范才能在異構的系統之間進行通信。RMI是JAVA特有的。
JNDI:JAVA命名目錄服務。主要提供的功能是:提供一個目錄系統,讓其它各地的應用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應用程序的功能。
JMS:JAVA消息服務。主要實現各個應用程序之間的通訊。包括點對點和廣播。
JAVAMAIL:JAVA郵件服務。提供郵件的存儲、傳輸功能。他是JAVA編程中實現郵件功能的核心。相當MS中的EXCHANGE開發包。
JTA:JAVA事務服務。提供各種分布式事務服務。應用程序只需調用其提供的接口即可。
JAF:JAVA安全認證框架。提供一些安全控制方面的框架。讓開發者通過各種部署和自定義實現自己的個性安全控制策略。
EAI:企業應用集成。是一種概念,從而牽涉到好多技術。J2EE技術是一種很好的集成實現。
三、J2EE的優越性
1、 基于JAVA 技術,平臺無關性表現突出
2、 開放的標準,許多大型公司已經實現了對該規范支持的應用服務器。如BEA ,IBM,ORACLE等。
3、 提供相當專業的通用軟件服務。
4、 提供了一個優秀的企業級應用程序框架,對快速高質量開發打下基礎
四、現狀
J2EE是由SUN 公司開發的一套企業級應用規范?,F在最高版本是1.4。支持J2EE的應用服務器有IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER 等。.
posted @
2005-10-27 12:59 rkind 閱讀(157) |
評論 (0) |
編輯 收藏
1
java中當前日期的獲取方法
舊方法(已不常用):
int year = 0;
int month = 0;
int day = 0;
java.util.Date now = new java.util.Date();
year = now.getYear() + 1900;
month = now.getMonth() + 1;
day = now.getDate();
新方法:
SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-mm-dd”);
Calendar cal_today = Calendar.getInstance();
int m_day = cal_today.get(cal_today.DAY_OF_MONTH);
int m_month = cal_today.get(cal_today.MONTH) + 1;
int m_hour = cal_today.get(cal_today.HOUR_OF_DAY);
int m_minute = cal_today.get(cal_today.MINUTE);
String d = formatter.format(cal_today.getTime());
我采用前一種方法實現了按日期生成文件夾.
2
jsp傳給mysql當前系統時間的方法
insert into youDB(date) values(NOW())
不過這樣只能獲得當前日期
3
判斷要建立的文件夾是否存在,如果不則新建立一個文件夾
int year,mm,dd;
String month,day;
Date d1=new Date();
year=d1.getYear()+1900;
mm=d1.getMonth()+1;
if (mm<10) month="0"+mm;
else month=""+mm;
dd=d1.getDate();
if (dd<10) day="0"+dd;
else day=""+dd;
String filepath="d:\\upload"+"\\"+year+month+day+"\\";
if(!new File(filepath).isDirectory())
new File(filepath).mkdirs();
posted @
2005-10-27 12:59 rkind 閱讀(310) |
評論 (0) |
編輯 收藏
今天在linux下完成了配置了jsp+tomcat+mysql,
因為linux沒怎么用過,也是邊學邊查
裝tomcat和jdk比較順利,可是當我把自己做的那個使用mysql注冊的jsp+javaben上傳時,卻出現了http 500的錯誤,因為tomcat 在linux下看不到調試情況,只能猜了,mysql的問題,驅動沒加載?
先下載好驅動org.gjt.mm.mysql.Driver放到/usr/local/tomcat 下面的common /lib目錄下
然后在vi /etc/profile
添加上面那個jar文件.
上面操作完成以后,運行 jsp提示訪問被拒絕,我用的phpmyadmin做mysql的前臺,修改localhost的權限后,一切ok了
對了,還有個發現,用tomcat的admin管理界面添加任何東西以后,都要再點一次上面的commit change,
要不再一啟動又回到以前
學了vi的兩個命令,按i是插入的意思,退出時遇到了麻煩,先按esc,再按Q怎么也退出不了,
后來用shift+zz才退出了
剛看到vi的資料,原來剛才少看了一個: 郁悶啊{說了半天,可能你的文件已經編輯完成了,但如何存盤呢?現在我們還是保持在命令狀態,按:w按后回車即完成了存盤工作,而退出vi返回到Linux的命令是:q,這兩個命令也可以組合使用,如:wq代表存盤退出。
好了,說了半天,可能你的頭已經大了,上面講到的那些只是vi中最常用的功能,至于其它的功能你可以在使用中慢慢體會。順便說一句,不要強記那些命令,它們看起來多而毫無規律,多用幾次自然就熟練了,現在我覺得比Windows中的記事本方便多了。}
posted @
2005-10-27 12:58 rkind 閱讀(227) |
評論 (0) |
編輯 收藏
本文主要參考了,JSP+javabean循序漸進
開發平臺:winxp+tomcat4+mysql+javabean
在實現在了用servlet注冊還有登錄以后,打算做一個注冊頁面
首先創建一個表:username VARCHAR2(20) 用戶名
password VARCHAR2(20) 密碼
email VARCHAR2(30) Email地址
homepage VARCHAR2(50) 主頁
signs VARCHAR2(200) 簽名
regtime DATE 注冊時 ?。@個date我沒有實現
主要有三個jsp頁面:
addnewuser.jsp,主要用來實現注冊用戶的界面,
doadduser.jsp 實現填加到數據庫中的具體功能
listuser.jsp 來實現顯示所有用戶信息
兩個bean:
db.java實現數據庫的操作,主要有兩個方法public ResultSet executeQuery(sql)返回rs用來進行記錄的查詢
public boolean executeUpdate(String sql)用來進行記錄的更新
adduser.java繼承了db類用來提供所需更新和查詢的sql語句;
我直接調用原文的代碼時后發現調用了span什么,不太懂,而且有很多字符不對,所以調試時的問題基本上都是html代碼的問題.這是一個僅有基本功能,很多方面還需進一步完善,比如實現注冊時間(雖然這不難,可是我還沒看util.date和sql.date 區別),email地址的識別,連登錄都沒有做?。海?,我發現基于這種bean結構的功能很吸引人,比servlet要好,膚淺之見
源碼如下:db.java
package rkind;
import java.net.*;
import java.sql.*;
import java.lang.*;
import java.io.*;
import java.util.*;
public class db {
//成員變量初始化
Connection conn = null; //數據庫連接
ResultSet rs = null; //記錄集
String Username=""; //用戶名
String Password=""; //密碼
String Email=""; //email
String Homepage=""; //主頁
String Signs=""; //簽名
String url="jdbc:mysql://172.20.0.73/rk";
//db的構建器
public db() {
try {
//注冊數據庫驅動程序為Oracle驅動
String name="org.gjt.mm.mysql.Driver";
Class.forName(name);
conn = DriverManager.getConnection(url,"root","你的密碼");
System.out.println("success");
}
catch(Exception e) {
//這樣寫是為了方便調試程序,出錯打印mydb()就知道在什么地方出錯了
System.err.println("mydb(): " + e.getMessage());
}
}
//executeQuery方法用于進行記錄的查詢操作
//入口參數為sql語句,返回ResultSet對象
public ResultSet executeQuery(String sql) {
rs = null;
try {
//建立數據庫連接,使用Oracle的一種thin連接方式,demo為主機名字,demodb為數據庫,后面的兩個
//demo為用戶名和密碼
Statement stmt = conn.createStatement();
//執行數據庫查詢操作
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println("db.executeQuery: " + ex.getMessage());
}
return rs;
}
//executeUpdate方法用于進行add或者update記錄的操作
//入口參數為sql語句,成功返回true,否則為false
public boolean executeUpdate(String sql) {
boolean bupdate=false;
rs = null;
try {
//建立數據庫連接,其它參數說明同上面的一樣
Statement stmt = conn.createStatement();
int rowCount = stmt.executeUpdate(sql);
//如果不成功,bupdate就會返回0
if(rowCount!=0)bupdate=true;
}
catch(SQLException ex) {
//打印出錯信息
System.err.println("db.executeUpdate: " + ex.getMessage());
}
return bupdate;
}
//toChinese方法用于將一個字符串進行中文處理
//否則將會是???這樣的字符串
public static String toChinese(String strvalue) {
try{
if(strvalue==null)
{
return null;
}
else {
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}
}
adduser.java
package rkind;
import java.sql.*;
import java.lang.*;
import java.util.Date;
//adduser由db派生出來,擁有db的成員變量和方法
public class adduser extends db {
//構建器
public boolean addNewUser(){
boolean boadduser=false;
try {
//進行用戶注冊的記錄添加操作,生成sql語句
String sSql=new String("insert into demo(username,password,email,homepage, signs)");
sSql=sSql+ " values('"+Username+"','"+Password+"','"+Email+"','"+Homepage +"','"+Signs+"')";
//一種調試的方法,可以打印出sql語句,以便于查看錯誤
System.out.println(sSql);
//調用父類的executeUpdate方法,并根據成功以否來設置返回值
if(super.executeUpdate(sSql))boadduser=true;
}
catch(Exception ex) {
//出錯處理
System.err.println("adduser.addNewUser: " + ex.getMessage());
}finally{
//無論是否出錯,都要返回值
return boadduser;
}
}
//checkUser()方法用來檢查用戶名是否重復
//如果重復返回一個false
public boolean checkUser(){
boolean boadduser=false;
try {
//構建sql查詢語句
String sSql="select * from demo where username='"+Username+"'";
//調用父類的executeQuery方法
if((super.executeQuery(sSql)).next()){
//查詢出來的記錄集為空
boadduser=false;
}else{
boadduser=true;
}
}
catch(Exception ex) {
//出錯處理
System.err.println("adduser.addNewUser: " + ex.getMessage());
}finally{
//返回值
return boadduser;
}
}
public String getUsername(){ return Username;}
public void setUsername(String newUsername){
//用戶名有可能是中文,需要進行轉換
Username =db.toChinese(newUsername);}
//屬性密碼Password的get/set方法
public String getPassword(){
return Password;}
public void setPassword(String newPassword){ Password = newPassword;}
//屬性Email的get/set方法
public String getEmail(){ return Email;}
public void setEmail(String newEmail){ Email = newEmail;}
//屬性主頁Homepage的get/set方法
public String getHomepage(){ return Homepage;}
public void setHomepage(String newHomepage){ Homepage = newHomepage;}
//屬性主頁Signs的get/set方法
public String getSigns(){ return Signs;}
public void setSigns(String newSigns){
//簽名有可能是中文,需要進行轉換
Signs = db.toChinese(newSigns);}
}
newuser.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<% response.setHeader("Expires","0"); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>新用戶注冊 </title>
</head>
<body bgcolor="#FFFAD9">
<script language="JavaScript">
function valid(form)
{
if(form.username.value.length==0)
{
alert("Please enter username!");
form.username.focus();
return false;
}
if(form.Password.value==form.password1.value){
alert("你輸入的驗證密碼不正確");
form.password1.focus();
}
}
</script>
<p align="center"><font color="#8484FF"><strong><big>新個人
用戶注冊 </font>
<form onsubmit="return valid(this)" method="POST" name="formreg" action="donewuser.jsp">
<div align="center"><center>
<table width="49%" height="281"
border="1"
cellspacing="0">
<tr>
<td width="27%" bgcolor="#DDDDFF" align="center">用戶名:
<td width="73%" bgcolor="#DDDDFF"><input type="text"
name="username" size="20" >
<font color="#00CCFF"><b>* </b></font>
</tr>
<tr>
<td width="27%" bgcolor="#DDDDFF" align="center">輸入密碼:
<td width="73%" bgcolor="#DDDDFF"><input type="password" name="password" size="20"
>
<font color="#FF0000"><b>* </b></font>
</tr>
<tr>
<td width="27%" bgcolor="#DDDDFF" align="center">校驗密碼:
<td width="73%" bgcolor="#DDDDFF"><input type="password" name="password1" size="20"
>
<font color="#FF0000"><b>* </b></font>
</tr>
<tr>
<td width="27%" bgcolor="#DDDDFF" align="center">E-mail
<td width="73%" bgcolor="#DDDDFF"><input type="text" name="email" size="20" >
<font color="#FF0000">* </font>
</tr>
<tr>
<td width="27%" bgcolor="#DDDDFF" align="center">主頁地址:
<td width="73%" bgcolor="#DDDDFF"><input type="text" name="homepage" size="20"
value="http://">
</tr>
<tr>
<td width="100%" height="20" colspan="2" bgcolor="#DDDDFF"><br>
<center>
<font color="red"><b>介紹自己: (介紹自己,不能超過120字)</span></b></font>
</center> </tr>
<td width="70%">
<tr>
<td><textarea rows="6"
name="signs" cols="30" ></textarea>
</tr>
<tr>
<td width="30%" bgcolor="#DDDDFF" colspan="2"><center>
<p>
<input
type="submit" value="遞交" onClick="return checkmsg();" name="B1" >
<input type="reset" value="清除" name="B2" >
</center>
</tr>
</table>
</div>
</form>
<hr size="1" color="#FF0000">
<p align="center">Better View:800*600 Best View:1024x768
為了本系統能夠更好的為您服務,請使用IE4.0或以上版本瀏覽器
<font color="#000000"></font><a href="javascript:%20newGuide("copyright.htm")"
target="_self">版權所有 </a>
</body>
</html>
listuser.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<% response.setHeader("Expires","0"); %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="org.gjt.mm.mysql.Driver.*" %>
<!--生成一個JavaBean:lyf.db的實例-->
<jsp:useBean id="db" class="rkind.db" scope="request"/>
<jsp:setProperty name="db" property="*"/>
<%
java.lang.String strSQL; //SQL語句
int intPageSize; //一頁顯示的記錄數
int intRowCount; //記錄總數
int intPageCount; //總頁數
int intPage; //待顯示頁碼
java.lang.String strPage;
int i,j,k;
//設置一頁顯示的記錄數
intPageSize = 15;
//取得待顯示頁碼
strPage = request.getParameter("page");
if(strPage==null){//表明在QueryString中沒有page這一個參數,此時顯示第一頁數據
intPage = 1;
}
else{//將字符串轉換成整型
intPage = java.lang.Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}
//獲取記錄總數
strSQL = "select count(*) from demo";
ResultSet result = db.executeQuery(strSQL); //執行SQL語句并取得結果集
result.next(); //記錄集剛打開的時候,指針位于第一條記錄之前
intRowCount = result.getInt(1);
result.close(); //關閉結果集
//記算總頁數
intPageCount = (intRowCount+intPageSize-1) / intPageSize;
//調整待顯示的頁碼
if(intPage>intPageCount) intPage = intPageCount;
strSQL="select * from demo ";
//執行SQL語句并取得結果集
result = db.executeQuery(strSQL);
//將記錄指針定位到待顯示頁的第一條記錄上
i = (intPage-1) * intPageSize;
for(j=0;j<i;j++) result.next();
%>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>用戶列表</title>
</head>
<body bgcolor="#FFEBBD">
<div align="center"><center>
<table border="1"
borderColorDark="#FFFFFF" borderColorLight="#000000" cellspacing="0" height="22"
width="100%">
<tr bgcolor="#FFEBAD">
<td height="1" width="691" class="main">
第<%=intPage%>頁 共<%=intPageCount%>頁
<a href="listuser.jsp?page=0">首頁</a>
<%if(intPage>1){%><a href="listuser.jsp?page=<%=intPage-1%>">上一頁</a><%}%>
<%if(intPage<=1){%>上一頁<%}%>
<%if(intPage<intPageCount){%><a href="listuser.jsp?page=<%=intPage+1%>">下一頁</a><%}%>
<%if(intPage>=intPageCount){%>下一頁<%}%>
<a href="listuser.jsp?page=<%=intPageCount%>">尾頁</a>
第<input type="text" class="main" name="page" size="3" value="<%=intPage%>" tabindex="1">頁<input type="submit" class="main" value="go" name="B1" tabindex="2"><class="main">
</td></tr></table></form>
<table border="1" width="100%" cellspacing="0" bordercolorlight="#000000"
bordercolordark="#FFFFFF" class="main">
<tr bgcolor="#FFEBAD">
<td >
<div align="left">用戶名</div>
</td>
<td >
<p align="center">Email
</td>
<td >
<p align="center">主頁
</td>
<td>
<p align="center">登記時間
</td>
<td>
<p align="center">說明
</td>
</tr>
<%
//顯示數據
i = 0;
while(i<intPageSize && result.next()){
%>
<tr bgcolor="#FFEBAD">
<td>
<div align="left"><%=result.getString("username") %></div></td>
<td><div align="center"><%=result.getString("email") %></a></div></td>
<td><div align="center"><font color="#0000CC"><%=result.getString("homepage") %></font></div></td>
<td><div align="center"><font color="#FF6666"><%=result.getDate("regtime") %></font></div></td>
<td><div align="center"><font color="#0000FF"><%=result.getString("signs") %></font></div></td></tr>
<%
i++;
}
%>
</table>
<% result.close(); //關閉結果集%>
</body>
</html>
donewuser.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<% response.setHeader("Expires","0"); %>
<!--生成一個JavaBean:lyf.adduser的實例,id為adduser,生存范圍為page-->
<jsp:useBean id="adduser" class="rkind.adduser" scope="page"/>
<!--設置JavaBean中各個屬性的值,這會調用JavaBean中各個屬性的set方法,以便JavaBean得到正確的屬性值,”*”代表進行所有屬性的匹配-->
<jsp:setProperty name="adduser" property="*"/>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>用戶添加</title>
</head>
<body bgcolor="#FFEBBD">
<div align="center"><center>
<%
//調用lyf.adduser的checkUser()方法檢查是否有重復的用戶名
//如果有重復就顯示對應的信息
if(!adduser.checkUser())
{
//頁面文字輸出信息,使用jsp內置對象out的println方法,相當于asp中的response.write方法
out.println("對不起,這個用戶名"+adduser.getUsername()+"已經被申請了,請重新選擇!");
//return代表返回,運行時候碰到return就不會進行下面的處理了,功能相當于asp中的response.end
return;
}
%>
<%
//如果沒有用戶名重復的問題,調用lyf.adduser的addNewUser()方法來將用戶數據添加到數據庫中,并根據數據添加成功否來顯示對應的信息
if(adduser.addNewUser()){
%>
<H2>添加用戶成功!</P>
<%}else{%>
<H2>添加用戶失敗,請和管理員聯系!</P>
<%}%>
</BODY>
</HTML>
posted @
2005-10-27 12:56 rkind 閱讀(1259) |
評論 (0) |
編輯 收藏
今天在用java實現遠程連接mysql數據庫后,我打算做一個用servlet實現登錄注冊功能,
平臺是xp+mysql+tomcat4
從網上搜了一下:從一篇叫::::<<<Servlet學習筆記(四)-----使用Servlet處理用戶注冊和登陸>>
中搜到了一些源代碼,它有兩個html頁面:分別是login.html和register.html
然后分別調用了兩個servlet:LoginForm.java用來實現用戶和密碼的驗證,
和RegisterForm.java用來實現注冊,住數據庫中添加字段
由于加載的jdbc驅動不同,我加載的是mm.mysql-2.0.4-bin.jar稍微做了修改
遇到的問題
1,給的源碼中login頁面中的按紐用的是圖片,我都把其換成按紐,可是跳轉到reigster頁面的按鈕點擊時沒有任何反應,換了N次鏈接地址后,還是不管用,于是把type換成文字結果就OK了,用dreamweaver打開以后發現在表單里button只有提交和重置的功能,而不能用來實現鏈接頁面,
這說明我的html知識太過匱乏,因為主要做的是servlet,就湊合著用吧,以后還得加強html的學習
2在配置好web.xml后,發現點擊submit跳轉到正確的url,但是servlet并沒有起任何作用,
這時有點困惑,不知道從什么地方入手,還是先修改servlet加點print看看執行到哪一步才出的問題,
可是加入以后在ie中還是沒有反應,后來才想起來print應該是在tomcat的窗口中輸出,一看exception
是連接數據庫失敗,可是連接沒有問題,這點我比較肯定,那肯定是tomcat的jdbc驅動沒有加載
于是把mm.mysql-2.0.4-bin.jar拷到tomcat目錄下comman/lib目錄下,
一測試數據庫沒問題了,但是拋出一個nullpointer的異常,檢查了一下解決了
在這次做的過程中發現自己的基礎知識相當缺乏,尤其是html和sql語句,以后要加強學習,同時感覺自己效率太低了.
posted @
2005-10-27 12:56 rkind 閱讀(558) |
評論 (0) |
編輯 收藏