1. dwr - direct web remote
2. 推技術
3. http 長連接
4. Comet ---- HTTP長連接的“服務器推”技術
5. Jetty服務器 ---- Jetty 6 Web 服務器針對 AJAX、Comet 應用的特點進行了很多創新的改進,請參考文章“AJAX,Comet and Jetty”(請參見 參考資源)。
http://wiki.javascud.org/display/dwrcn/Home
http://wiki.springside.org.cn/display/springside/DWR
http://blog.csdn.net/octverve/archive/2007/09/26/1801826.aspx
posted @
2008-01-15 10:07 Super·shen BLOG 閱讀(310) |
評論 (0) |
編輯 收藏
學習共進!
MyEclipse 5.5 開發 Struts 1.2 簡單登錄的入門視頻(有聲+源碼) 2007-09-19 01:50
視頻講解: Netbeans 5.5 配置顯示中文 JavaDoc
入門視頻: 使用 MyEclipse 開發 Swing 應用
河南話講解 MyEclipse + Tomcat Servlet 開發入門視頻
MyEclipse + JPA + Toplink 開發視頻: 開發并運行第一個 JPA 項目
MyEclipse + JBoss 開發視頻: 配置,開發并運行第一個 EJB 3 項目
JDBC 入門視頻: 配置 SQL Explorer 插件, ODBC 數據源, 建表, 用 JDBC 讀取數據庫
Tomcat 入門視頻: 下載, 運行, 第一個 HelloWorld
Eclipse 入門視頻: 下載, 運行, 第一個 HelloWorld
Java 入門視頻: 下載, 安裝 JDK, 配置環境變量, HelloWorld
推薦給初學者的 Java 視頻
Netbeans 6.0 M10 開發 UML 項目的入門視頻
MyEclipse UML 入門視頻2 - 根據代碼反向工程生成 UML
MyEclipse UML 入門視頻
MyEclipse + Tomcat 開發視頻: 下載,安裝,配置,開發并運行Web項目
小電影: 用 MyEclipse 開發 Spring + Struts + Hibernate 的總結與操作視頻(9分鐘)
小電影: 用 MyEclipse 開發 Spring + Struts 的總結與操作視頻(7分鐘)
用MyEclipse 4 分鐘開發Spring整合Hibernate應用的視頻
在 Linux 上配置并運行 Tomcat 服務器(入門整理)(視頻)
Java 初學者入門視頻: 下載 JDK 和 Netbeans
Eclipse 配置顯示中文 javadoc 的視頻
Hibernate 英文 PPT 及 MyEclipse 操作視頻整理
推薦一點 MyEclipse 的官方Spring,Hibernate入門視頻教程
Netbeans 5.5 + JPA + Hibernate 3 + Tomcat 實例有聲視頻
推薦一些AJAX視頻和文章
夏昕 <<Spring 開發指南入門>>1 分鐘上手教程視頻(不帶解說)
AJAX 入門培訓 PPT 及示例代碼
Java EE 5 入門 PPT 講解有聲視頻 - 第二部分
Java EE 5 入門 PPT 講解有聲視頻 - 第一部分
Java EE 5 入門視頻 - 在 JSF 中使用 JPA
Jigloo 開發 Swing 的入門教程
視頻:使用 Netbeans 5.5可視化開發 JSF 的簡單注冊流程
Java EE 5 入門視頻 - 在 J2SE 中使用 JPA
Navicat管理Mysql 的視頻
Weblogic 9 之旅圖文視頻 2 - Portal 開發環境設置, 簡單的Portal 開發(視頻已貼上)
用 JProfiler4 調優 Weblogic 和 Tomcat 的視頻(原創)
來自 http://www.tkk7.com/beansoft
posted @
2008-01-08 10:05 Super·shen BLOG 閱讀(693) |
評論 (0) |
編輯 收藏
String command = "cmd /c C:/Program Files/MySQL/MySQL Server 5.0/bin>mysqldump -h localhost -u root -p aijia > E:/aijia.dmp";
try {
Process process = Runtime.getRuntime().exec(command);
InputStreamReader ir = new InputStreamReader(process
.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
while ((line = input.readLine()) != null)
System.out.println(line);
input.close();
} catch (IOException e) {
e.printStackTrace();
}
另外
首先,設置mysql的環境變量(在path中添加%MYSQL_HOME%\bin),重啟電腦。
完整代碼:
/**
* @param args
*/
public static void main(String[] args) {
/*
* 備份和導入是一個互逆的過程。
* 備份:程序調用mysql的備份命令,讀出控制臺輸入流信息,寫入.sql文件;
* 導入:程序調用mysql的導入命令,把從.sql文件中讀出的信息寫入控制臺的輸出流
* 注意:此時定向符">"和"<"是不能用的
*/
backup();
load();
}
/**
* 備份檢驗一個sql文件是否可以做導入文件用的一個判斷方法:把該sql文件分別用記事本和ultra
* edit打開,如果看到的中文均正常沒有亂碼,則可以用來做導入的源文件(不管sql文件的編碼格式如何,也不管db的編碼格式如何)
*/
public static void backup() {
try {
Runtime rt = Runtime.getRuntime();
// 調用 mysql 的 cmd:
Process child = rt
.exec("mysqldump -u root --set-charset=utf8 bjse act_obj");// 設置導出編碼為utf8。這里必須是utf8
// 把進程執行中的控制臺輸出信息寫入.sql文件,即生成了備份文件。注:如果不對控制臺信息進行讀出,則會導致進程堵塞無法運行
InputStream in = child.getInputStream();// 控制臺的輸出信息作為輸入流
InputStreamReader xx = new InputStreamReader(in, "utf8");// 設置輸出流編碼為utf8。這里必須是utf8,否則從流中讀入的是亂碼
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
// 組合控制臺輸出信息字符串
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
// 要用來做導入用的sql目標文件:
FileOutputStream fout = new FileOutputStream(
"e:/mysql-5.0.27-win32/bin/bjse22.sql");
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
writer.write(outStr);
// 注:這里如果用緩沖方式寫入文件的話,會導致中文亂碼,用flush()方法則可以避免
writer.flush();
// 別忘記關閉輸入輸出流
in.close();
xx.close();
br.close();
writer.close();
fout.close();
System.out.println("/* Output OK! */");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 導入
*
*/
public static void load() {
try {
String fPath = "e:/mysql-5.0.27-win32/bin/bjse22.sql";
Runtime rt = Runtime.getRuntime();
// 調用 mysql 的 cmd:
Process child = rt.exec("mysql -u root bjse ");
OutputStream out = child.getOutputStream();//控制臺的輸入信息作為輸出流
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(fPath), "utf8"));
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
writer.write(outStr);
// 注:這里如果用緩沖方式寫入文件的話,會導致中文亂碼,用flush()方法則可以避免
writer.flush();
// 別忘記關閉輸入輸出流
out.close();
br.close();
writer.close();
System.out.println("/* Load OK! */");
} catch (Exception e) {
e.printStackTrace();
}
}
posted @
2007-12-07 13:25 Super·shen BLOG 閱讀(5483) |
評論 (1) |
編輯 收藏
用Flex/Central/Java上傳文件
in java:
import com.oreilly.servlet.MultipartRequest;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class UploadServlet extends HttpServlet {
protected void doGet( HttpServletRequest req, HttpServletResponse res ) throws ServletException, IOException {;}
protected void doPost( HttpServletRequest req, HttpServletResponse res ) throws ServletException, IOException {
MultipartRequest parts = new MultipartRequest( req, "C:\\MyUploadPath" );
PrintWriter out = res.getWriter();
out.print( "SUCCESS" );
out.close();
}
}
in mxml:
< mx:Application initialize="initApp( event )" xmlns:mx="http://www.macromedia.com/2003/mxml">
< mx:Button id="btnUpload" label="Upload..." click="doUpload( event )" />
< mx:Image id="imgUpload" width="100%" height="100%" horizontalAlign="center" />
</mx:Application>
as:
private function doUpload( event:Object ):Void {
var file:FileReference = new FileReference();
// Ask the user to choose a file to upload
if( file.browse( ["JPEG Files", "*.jpg"] ) ) {
file.addListener( this );
file.upload( "http://myurl/servlet/MyUploadServlet" );
}
}
private function onUploadSuccess( ref:FileReference, response:String ):Void {
imgUpload.source = "http://myurl/myfilepath/" + ref.name;
}
private function onUploadFailed( ref:FileReference, error:String, response:String ):Void {
mx.controls.Alert.show( "Upload error: " + error );
}
servlet獲取絕對路徑方法:
ServletConfig config = this.getServletConfig();
ServletContext context = getServletContext();
String path = context.getRealPath("");
posted @
2007-12-03 14:50 Super·shen BLOG 閱讀(1928) |
評論 (1) |
編輯 收藏
用flex做即時通訊,收到的最新消息應該在最下面,但textArea的滾動條默認在最上方,不方便查看最新消息。
可以使用 maxVerticalScrollPosition屬性可以獲取最下方的值,非常方便
另外提供類:
package Util
{
import mx.controls.TextArea;
public class ChatTextarea extends TextArea
{
public function ChatTextarea()
{
super();
}
override public function set htmlText( value:String ):void
{
super.htmlText = value;
this.validateNow();
if( textField ) verticalScrollPosition = textField.maxScrollV
}
override public function set text( value:String ):void
{
super.htmlText = value;
this.validateNow();
if( textField ) verticalScrollPosition = textField.maxScrollV;
}
}
}
posted @
2007-11-22 16:34 Super·shen BLOG 閱讀(3121) |
評論 (0) |
編輯 收藏
問題:
然后運行某Flex程序時,出現如下提示:
This content requires the Adobe Flash Player. Get Flash
但是,鏈接到Adobe的Flash Player下載網頁,重裝了N次也不行。
google到下面的信息:
"...Flex Builder 2 裏面附的 debugger player 版次比正式版的 Flash Player 9 舊一點,有時會導致網頁的自動偵測失靈(誤以為user沒裝 flash player),所以現在 adobe 網頁上已經有新版的 debugger player ,可以先試試裝那個版本看看。"
實際解決方法:
因為本機已安裝了Flex bulider 3 , 既然知道問題所在,就不用再去down了,找到...\Flex bulider 3\Players\目錄,運行Install Flash Player 9 ActiveX.msi,選擇Repair,出錯失敗,再次選擇Remove卸載,重新安裝此ActiveX,瀏覽器中刷新mxml頁面,OK,搞定,收工。
posted @
2007-11-22 13:30 Super·shen BLOG 閱讀(1409) |
評論 (0) |
編輯 收藏
已經很久沒摸過FLASH了,由于要接一個項目需要用的flash實現。 當我使用flash cs3 寫程序時發現已經和以前的大不一樣了!多年沒接觸本來還想在友人面前顯耀一下寶刀未老,天哪,好多地方不一樣了,剛接觸還真不習慣,還出丑了。
flash cs3 的改變源自于 as3的重大改變。更源于flash player AM2的重大改變。
as3功能很強大,語言和java類型,也是面向對象的,也是使用虛擬機解釋。 (虛擬機這個概念太強了?,F在的主流程序都是用類似虛擬機技術,JAVA .NET FLEX)
實現技術原理 flash 和 java 曾經紅火一時的applet 幾乎差不多了。但是flash更為簡單易用,易于入門!
posted @
2007-11-22 10:49 Super·shen BLOG 閱讀(314) |
評論 (0) |
編輯 收藏
摘要: 如何解決端口沖突導致tomcat無法啟動的問題
Tomcat在啟動時主要使用下面的3個端口
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8080" minProcessors=...
閱讀全文
posted @
2007-11-22 10:00 Super·shen BLOG 閱讀(16622) |
評論 (2) |
編輯 收藏
自己在網上找了半天沒找到只有 “時分秒”的控件, 就自己做了個,發在這里方便有人用到

鼠標點擊 后 的效果
SetTime.js
/**//***********************************
* 簡單時間控件: version 1.0
* 作者:李祿燊
* 時間:2007-10-31
*
* 使用說明:
* 首先把本控件包含到頁面
* <script src="XXX/setTime.js" type="text/javascript"></script>
* 控件調用函數:_SetTime(field)
* 例如 <input name="time" type="text" onclick="_SetTime(this)"/>
*
************************************/
var str = "";
document.writeln("<div id=\"_contents\" style=\"padding:6px; background-color:#E3E3E3; font-size: 12px; border: 1px solid #777777; position:absolute; left:?px; top:?px; width:?px; height:?px; z-index:1; visibility:hidden\">");
str += "\u65f6<select name=\"_hour\">";
for (h = 0; h <= 9; h++) {
str += "<option value=\"0" + h + "\">0" + h + "</option>";
}
for (h = 10; h <= 23; h++) {
str += "<option value=\"" + h + "\">" + h + "</option>";
}
str += "</select> \u5206<select name=\"_minute\">";
for (m = 0; m <= 9; m++) {
str += "<option value=\"0" + m + "\">0" + m + "</option>";
}
for (m = 10; m <= 59; m++) {
str += "<option value=\"" + m + "\">" + m + "</option>";
}
str += "</select> \u79d2<select name=\"_second\">";
for (s = 0; s <= 9; s++) {
str += "<option value=\"0" + s + "\">0" + s + "</option>";
}
for (s = 10; s <= 59; s++) {
str += "<option value=\"" + s + "\">" + s + "</option>";
}
str += "</select> <input name=\"queding\" type=\"button\" onclick=\"_select()\" value=\"\u786e\u5b9a\" style=\"font-size:12px\" /></div>";
document.writeln(str);
var _fieldname;
function _SetTime(tt) {
_fieldname = tt;
var ttop = tt.offsetTop; //TT控件的定位點高
var thei = tt.clientHeight; //TT控件本身的高
var tleft = tt.offsetLeft; //TT控件的定位點寬
while (tt = tt.offsetParent) {
ttop += tt.offsetTop;
tleft += tt.offsetLeft;
}
document.all._contents.style.top = ttop + thei + 4;
document.all._contents.style.left = tleft;
document.all._contents.style.visibility = "visible";
}
function _select() {
_fieldname.value = document.all._hour.value + ":" + document.all._minute.value + ":" + document.all._second.value;
document.all._contents.style.visibility = "hidden";
}
posted @
2007-11-01 15:33 Super·shen BLOG 閱讀(11139) |
評論 (13) |
編輯 收藏
下邊的所有都是自己對JAVA的理解不知道對不對,有待于以后實踐驗證
用JAVA編程,無論是什么框架,什么庫,什么插件, 他們的也還是來自 最基本java類編程。
比如,我猜想 TOMCAT服務器,也是由一個帶MAIN方法的類來啟動的, 然后開通一個端口服務器,它的原理應該和java socket server編程應該是一個道理。主要是啟動一些類,來接受客戶端的請求(容器的原理應該是這樣吧)
再說 servlet 也是基本的 JAVA類, 他們是受容器的管理,受到的是容器的調用(容器應該也就是帶main的java類),并對客戶端產生相應。
還有像 jsp 的所謂表現層框架,最終也是調用到帶main函數的java類。 它的原理是 jsp編譯生產 servlet ,servlet 最終還是依靠容器。
其實我想,自己也可以開發一個表現層,只要能實時編譯成servlet,就能和jsp一樣的功能了。
不過jsp是sun公司的標準產品,它的庫已經集合在大多數容器上了,得到廣大容器的廣泛支持,出來得也早,用人也多,很少人想到要做新的表現層(如果沒什么好功能,就等于重復發明車輪)。
FreeMarker 的原理也是一樣,簡單說它就是一個庫,你可以把它集合到容器里,得到容器的支持后,用FreeMarker 編寫的表現層就能實時編譯成servlet。 最后得到的和jsp 得到的是一個效果。
FreeMarker 最終的結果還是容器調用。
不過要做一個FreeMarker 可不簡單,要有好的想法,要不就和jsp功能重復了,沒價值。
以上都是個人想出來的 不知道是否正確 有待于個人深入學習。
posted @
2007-09-17 11:46 Super·shen BLOG 閱讀(4466) |
評論 (5) |
編輯 收藏