我增回答过类似的问题,现重新拿过来,不知对你是否有用。下面是《JSP Web 编程指南》中写的:
为什么需要的Web框架 
    如果你研究任何真实的应用程序,将会发现它的组件可以大致分成两类:
• 商业组件
• 应用服务
多数情况下,跨不同的应用来重用商业组件是困难的,因为由商业组件提供的功能可能在其他应用里不需要:它可能是惟一针对你的应用的。然而,应用服务可以在机构里跨应用重用,跟跨机构一样好,因为它们提供的服务对不同类型的应用都有用。这些应用服务可能包括请求路由(对一个MVC结构)、错误处理、以通用的方式产生的客户端脚本和已准备妇的标签库。
任何可以提供这些类型服务,且能通过与商业组件的协作编进你的应用的软件,可以被称为一个Web应用框架。
很多大型的机构开发内部框架,可以在机构内部被不同的应用开发重用。然而,一些大公司同很小的机构一样,没有足够的时间和资源开发一个内部框架,而使用第三方框架产品:不管是商业软件还是开放的免费软件。这个方法的优势是你可以获得已经开发好的和测试过的软件包,因此可以节省时间、金钱和资源。
在本章,我们将学习一个使用最普遍的第三方Web应用框架,Apache Struts框架。接下来的两章,基于学到的知识,用Struts设计和开发一个实际的应用程序。--------------------------------------------------
下面是另一本书《JSP编程指南》写的:
Struts框架中包含了以上这些丛书中讨论过的通用资源,以实用的、可扩展的方式实现了一种良好的软件设计理念,并很好地利用了Servlet和JSP技术。许多人都坚信这一框架今后会被广泛地应用于WEB开发领域中。------------------------------------------------
Struts (org.apache.struts)是一个开放源代码的Web应用框架,基于MVC设计模式,使用servlet和JSP API建立,可以用来构建复杂的Web应用。它允许我们分解一个应用程序的商业逻辑、控制逻辑和表现逻辑的代码,使它的重用性和维护性更好。Struts框架是Jakarta工程的一部分,由Apache软件基金会管理。Struts可以从http://jakarta.apache.org/ struts站点下载。
Struts框架提供以下服务。
• 作为MVC结构中的controller的servlet.
• JSP里用于bean管理、HTML和JavaScript生成、模板处理和流程控制的JSP标签库。
• 用于国际化消息的框架。国际化你的Web应用,意味着你的Web应用在使用时可以让用户以喜爱的语言显示。这意味着你需要创建一个应用资源文件,包含每种语言的信息。
• 一个JDBC的实现来定义数据源和数据库连接池。
• 一个通用的的错误和异常处理机制,包括从一个应用程序资源文件读取错误信息。
• XML语法分析。
• 文件上载工具。
• 注册机制。------------------------------------------
在http://expert.csdn.net/Expert/topic/2403/2403813.xml?temp=.0073511中我是这样写的:
....当然,如果你想偷懒,或想分析一下成功Struts项目各个文件配置和编写情况,完全可下载一个Struts开发工具--JSPStudio,内有几种Struts模板,包括Struts空的数据库应用模板。另外,只要通过向导输入一个文件名和选择数据源导入字段信息,自动生成所有应用文件和代码,包括数据库连接DAO、JSP分页表格(表格上除了有分页之外,还可选择地包含有更新、删除、连接功能),完成一个数据库表的应用不用自己写一行代码,就可实现数据库的查找分页显示、更新、删除、连接等功能。
另外,还可实现Struts标签的可视化设计,和FrontPage用法很相似。
JSPStudio下载地址ftp://162.105.80.43/incoming/
如果进入ftp时提示输入密码,说明当前连接用户已满,请你在连接用户少时再去下载,不用用户名和密码。

