发新话题
打印

ASP+与JSP之间的抉择

ASP+与JSP之间的抉择

ASP+JSP之间的抉择

由于我同时是ASPJSP的程序员,所以正开始写一系列的文章来比较两者的差别,当我写到一半时,ASP+被宣布了,所以我不得不重新开始审视这个问题。我正在同时做一个JSP项目和一个ASP项目,后者十分有趣,因为它开始是采用ASP3.0,但当项目结束后我将会转换为ASP+。到那时我将可以对ASP+有更近的考察,并提供更好的ASP+JSP的比较。本文是我目前对ASP+的一些认识和看法,并分析了它对于象我这样的普通开发人员可能会产生的影响。  
  
  
  通过最初步的比较,我发现:
  
  
  1) 面向对象性:
  
  
  ASP+C#作为一种面向对象语言,在很多方面来看,C#将成为微软的与Java相似的语言。
  
  
  C#另一个有趣的地方是所有对象都自动变成为COM对象。如果C#能取得很大的市场份额,那么它将给ASP+带来类似于Java的功能,并且具备更快的性能,因为它可以和Windows环境紧密集成。
  
  
  C#ASP+开发中一个最重要的功能,微软会将C#发展成为Java的强劲对手。这也是微软.Net框架的一个重要组成部分。我认为C#是微软在编程市场上击败对手的主要工具。我期待着微软能在这个产品后面倾注全力,这样,C#可以成为许多程序员的又一种选择。C#的诞生无疑将进一步加剧微软和Sun产品的战线,但这对用户是有利的,他们可以选择两者之一来开发新的应用。  
  
  
  2) 数据库连接:
  
  
  ASP另一个亮点是它使用ADO对象、ODBCOLE-DB和事务处理管理器。因此ASP Web数据库应用开发特别简单。ASP+发展了更多的功能,因为有了ADO+ADO+带来了更强大更快速的功能。JSPJDBC目前在易用性和性能上同ASP/ADO相比已有些落后,当新版本ASP+/ADO+出现后这样的差别会更明显。所以我个人希望SUN应尽快能花大力气来追赶ASP+/ADO+的组合。
  
  
  3)大型站点应用:
  
  
  ASP+将对大型站点(web farms)有更好的支持。事实上,微软已经在这方面付出了巨大的努力。 ASP+可以让你考虑到多服务器(multiple servers)的场合,当你需要更强大的功能时,仅仅只需要增加一台服务器。整个.Net框架已经充分地提供了这个方法。ASP+提供了外部会话状态(external session state)来提供内置式web farm的支持。另外,由于请求的各组件相互间经过了充分的优化,所以速度很快。
  
  
  于是ASP+现在可以在大型项目方面与JSP一样具有等同的能力。而ASP+还有价格方面的优势,因为所有的组件将是服务器操作系统的一部分。对于JSP,你需要购买昂贵的应用服务器群来达到同样的目的。  
  
  
  4) ASP+还提供更多的其它方面的新特性,例如:
  
  
  *内置的对象缓存和页面结果缓存。
  
  
  *内置的XML支持,可用于XML数据集的简单处理。
  
  
  *服务器控制提供了更充分的交互式控制。
  
  
  由此可见,ASP+确实对ASP进行了较大的发展。  
  
  
  在我审视完ASP+后,我的初步结论是:我未来项目主要还是要采用基于Java/JSP的技术。这有以下三个理由:
  
  
  1) 要真正发挥ASP+潜力,你要使用C#vb.net。这两种语言将成为ASP+标准的核心的脚本语言。这对ASP的未来发展很有好处。而我向来不喜欢用当前的Visual Basic来制作com对象。新的ASP+核心脚本语言更能发挥ASP+的价值。
  
  
  显然,所有这些ASP+的新进展促使我对今后语言选择做一个决定,它将占据我未来的无数时间和努力。
  
  
  回想起来,当Java开始发展起来时我正好学习了Java,那时我预感到这将是围绕我未来程序生涯的语言。于是,JSP理所当然地成为了我在web开发中的第一选择。
  
  
  现在我已经是一个JSP fan,除非微软能够将我整个扭转过去,我感觉到自己正面临ASP+的巨大挑战。  
  
  
  2) ASP+依然完全锁定在微软的操作系统中。JSPASP+拥有更大的范围,它在别的服务器配置中也有很好的伸缩性。虽然Windows 2000 的优越性日益显露,但这对开发人员不构成问题。  
  
  
  
  3) 我并不能确信是否我能认同ASP+结构的各种方面,这需要更深入的分析,所以,我很犹豫。也许直到我使用了1-2个月后才会改变看法。总的来说,这需要在一个很高的层次来看待这个beta产品。
  
  
  而作为一个ASP开发人员,ASP+也让我要停下来反思一下。未来8个月的ASP新项目将变得很困难。为什么?因为 ASP+C# 带来了一个难题,它们要到2001年才正式提供。而很多性能方面的要求现在就需要确定。由于ASP+只是一个beta软件,所以现在我的第一个选择反而很简单了。现在的项目就采用ASP3.0。我认为各种beta版的语言都不太可信。  
  
  
  但我不能忽视ASP+,因为它很快就要推出,并代表了ASP的未来。ASP项目的管理者还需要考虑到未来的可平滑移植性及付出的时间代价等。另一个结果则是,这使得在近期使用PHPJSP来代替ASP变得更可靠一些。
  
  
  总的来说,
  
  
  1) 如果使用ASP+,你将花费额外的时间学一些新的工具。
  
  
  2) 新的工具有待于版本化,所以为什么不先关注于目前存在的东西?
  
  
  3) ASP+将来会拥有的特性JSP已经拥有。
  
  
  4) ASP+将你锁定到纯Microsoft的体系中。
  
  
  最后,我预测会有很多人加入到PHPJSP的行列。可是,仍然会有一部分人会受到ASP+给业界带来的激动所感染。我从没看到一个beta编程产品会带来如此的震撼!  
  
  
  同时,我还注意到一篇讨论.net的文章中也提到了同样的问题:
  
  
  ASP+以自由软件作为开始,现在已经渐渐成为Microsoft.Net框架的基石之一。Sun应该从中得到教训。特别注意的是,你需要许可证才能升级到ASP+,因为它和太多的产品集成在一起了。.Net框架太大了。在假定某个产品可以成为真正的产品之前,我通常等待它的第一个service pack。所以,即使ASP+已经在2001第一季度被版本化,我仍然要等到2001第二季度。
  
  
  当然,因为ASP+ 已经产生了如此的激动人心,一旦推出,很多商店都会马上提供ASP+
  
  
  事实上我早已经使用betaASP+! 我发现它使用 .aspx 后缀,这使我我感觉Microsoft会在近期推出第一个ASP+service pack。  
  
  
  下一年里,我们将看到在这个巨大的市场上SunMicrosoft如何展开决战,而程序员们又将做出什么样的选择呢?


