ASP与JSP的比较
 --------------------------------------------------------------------------------
 
从微软推出了ASP(ActiveServerPage)后,它以其强大的功能,简单易学的特点而受到广大WEB开发人员的喜欢。但是它却有微软产品的通病,只能在Windows平台下使用,虽然它可以通过增加控件而在LINUX下使用,但是其功能最强大的DCOM控件却不能使用。而SUN公司在JAVA的基础下开发出的JSP(Java ServerPages)实现了动态页面与静态页面的分离,脱离了硬件平台的束缚,以及编译后运行等方式大大提高了其执行效率而逐渐成为因特网上的主流开发工具。为了使用广大应用ASP的程序员们能近快的学会JSP。现把其异同对比如下: 1、结构 
JSP和ASP在结构上类似,都是以"<%"和"%>"作为标计符,不同的是在标计符之间的代码ASP为JavaScript或VBScript脚本,而JSP为JAVA代码。JSP将网页的表现形式和服务器端的代码逻辑分开。作为服务器进程的JSP页面,首先被转换成servlet(一种服务器端运行的java程序)。Servlet支持HTTP协议的请求和响应。当JSP被转换成纯JAVA代码。多个用户同时请求一个jsp页面时,应用实例化线程来响应请求。这些线程由WEB服务器进程来管理,和ASP的线程管理器功能类似。同CGI为每个请求创建一个进程的模式比较,这种方式效率高的多。2、性能和平台无关性 
与C++、VB等语言比较,JAVA被看作是个效率不太高的语言,但它以牺牲效率换来了平台无关性使JAVA可以在大多数操作系统上运行而不需要重新编译--许多人愿意为此而付出代价。JAVA的编译代码是一种字节代码,在运行时由操作系统上的一个Java VirtualMachine(JVM)虚拟机解释。字节代码可以在所有平台上迁移,而不需要任何改动。交叉平台编程倾向于采用所有操作系统的"最小公分母",尤其是使用图形化界面时(servlets不需要任何图形界面)。Servlets比传统的java程序(applets, javaapp)要快,因为它们在服务器端运行,不需要加载沉重的GUI(HTML的GUI是非常少的)。另外,servlets的字节代码只有在客户请求时才执行,所以尽管当首次调用servlets时会有几秒钟的加载时间,但后续的请求相应非常迅速,因为服务器已经缓存了运行的servlets。当前的jsp服务器,都带有java 即时编译器(JIT),因此,JSP的执行比每次都要解释执行的ASP代码要快,尤其是在代码中存在循环操作时,JSP的速度要快1到2个数量级。3、Session管理 
为了跟踪用户的操作状态,ASP应用SESSION对象。JSP使用一个叫HttpSession的对象实现同样的功能。Session的信息保存在服务器端,Session的id保存在客户机的cookie中。如果客户机禁止cookie,Session Id就必须带在url后面。Session一般在服务器上设置了一个30分钟的过期时间,当客户停止活动后自动失效。Session 中保存和检索的信息不能是基本数据类型(primitivedatatypes)如(int, double)等,而必须是java的相应的object(对象)如(Integer,Double)。HttpSessionsession=request.getSession();//得到一个session对象或创建一个
session.getId()//得到sessionID数Integerid=(Integer)session.getValue("id")//检索出aession的值并转化为整型 session.putValue("ItemValue",itemName);//ItemValue必须不是must简单类型4、Application管理 
有时服务器需要管理面向整个应用的参数,使得每个客户都能获得同样的参数值。和Session一样,ASP使用Application对象而JSP使用ServletContext对象,操作的方法和Session一样。 getServletContext().setAttribute("Item",ItemValue);//设置一个应用变量 Integeri=(Integer)getServletContext().getAttribute("ItemName");//得到//item
 
5、ServerSideIncludes 
在服务器端引用上ASP和JSP有着相同之处。ASP和JSP都可以支持此功能的服务器(IIS,APACHE)上实现服务器端包含虚文件。但JSP是将动态页面的结果包含进来,而不是包含文件的代码本身。当你包含的文件在另一个服务器上时,不包含任何代码和对象是一个非常有效的功能。ASP:<!--#includefile="subfile.asp"-->
  JSP:<%@includefile="subfile.jsp"-->6、JAVA组件:JavaBeans 
JavaBeans是一些完成预定义功能的封装的对象数据。JavaBeans和JSP接合与COM和ASP相比如下:1、COM对象常用来封装商业逻辑和为ASP页面完成高强度计算。重用的组件使得页面简单快速,因为组件由编译语言(C++,VB)构成,而不是解释型的scripting语言(VBScript, JScript)。2、JavaBeans只能用java语言开发,com可以由符合标准对象模型的任何语言开发(包括Visual J++)。另一方面,JavaBeans更容易开发,因为一旦掌握了java,了解JavaBeans的结构非常容易。由于com的复杂性,需要大量的学习和培训才能掌握--即使你具有c++和vb的基础也需要额外的努力。Com 组件需要在服务器上注册,如果你修改了一个现有的组件,服务器需要重新启动才能使用它。JavaBeans不需要重新注册,如果开发者不需要得到对服务器的完全访问权限,这是其一个巨大的优点。3、可以创建满足商业逻辑的完整的JavaBeans库,让非编程人员使用库来开发动态网站。 4、Beans可以在服务器端管理数据库连接。5、JavaBeans符合结构化对象模型:每个Bean由一个不带参数的构造函数,控制它的servlet可以使用内省(introspection)来设置其属性。要设置Bean的内置属性,必须使用带有属性名的setProperty标签。如果一个属性可以设置,Bean需要有一个setXxxx方法,Xxxx用实际的属性名来代替。7、JSP和数据库 
ASP使用ODBC通过ADO连接数据库,而JAVA通过一个叫JDBC的技术联接数据库。目标数据库需要一个JDBC驱动程序--一个数据库与JAVA的借口,使得JAVA可以用标准的方式访问数据库。JDBC不使用服务器端的数据源。只要有JDBC驱动程序,JAVA就可以访问数据库了。如果一个特定的数据库没有JDBC驱动程序,而只有ODBC驱动程序,JAVA提供一个JDBC-ODBC桥来将JDBC调用转化为ODBC调用。所有的JAVA编译器都带有一个免费的JDBC-ODBC桥。理论上,桥可以访问任何常见的数据库产品。结论:JSP模型是在ASP之后定义的,它借用了ASP的许多优点,如Session,Application等对象。同时JSP使用灵活而强大的JAVA语言,而不是低效的Scripting语言。ASP开发者只能使用基于windows平台的技术,而java和jsp是跨平台的。