解决方案 »

  1.   

    我也曾经花了一段时间研究taglib,确实是比较好用的技术,而且也为更好实现mvc提供了一条很好的途径;现在为什么会有这么多的mvc的framework?我觉得这是好事,一方面出发点是为了更方便地实现mvc,另一方面的出发点是为了提供更强大的网站开发功能吧。
      

  2.   

    谢谢楼上的两位• 作为MVC结构中的controller的servlet.
    • JSP里用于bean管理、HTML和JavaScript生成、模板处理和流程控制的JSP标签库。
    • 用于国际化消息的框架。国际化你的Web应用,意味着你的Web应用在使用时可以让用户以喜爱的语言显示。这意味着你需要创建一个应用资源文件,包含每种语言的信息。
    • 一个JDBC的实现来定义数据源和数据库连接池。
    • 一个通用的的错误和异常处理机制,包括从一个应用程序资源文件读取错误信息。
    • XML语法分析。
    • 文件上载工具。
    • 注册机制对framework有点感觉了,但是觉得实现起来比jsp的taglib麻烦许多!
      

  3.   

    MVC, use taglib just deduce the burdensome work in the prensation layer.
    In another word,taglib just a little part of the tech in the MVC framework.
    MVC is framework.
    Taglib just a tag library but nothing else.
    We also can throw away taglib when use MVC framework.
      

  4.   

    to dmhorse
    谢谢你的回答!
    我知道taglib仅仅是framework的一部份,但是我就是想问问我只用taglib是不是也可以实现MVC的显示和业务分离?比如我作了个BBS 用的jsp+servlet+bean 但由于给客户用的经常要改界面和颜色,为了美工和自己方便,我就想把页面和代码彻底分开,所以我用了taglib ,taglib理解比较容易,做起来还是比原来页面镶嵌代码麻烦很多。如果我用framework 比如struts是否比自己定义taglib方便呢?我特地看了一下struts觉得结构和taglib差不多呀!当然struts有很多现成的东西可以用
      

  5.   

    我觉得这两者之间的功能就完全不一样:
      tag是用来完成页面显示的,目的是为了在JSP页面上减少Java代码.本来JSP更加适合于只懂一点点Java知识的人使用,但是我觉得现在的人们把好多东西都在JSP里面实现,包括好多书上也是.这本来就是误导,如在JSP页面用JDBC连接数据库.JSP只是用来把应用程序员提供给你的用JavaBean捆绑的数据显示出来而已.假如要显示的数据比较复杂,而复用性又较高的,就可以作成Tag供美工人员使用.
      Struts类的框架是用Servlet程序实现的,他关键实现的是显示逻辑,如页面之间该怎么跳转,还有就是从如EJB等DAO中读出数据转发给JSP页面.
      

  6.   

    Absolutely not.
    MVC, Taglib would only existing in the jsp page.(View)
    The servlet charge all of the business delegation.Quote:
    比如我作了个BBS 用的jsp+servlet+bean 但由于给客户用的经常要改界面和颜色,为了美工和自己方便,我就想把页面和代码彻底分开,所以我用了taglib ,taglib理解比较容易,做起来还是比原来页面镶嵌代码麻烦很多。如果我用framework 比如struts是否比自己定义taglib方便呢?我特地看了一下struts觉得结构和taglib差不多呀!当然struts有很多现成的东西可以用The damn customer always enjoy changing the layout.It is easy to revise if u use xml binding with the xsl.At least,I always using this tricky way.All of the web form representing by the tab-lib,as I said,u also may use jsp code instead of it. It just like a normal formbean.But why we do these,strut has provide the full approach.
    We needn't write the exception controller,the specified web form bean,national properties reader and front controller .Follow the simple rule and implement the specified interface of strut,it really save our time. Empirically, it doesn't reduce the lines of code.Frankly, there are the weakness while using strut,caze we still follow,and follow.
    The problem set for us is not the tech of strut so much as our creation in the IT world.Any way,as a wage earner,let it be................
      

  7.   

    不要只看到技术,从商业上看: 对整体而言,如果每一个企业都用taglibs做一套自己的应用,有许多部分是重复的,浪费。如果要开始新的项目,新找的人,还要一定的培训期,来熟悉本企业特有的taglibs,这段时间也是要付薪水的。如果本企业熟练工走了,出了问题,难以解决。(注意,一个taglib应用,应该是很多的逻辑和代码,不是学习时的几个类 )
      

  8.   

    [一个taglib应用,应该是很多的逻辑和代码]
    确实是这样的,bdsc() 说得不错从企业运用的效率来说重复的,浪费很不好的。
    to dmhorse(dmhorse) 
    谢谢你的回复
    Taglib would only existing in the jsp page.(View) 我觉得不太对,也许我水平低,我觉得taglib含很多的业务逻辑,不仅仅页面显示。
    to shangqiao(伤桥)
    谢谢你的回复还有大侠高论没有呀?
    今天结贴!
      

  9.   


    taglib也可以实现很多逻辑处理的,比如一个jsp页面,需要login之后的用户才能够访问,
    如果用jsp代码,则需要if else这样的判断,但是如果用taglib,则很方便。下面是copy自 大富翁论坛坛主yysun两年前写的关于taglib序列文章的一段:
    1.1 需要用户验证的网页。

    • 不用自定义标记的做法
    <jsp:useBean id="userM" scope="session" class="com.delphibbs.users" />
    <%
    if (userM.chkUserStatus() != 1) {
    response.sendRedirect(response.encodeRedirectUrl("login.jsp "));
    }
    else {
    %>
    …….. 网页 html 内容
    <%
    }
    %>&#8226; 使用自定义标记的做法
    <%@ taglib uri="delphibbs" prefix="delphibbs" %>
    <delphibbs:login >
    …….. 网页 html 内容
    </delphibbs:login>
    特别是我在写了xsl:XXX这样的标记,以及在xsl里自己定义扩展函数之后,感觉到taglib的功能非常强大,只是现在才刚开始学习。struts也不过是自己定义了一套taglib啊,它把MVC的C这部分由用户扩展来完成具体实现。
    现在用taglib的人好象不是很多,相关的资料也少。我经过几天收集,才只找到 IBM的 JSP最佳实践 和 JSTL 入门序列文章,和yysun的taglib序列文章。以及其它一些零散的资料。特别是看到yysun的文章是两年前就写出来了的,对于国内对新技术的掌握,心里的感慨...... 唉......以上个人浅见,还请大家指点。
      

  10.   


    刚才仔细看了一下,yysun关于taglib的序列文章是在2000年10月份写成的。应该是3年前了,呵呵
      

  11.   

    Yeah,taglib can contains the logic,but just the logic in the prensation layer.
    For example<!--Record List-->
    <logic:iterate id="waveRecord" name="waveRecords" type="IAD.Bean.WaveRecord">
    <tr>
        <td><a href="http://<bean:write name="waveRecord" property="ip"/>/rrp/<bean:write name="waveRecord" property="folder_name"/>/<bean:write name="waveRecord" property="filename"/>">Download</a></td>
        <td><bean:write name="waveRecord" property="staffName"/></td>
        <td><bean:write name="waveRecord" property="inPhone"/></td>
        <td><bean:write name="waveRecord" property="outPhone"/></td>
        <td><bean:write name="waveRecord" property="file_date" format="yyyy-MM-dd HH:mm:ss"/></td>
        <td><bean:write name="waveRecord" property="status"/></td>
        <logic:equal name="searchRecordForm" property="isRaw" value="false">
        <td>
            <bean:write name="waveRecord" property="salesCallLog"/>
        </td>
        </logic:equal>
    </tr>
    </logic:iterate>logic:equal indicates that the tag lib present the logic for the jsp to the viewer.But the business logic still hidden in the background.
      

  12.   

    to bdsc() :taglib的使用是使得开发更方便简化,而不是把它搞复杂。即使每个企业定制一套自己的taglib,那么困难也应该是taglib的设计和实现,而不是在taglib的使用。看看现在的我们,又有多少人是等公司专门培训了相关技术,然后才会开始使用的???更多的是自己学习,而自己学习的话,只要能够找到详实的相关taglib使用文档和示例,那么学习起来也是非常快的。(不过得看公司对相关文挡的编写是否重视)。因此也只能说是如果是公司里的taglib的编写人员走了,可能会造成某些问题,taglib的使用人员走了,影响不会很大的。凭自己尚未入门的感觉,JSTL里的tag已经可以满足很多webapp的开发了。(有说错的地方,还大家笑过之后不吝指点。)
      

  13.   

    Put the business logic into the customer tablib.I suppose it very time-consuming
    and never try it.Any one has exp in this realm?
      

  14.   


    商业逻辑肯定不能够单靠taglib来实现,但是taglib能够解决一些简单的控制逻辑,比如权限判断,页面跳转之类。个人理解:如同javascript,好的业务逻辑的实现不可能只靠javascript在浏览器端的表单验证之类,也不可能完全都在服务器端进行数据的合法性判断。而两边同时都实现。taglib也是这样,光靠taglib来实现所有的业务逻辑不太可能,但是可以把一部分用taglib实现起来比较方便的东西,交给taglib来完成啊。
    比如xsl规范自己提供的一些函数已经能够满足很多需要了,但是更复杂的东西,可以通过xsl支持的扩展函数来实现。taglib一样,taglib也不是能够满足所有的要求,但是很多地方如果用taglib来实现的话。
    jsp将显得更简洁,可读性也很高。有空的可以看看:ftp://new:[email protected]/datanew/delphibbs.war
    //参考连接  http://www.playicq.com/dispdocnew.php?id=4359
    是DelphiBBS的JSP实现(未经授权).作者就是使用JSTL1.0来改写的原来由asp写出来的程序。完全由taglib来实现的代码,读起来另有一种感觉:)
      

  15.   

    但是taglib能够解决一些简单的控制逻辑,比如权限判断,我觉得最好运用的是页面 循环的内容(目前我觉得对我来说最方便的地方),使用<xxx:xxx><table></table></xxx:xxx>(<table></table>里面为数据库读取的内容),美工可以很容易的修改页面的样式,这样做出来的东西特别是对网站开发可重用性特别高。
      

  16.   

    多谢各位大侠的讨论!在下收益非浅!
    我的感觉 framework 是建立在taglib之上的,功能比taglib强大。
    我使用taglib的初衷是为了美工能方便的修改显示,业务逻辑这一块能重用,目前taglib能满足我的需求,也许是水平低才觉得满足了我的需求,准备仔细研究一下struts看看究竟是谁方便。
    再次感谢!
    希望下次还能得到大家的帮助!
      

  17.   

    呵呵,就我自己的习惯来说我宁愿将显示逻辑封装在Java类里面,理由非常简单Jbuilder在编辑JSP时带有语法提示,自定义标记就没有,还要费精力去记。