这是我从一个教程里,扣出来的。我看到这位作者写的很好,很想与这里的朋友分享,如有得罪的地方请作者 通知,我会立刻删除。

生活,社会生活

TOP

ASP+与JSP之间的抉择

写的不错啊,可是没把ASP.NET相对JSP的优点写出来啊,按照JSP2.0标准在JSP页面中一般不需要嵌入JAVA代码了。

TOP

ASP+与JSP之间的抉择

引用mojuncong @ 2006-05-14 10:49)
写的不错啊,可是没把ASP.NET相对JSP的优点写出来啊,按照JSP2.0标准在JSP页面中一般不需要嵌入JAVA代码了。

谢谢版主指教


生活,社会生活

TOP

ASP+与JSP之间的抉择

现在可以了吧,精神鼓励?




此帖由 mojuncong 在 2006-05-14 12:58 进行编辑...

TOP

ASP+与JSP之间的抉择

谢谢!
生活,社会生活

TOP

ASP+与JSP之间的抉择

呵呵,佩服,顶一下
一只加肥猫,有啥可怕? --- mouse forever
___________________________________
Name(姓名): mouse
Field(行业) : PACS & RIS & DICOM
QQ (OICQ) : 2670136
Page (主页): http://www.pacser.net

-------------------------------------------------------------

