网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.[JAVA100例]056、数据库元数据.
.首页地址添加到收藏夹(javascrip.
.Java远程方法调用 (5).
.实例学习Struts.
.SUN正式发布Java API文档中文版.
.Java 理论与实践: 用JMX检测应用.
.鼠标事件和键盘事件.
.J2EE应用程序打包与部署之三.
.Java 中文问题 集锦.
.[JAVA100例]009、异常的捕获和实.
.Spring Framework中面向方面.
.main成员函数.
.安全的基础----学习java安全之前.
.在JAVA中连接Sybase数据库(例子).
.WIN2000下J2EE的安装及布署.
.复制、传递和比较数据.
.巧用GC.
.最新的Swing外观,定制UI不在话下.
.JAVA入门教程:第四章.
.IT业界名词解释:J2EE.

为你的应用程序添加动态Java代码

发表日期:2008-1-5



摘要
     你曾经希望你的Java代码能够像jsp一样是动态的吗?它可以在运行时被修改和重新编译,同时你的应用程序自动更新。本文阐述了如何让你的代码动态化。同样的,你的一些源代码将会被直接部署,而不是编译好的字节码。这些源代码的任何改变都将引起这些源代码的再编译和类的重新装载。然后你的应用程序就会运行在新的类上,用户将立即看到这种改变。本文不仅讲述了运行时源码编辑和类装载,而且还提出一个将动态代码与其调用者分离的设计方案。调用者保存对动态代码的一个静态引用,而不管动态代码运行时如何再次装载,调用者总能访问最新的类且不用更新引用。这样,动态代码改变对客户是透明的。

JSP是一种比servlets更有弹性的技术,因为它可以响应运行时的动态改变。你可以想象一个普通的java类也有这种动态的能力吗?假如你能修改服务的执行而不用重新部署和更新应用程序,将会是很有趣的。

文章说明了如何编写动态的代码。它讨论运行时源码编辑,类的再装载,和让动态类的修改对它的调用者透明的代理设计模式。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:Li Yang;Amydeng
原文:http://www.javaworld.com/javaworld/jw-06-2006/jw-0612-dynamic.Html
Matrix:http://www.matrix.org.cn/resource/article/44/44615_Java+Dynamic+Code.html
要害字:Java;动态代码

一个动态java代码的例子

     让我们以一个动态java代码的例子开始来阐释真正的动态代码意味着什么,为下文的讨论做铺垫。请在源码中找到这个例子完整的源代码。

    这个例子是一个简单的依靠名叫Postman的服务的java应用程序。Postman服务是一个java接口,仅包括一个方法,
deliverMessage():
public interface Postman {
    void deliverMessage(String msg);
}


这项服务的简单执行是向控制台打印消息。执行类是动态的代码。这个类,PostmanImpl,仅是一个普通的 java类,假如不是展开它的源码代替它的已编译好的二进制码:
public class PostmanImpl implements Postman {

    private PrintStream output;
    
    public PostmanImpl() {
        output = System.out;
    }
    
    public void deliverMessage(String msg) {
        output.println(" Postman  " + msg);
        output.flush();
    }
}


使用Postman服务的应用程序如下。在main()方法里,循环从控制行读取消息并通过Postman服务进行传递:
public class PostmanApp {

    public static void main(String[] args) throws Exception {
        BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));

        // OBTain a Postman instance
        Postman postman = getPostman();

        while (true) {
            System.out.print("Enter a message: ");
            String msg = sysin.readLine();
            postman.deliverMessage(msg);
        }
    }

    private static Postman getPostman() {
        // Omit for now, will come back later
    }
}


执行这个应用程序,输入一些信息,你将看到控制台输出如下(你可以下载该例子并自行运行):
DynaCode  Init class sample.PostmanImpl
Enter a message: hello world
Postman  hello world
Enter a message: what a nice day!
Postman  what a nice day!
Enter a message:

现在让我们来看看动态的东西。 不要停止应用程序,让我们修改PostmanImpl的源码。新的执行程序将会把所有的信息输出到一个文本文件,而不是控制台。
// MODIFIED VERSION
public class PostmanImpl implements Postman {

    private PrintStream output;
    
    // Start of modification
    public PostmanImpl() throws IOException {
        output = new PrintStream(new FileOutputStream("msg.txt"));
    }
    // End of modification

    public void deliverMessage(String msg) {
        output.println(" Postman  " + msg);

        output.flush();
    }
}


上一篇:用JWSDP将Java和Web服务结合起来 人气:667
下一篇:用 Java 保存位图文件(转) 人气:746
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