随笔-40  评论-66  文章-0  trackbacks-0
 

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)编辑 收藏
仅列出标题
共4页: 上一页 1 2 3 4 下一页