TOP

ASP+与JSP之间的抉择

学习。

人生的意义,就是在走向死亡的道路上尽力活得更好。

TOP

ASP+与JSP之间的抉择

我是不懂了,只是来学习的!

发上等愿,结中等缘,享下等福;择高处立,就平处坐,向宽处行。

TOP

ASP+与JSP之间的抉择

引用mojuncong @ 2006-05-14 10:49)
写的不错啊,可是没把ASP.NET相对JSP的优点写出来啊,按照JSP2.0标准在JSP页面中一般不需要嵌入JAVA代码了。

实际按我的经验来看,难以清处java代码,其实也不必要。

TOP

混了PHP也有三年时间了,现在看了看楼主提到的那些高级特性,我突然发现原来PHP一样也不支持(除了面向对象)
数据库连接池 --- PHP没有,只有一个持久链接(而这个还被Web Server 的线程影响可能导致不太稳定)
大型站点 --------- 分布式构架 PHP 没有,自己找方案解决
对象缓存、页面缓存 ---------  自己解决,无内置方案
内置XML支持            ---------  这点应该算是PHP的一点优点了(PHP5)

同样,我也搞了一旦时间的Java了,发现Java其实也不过如此,其中的内容(声明:我只看过Hibernate 和 Spring)除了名字比较拽之外没有什么奇特之处(PHP没有实现的原因只是因为PHP无法长期驻留内存导致采用那么多模式效率受影响)

不过就我的经验来说,即使Java采用了那么多好处,效率仍旧不行,日常运行速度远比不上PHP

一下是我以前做的一个测试:
系统平台:Windos Xp Sp2
CPU: 赛扬 M 1.60G
RAM: 512M
Server: Apache2.24 & PHP5.23& eaccelerator 0.95 (PHP)
            Tomcat 5.50-17 (Java)
测试: ab -c 50 -n 1000

代码一:
PHP制作一个计数器:
<?php
class
Counter
{
    const
SAVE_PATH = './a'
;
    private
$_counter = 0
;
    public function
__construct
()
    {
        
$this->_counter = (int)file_get_contents(self::SAVE_PATH
);
        
$this->_counter
++;
    }
    public function
getCount
()
    {
        return
$this->_counter
;
    }
    public function
__destruct
()
    {
        
file_put_contents(dirname(__FILE__) . '/' . self::SAVE_PATH, $this->_counter
);
    }
}

$cnt = new Counter
();
echo
'你是第 ' . $cnt->getCount() . '  个无聊份子'
;
?>

