下一代的WEB开发框架

    技术2022-05-11  138

    JSP曾经以编译的Servlet在速度上打败了asp, php. 但是JSP很久以来没有多大的革新. 代码和页面的混合, 使IDE很难兼顾. 在处理一些复杂的连动时, 更是手忙脚乱. 在结构上和JSP类似的ASP.net凭借其服务器端控件编程和数据绑定的概念, 让开发者就象用VB一样编程. 原来可以这样编写WEB程序!

    其实这只是从编程观念上的一个转变, 把浏览器上的事件告诉在Server上驻留在Session中的控件. 那么用Java怎样实现呢? 我曾经构想过两种方案来实现:

    1.      跟Asp.net一样, 采用Tag替换的方式工作.

    2.      发展JSP, 用TagLib实现服务器端控件.

    方案1需要很好的解析html. 优点是灵活, 可以利用现有的HTML编辑工具.

    方案2要求TagLib能允许任意属性, 这要期待jsp2.0. 优点是兼容目前的JSP, 而且可以利用Taglib的嵌套, 循环.

    我曾经试着写一些原型来实现方案1, 发现效果不错, 但是离实用还需要相当的工作量. 那么internet上的Java爱好者们也不甘寂寞吧? 让我们来看看:

    JSF(JavaServer Faces)  http://sourceforge.net/projects/tapestry/

    原来Sun的专家们早就忙活开了, 不过天才们仅仅又订出一个伟大的规范, 丢给厂商们去五花八门的实现. 不用猜了, 是利用JSP+TagLib. 以Sun的影响力, 应该有机会看到IDE, 希望不要太晚.

    Tapestry http://sourceforge.net/projects/tapestry/

    这个SourceForge上的开源项目看起来很活跃, 2.3beta1版 配置相对烦琐. 2.4alpha1简化了配置, 但目前还不算稳定, 看demo建议用2.3版. 从实现方式上看类似方案1, 不喜欢jsp和xsl的美工可能要兴高采烈. SourceForge上有很多它的辅助项目, 其中一个是Eclipse插件, 看来离实用不远了. 下面是一个显示当前时间的简单例子:

    Home.html:

    ==========================================

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

    <html>

    <head>

           <title>Simple</title>

    </head>

    <body>

    This application demonstrates some dynamic behavior using Tapestry components.

    <p>The current date and time is: <b><span jwcid="@Insert" value="[[ currentDate ]]">Current Date</span></b>

    <p>Click <a jwcid="@PageLink" page="Home" sometag=”test”>here</a> to refresh.

    </body>

    </html>

    Home.java:

    ==========================================

    package tutorial.simple;

    import java.util.Date;

    import net.sf.tapestry.html.BasePage;

    /**

     *  @version $Id: Home.java,v 1.9 2002/11/27 17:58:58 hship Exp $

     *  @author Howard Lewis Ship

     *

     **/

    public class Home extends BasePage

    {

           public Date getCurrentDate()

           {

                  return new Date();

           }

    }

    ==========================================

    Echo http://www.nextapp.com/products/echo/

    这个小东西才1.0Beta3版, 但是它的Demo让我流了一地口水. 操作浏览器上的窗口居然和写普通程序swing程序没什么两样, 而且能同时刷新. 如果前面两个框架里面还多少残留Struts的味道, 那么Echo让我们彻底回到了OO: 用swing的概念去写servlet. 目前还没看到IDE支持, 如果Borland如果愿意, 让Jbuilder支持它是易如反掌. SourceForge里面还有两个echo相关项目EchoPoint和Marsh提供了更多的让你馋涎欲滴的echo控件, 有兴趣的朋友可以去看看. 下面是一个HelloWorld的例子

    HelloWorldServlet:

    ==========================================

    import nextapp.echo.ContentPane;

    import nextapp.echo.EchoInstance;

    import nextapp.echo.Label;

    import nextapp.echo.Window;

    import nextapp.echoservlet.EchoServer;

    public class HelloWorldServlet extends EchoServer {

        // 为用户返回一个新的实例

        public EchoInstance newInstance() {

            return new HelloWorld();

        }

    }

    class HelloWorld extends EchoInstance {

        // 在用户首次访问时调用init方法. 返回的Window即用户浏览器看到的内容

        public Window init() {

            Window window = new Window();

            // Components 不能直接放到Window下, 必须加到content中

            ContentPane content = new ContentPane();

            window.setContent(content);

            Label label = new Label("Hello, World!");

            content.add(label);

            return window;

        }

    }

    ==========================================

    不搜不知道, 世界真奇妙. 想想以前在WEB上完成一些复杂功能有多辛苦, 后台的程序, 前台的脚本, 一个都不能少. Web Componets的出现让我们看到了希望, 复杂的操作都交给框架去完成, 让我们回到面向对象的OO世界. 但是要看到, 由于过分依赖Session和浏览器脚本, 过多的事件将导致服务器性能下降. 不过因为都是基于Servlet, 我们可以和传统的开发方式并用. 并且随着网络性能的提高和IDE的支持, 以后WEB开发也会变成高效, 愉快的事情.

     


    最新回复(0)