下一代的WEB开发框架
2003-02-17 09:54
316 查看
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爱好者们也不甘寂寞吧? 让我们来看看:
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();
}
}
==========================================
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开发也会变成高效, 愉快的事情.
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开发也会变成高效, 愉快的事情.
相关文章推荐
- 兼容Mono的下一代云环境Web开发框架ASP.NET vNext
- ASP.NET vNext:微软下一代云环境Web开发框架
- 微软下一代云环境Web开发框架ASP.NET vNext预览
- Web开发者看过来,Meteor开发框架为你带来下一代高品质实时Web App开发的新模式
- 兼容Mono的下一代云环境Web开发框架ASP.NET vNext
- 微软下一代云环境Web开发框架ASP.NET vNext预览
- Koa -- 基于 Node.js 平台的下一代 web 开发框架
- Koa (koajs) 基于 Node.js 平台的下一代 web 开发框架
- 微软下一代云环境Web开发框架ASP.NET vNext预览
- 下一代的WEB开发框架
- 移动开发者必知10大移动Web开发框架
- 关于Python的WEB开发框架的介绍
- 推荐18个非常棒的Web和移动开发框架
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- hijk——使用JDK8中Javascript引擎Nashorn开发web和网络的应用框架
- Web开发框架比较 (专)
- WEB开发技术框架利器之一 -- Beetl使用笔记
- Web 高效开发必备的 PHP 框架
- Web开发框架比较
- Spring MVC 4.1.3 + MyBatis 零基础搭建Web开发框架(注解模式哦)