测试结果:
Requests per second:    239.70 [#/sec] (mean)
Java的计数器(Servlet)
/*
* CServlet.java
*
* Created on 2007年8月28日, 下午11:36
*/

import java.io
.*;
import java.net
.*;

import javax.servlet
.*;
import javax.servlet.http
.*;

/**
*
* @author 西门吹水
* @version
*/
public class CServlet extends HttpServlet
{
    private
int i = 0
;
   
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
   
protected void processRequest(HttpServletRequest request, HttpServletResponse response
)
   
throws ServletException, IOException
{
        
i
++;
        
response.setContentType("text/html;charset=UTF-8"
);
        
PrintWriter out = response.getWriter
();
        
out.println("<html>"
);
        
out.println("<head>"
);
        
out.println("<title>Servlet CServlet</title>"
);
        
out.println("</head>"
);
        
out.println("<body>"
);
        
out.println("你是第 " + i + "个无聊份子"
);
        
out.println("</body>"
);
        
out.println("</html>"
);
        
out.close
();
    }
     
   
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
   
protected void doGet(HttpServletRequest request, HttpServletResponse response
)
   
throws ServletException, IOException
{
        
processRequest(request, response
);
    }
     
   
/** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
   
protected void doPost(HttpServletRequest request, HttpServletResponse response
)
   
throws ServletException, IOException
{
        
processRequest(request, response
);
    }
     
   
/** Returns a short description of the servlet.
     */
   
public String getServletInfo
() {
        return
"这只是一个无聊的测试"
;
    }
   
// </editor-fold>
}



测试结果:
Requests per second:    33.20 [#/sec] (mean)
Java的计数器(JSP + Bean)

JSP源码:
<%@page c%>
<%@page pageEncoding="UTF-8"%>
<jsp:useBean id="cnt" scope="application" class="counter.Counter" />
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" c>
        <title>Counter 测试</title>
    </head>
    <body>
    <div style="text-align:center;">你是第 <%=cnt.getCount()%> 个无聊份子</div>
   
    </body>
</html>

Bean源码:
/*
* Counter.java
*
* Created on 2007年8月11日, 下午5:53
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package counter
;
/**
*
* @author 西门吹水
*/
public class Counter
{
     
    public
int getCount
()
    {
        
count
++;
        return
count
;
    }
    public
void setCount(int count
)
    {
        
this.count = count
;
    }
   
/** Creates a new instance of Counter */
   
public Counter
() {
    }
    private
int count = 0
;
}



测试结果
Requests per second:    18.08 [#/sec] (mean)

TOP

以上的例子中:Java的计数都是在内存中进行的,而PHP的还要涉及到文件IO操作(在构造函数和析构函数中完成),然而PHP的效率还是明显优于Java

而同样的PHP内存计数的话(采用ea做共享内存):
复制内容到剪贴板
代码:

<?php
class Counter
{
    const STORE_NAME = 'ct';
    private $_count = 0;
    public function __construct()
    {
  $this->_count = eaccelerator_get(self::STORE_NAME );
  $this->_count++;
  eaccelerator_put(self::STORE_NAME , $this->_count, 0);
    }
    public function getCount()
    {
  return $this->_count;
    }
}
$cnt = new Counter();
echo '你是第 ' . $cnt->getCount() . ' 个无聊分子!';
?>
测试结果:Request Per Second 可以达到 455.56 (这个测试是以后补的,机器,平台一样,但是不是和上面三个测试一次进行的)

感觉其实什么什么的只是像一句广告(对象缓存、页面缓存、这支持那支持),没必要信得太真。唯一比较有用的只是那个链接缓冲池。。。感觉(PHP没有连接缓冲池的确很不爽,开 持久连接 不能把 Server 线程数开得超过MySQL的最大并发数)

在Java道上也看见这种技术之间的论战,不过结论有些不同,真正的大型站点RoR、PHP、Java(未讨论C#)都无法支持,能搞搞得还是得C语言。。。。。

现在觉得对我影响最大的是框架(Framework)以及IDE(PHP完全没有可视化的IDE, 那个 Delphi for PHP真不能算一个东西)。没感觉Java在Web上比PHP有什么强的。Java在小内存平台的表现相当的让人失望

对C#没什么好说的,没搞过
但是有如下经历:我想在我们公司的机器(一台没人用的机器上)上安装一个MicroSoft Share Point 2007,服务器配置 Windows 2003 Server、RAM  256M、CPU 赛扬4 1.8G,但是结果极其失望,打开一个页面(配置页面我可以回去睡一觉了,回来打开显示器100%的运行时异常)
而几个月前还是学生的时候,同样安装过SugarCRM(Windows XP 、256M、赛扬4 2.0G,以前的学生配置),就算很有些慢(PHP的设置不可能运行超过30秒),但是还是能运行。。。Java、C#都在促进我们烧内存

[ 本帖最后由 wps2000 于 2007-9-30 12:55 编辑 ]

TOP

发新话题