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 阅读(309) |
评论 (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.blogjava.net/beansoft
posted @
2008-01-08 10:05 Super·shen BLOG 阅读(678) |
评论 (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 阅读(5481) |
评论 (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 阅读(1921) |
评论 (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 阅读(3116) |
评论 (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 阅读(1402) |
评论 (0) |
编辑 收藏
已经很久没摸过FLASH了,由于要接一个项目需要用的flash实现。 当我使用flash cs3 写程序时发现已经和以前的大不一样了!多年没接触本来还想在友人面前显耀一下宝刀未老,天哪,好多地方不一样了,刚接触还真不习惯,还出丑了。
flash cs3 的改变源自于 as3的重大改变。更源于flash player AM2的重大改变。
as3功能很强大,语言和java类型,也是面向对象的,也是使用虚拟机解释。 (虚拟机这个概念太强了。现在的主流程序都是用类似虚拟机技术,JAVA .NET FLEX)
实现技术原理 flash 和 java 曾经红火一时的applet 几乎差不多了。但是flash更为简单易用,易于入门!
posted @
2007-11-22 10:49 Super·shen BLOG 阅读(308) |
评论 (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 阅读(16615) |
评论 (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 阅读(11127) |
评论 (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 阅读(4461) |
评论 (5) |
编辑 收藏