解决方案 »

  1.   

    Cookie简介及JSP处理Cookie的方法 
    2001-04-03· Wayne ·yesky--------------------------------------------------------------------------------7  1 2 3  下一页8一.什么是cookies?  大家都知道,浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个缺陷,Netscape开发出了cookie这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookies.txt本地文件保存从所有站点接收的Cookie信息;而IE浏览器把Cookie信息保存在类似于C:\windows\cookies的目录下。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。  cookies给网站和用户带来的好处非常多: 1、Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径
    2、Cookie能告诉在线广告商广告被点击的次数 ,从而可以更精确的投放广告
    3、Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点 
    4、Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务    
      在JSP中,我们也可以使用Cookie,来编写一些功能强大的应用程序。   下面,我想介绍一下如何用JSP创建和处理Cookie。     二.如何创建Cookie   说了这么多,大家一定很想知道JSP是如何创建cookie了。JSP是使用如下的语法格式来创建cookie的:  Cookie cookie_name =new Cookie("Parameter","Value");  例如:Cookie newCookie =new Cookie("username","waynezheng"); response.addCookie(newCookie);  解释:JSP是调用Cookie对象相应的构造函数Cookie(name,value)用合适的名字和值来创建Cookie,然后 Cookie可以通过HttpServletResponse的addCookie方法加入到Set-Cookie应答头,本例中Cookie对象有两个字符串参数:username,waynezheng。注意,名字和值都不能包含空白字符以及下列字符: @ : ;? , " / [ ] ( ) = 处理Cookie的属性   看到这里,有的朋友又要问了:我光知道如何创建Cookie有什么用呀?是呀,光知道如何创建Cookie而不知道怎么使用是不够的。在JSP中,程序是通过cookie.setXXX设置各种属性,用cookie.getXXX读出cookie的属性,现把Cookie的主要属性,及其方法列于下,供大家参考:类型 方法名 方法解释 
    String getComment() 返回cookie中注释,如果没有注释的话将返回空值. 
    String  getDomain() 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同 一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com)  
    int  getMaxAge()  返回Cookie过期之前的最大时间,以秒计算。  
    String getName()  返回Cookie的名字。名字和值是我们始终关心的两个部分,笔者会在后面详细介绍 getName/setName。  
    String getPath() 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。 
    boolean getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。 
    String  getValue() 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。  
    int getVersion()  返回Cookie所遵从的协议版本。  
    void setComment(String purpose) 设置cookie中注释。 
    void setDomain(String pattern) 设置cookie中Cookie适用的域名 
    void setMaxAge(int expiry)  以秒计算,设置Cookie过期时间。 
    void setPath(String uri) 指定Cookie适用的路径。  
    void  setSecure(boolean flag) 指出浏览器使用的安全协议,例如HTTPS或SSL。  
    void setValue(String newValue) cookie创建后设置一个新的值。  
    void setVersion(int v) 设置Cookie所遵从的协议版本。     读取客户端的Cookie   在Cookie发送到客户端前,先要创建一个Cookie,然后用addCookie方法发送一个HTTP Header。 JSP将调用request.getCookies()从客户端读入Cookie,getCookies()方法返回一个HTTP请求头中的内容对应的Cookie对象数组。你只需要用循环访问该数组的各个元素,调用getName方法检查各个Cookie的名字,直至找到目标Cookie,然后对该Cookie调用getValue方法取得与指定名字关联的值 。 例如 <% 
     String userName=request.getParameter("username");//从提交的HTML表单中获取,用户名
     Cookie theUsername=new Cookie("username",userName);//以"username",userName值/对创建一个Cookie
     response.addCookie(theUsername);
    %>
    ..............
    <%
     Cookie myCookie[]=request.getCookies();//创建一个Cookie对象数组
     for(int n=0;n=cookie.length-1;i++);//设立一个循环,来访问Cookie对象数组的每一个元素
     Cookie newCookie= myCookie[n];
     if(newCookie.getName().equals("username")); //判断元素的值是否为username中的值
      {%>
       你好,<%=newCookie.getValue()%>!//如果找到后,向他问好
      <%}
    %>  设置Cookie的存在时间,及删除Cookie 在JSP中,使用setMaxAge(int expiry)方法来设置Cookie的存在时间,参数expiry应是一个整数。正值表示cookie将在这么多秒以后失效。 注意这个值是cookie将要存在的最大时间,而不是cookie现在的存在时间。 负值表示当浏览器关闭时,Cookie将会被删除。零值则是要删除该Cookie。 如:   <%
     Cookie deleteNewCookie=new Cookie("newcookie",null);
     deleteNewCookie.setMaxAge(0);
     deleteNewCookie.setPath("/"); 
     response.addCookie(deleteNewCookie);
    %>