【以下文字转载自 WebDevelop 讨论区】
JAVA中文站社区门户 jR:Y8W U ].H3z!_T.r2|+W【原文由 HAX 所发表】
JAVA中文站社区门户(`G
}}$Sq
kB/q著名
![](/icons/49787de.gif)
IBM DW 中文网站WebSite
![](/icons/49787dou.gif)
推出了Cocoon 2
![](/icons/49787de.gif)
介绍教程
![](/icons/49787dou.gif)
从而再次把我们
![](/icons/49787de.gif)
目光吸引到Cocoon上
![](/icons/49787dou2.gif)
以下是我在SDN
![](/icons/49787de.gif)
XML讨论区发表
![](/icons/49787de.gif)
个人看法
![](/icons/49787dou.gif)
贴过来涨点人气
JAVA中文站社区门户#a I2qX[-U*o
@5\IBM
![](/icons/49787de.gif)
这个教程非常好
![](/icons/49787dou.gif)
强烈推荐
![](/icons/49787dou2.gif)
BTW
![](/icons/49787dou.gif)
IBM
![](/icons/49787de.gif)
DW网站WebSite比CSDN有用多了
![](/icons/49787dou2.gif)
有关Cocoon
![](/icons/49787dou.gif)
希望有
![](/icons/49787yi.gif)
本
![](/icons/49787smhl.gif)
XSP/Cocoon/XML核心技术内幕
![](/icons/49787smhr.gif)
![](/icons/49787dou.gif)
基本上编译了
![](/icons/49787yi.gif)
些基本
![](/icons/49787de.gif)
Cocoon文档
![](/icons/49787dou.gif)
有
![](/icons/49787yi.gif)
定
![](/icons/49787de.gif)
参考价值
![](/icons/49787dou2.gif)
这也是我看到
JAVA中文站社区门户M(b7Y:u4_z国内唯
![](/icons/49787yi.gif)
![](/icons/49787de.gif)
![](/icons/49787yi.gif)
本Cocoon
![](/icons/49787de.gif)
参考书
![](/icons/49787dou2.gif)
但是该书如同其它国内书籍
![](/icons/49787yi.gif)
样
![](/icons/49787dou.gif)
对于基本理念
![](/icons/49787de.gif)
阐述不够详细和清晰
JAVA中文站社区门户8C!p:f}#N7z#VKtVlCocoon
![](/icons/49787de.gif)
原始动力是为了实现Content-Style-Logic
![](/icons/49787de.gif)
3层分离
![](/icons/49787dou.gif)
这是
![](/icons/49787yi.gif)
个Web Engineer
![](/icons/49787de.gif)
很好
![](/icons/49787de.gif)
实战
JAVA中文站社区门户q2RB(t9L6t*~m_iCocoon也源自于以前
![](/icons/49787de.gif)
ServerPages技术(主要是针对JSP
![](/icons/49787dou.gif)
当然ASP和PHP也有同样
![](/icons/49787de.gif)
问题)
![](/icons/49787de.gif)
缺陷
![](/icons/49787dou2.gif)
尽管JSP提出了JSP Model 2
![](/icons/49787dou.gif)
来实现Model-View-Controller分离
![](/icons/49787dou.gif)
即用JavaBean表示数据(内容)
![](/icons/49787dou.gif)
用Servlet控制业务逻辑
![](/icons/49787dou.gif)
用JSP实现显示逻辑和表现层
![](/icons/49787dou.gif)
但还是有些实战上
![](/icons/49787de.gif)
缺陷
![](/icons/49787dou2.gif)
有关这个问题
![](/icons/49787de.gif)
描述
![](/icons/49787dou.gif)
在2000年10月
![](/icons/49787de.gif)
文章
![](/icons/49787smhl.gif)
JSP 技术 -- 是友还是敌?
![](/icons/49787smhr.gif)
(http://www-900.ibm.com/developerWorks/cn/java/w-friend/index.shtml)中有详尽
![](/icons/49787de.gif)
讨论
![](/icons/49787dou2.gif)
但是如果我们跟上技术发展
![](/icons/49787de.gif)
步伐
![](/icons/49787dou.gif)
就会看到这个问题由于标签库技术
![](/icons/49787de.gif)
成熟和servlet过滤器机制
![](/icons/49787de.gif)
诞生而得到解决
![](/icons/49787dou2.gif)
TagLib早就有了
![](/icons/49787dou.gif)
但是直到临近JSTL即JSP Standard Tag Library
![](/icons/49787de.gif)
正式发布
![](/icons/49787dou.gif)
其威力才真正显现
JAVA中文站社区门户D1s K J-Wt'Z
FY_从角色任务上看
![](/icons/49787dou.gif)
![](/icons/49787chengxu.gif)
员主要负责JavaBean、Servlet和编写自定义标签库(现在可以使用JSTL从而大大减少负担);设计者编写“不包含java代码”
![](/icons/49787de.gif)
JSP
![](/icons/49787dou.gif)
实际上是若干种标记
![](/icons/49787de.gif)
混合
![](/icons/49787dou.gif)
HTML+JSTL+自定义标签
![](/icons/49787dou2.gif)
我认为这种框架比较适合于以Java
![](/icons/49787chengxu.gif)
员为主
![](/icons/49787de.gif)
团队(Team)
![](/icons/49787dou.gif)
以及业务逻辑复杂
![](/icons/49787de.gif)
应用
![](/icons/49787dou2.gif)
注意
![](/icons/49787dou.gif)
正如JSP
![](/icons/49787de.gif)
内嵌Java代码可以实现业务逻辑
![](/icons/49787dou.gif)
JSP
![](/icons/49787de.gif)
TagLib技术
![](/icons/49787dou.gif)
![](/icons/49787yi.gif)
样可以用于实现业务逻辑
![](/icons/49787dou2.gif)
当然使用TagLib将比内嵌Java代码好许多
![](/icons/49787dou.gif)
![](/icons/49787yinwei.gif)
代码被封装到了TagLib中
![](/icons/49787dou.gif)
因此对于小
![](/icons/49787de.gif)
应用还是可以使用JSP
![](/icons/49787dou.gif)
而不用写Servlet
![](/icons/49787dou2.gif)
例如使用JSTL
![](/icons/49787de.gif)
sql tag
![](/icons/49787dou.gif)
来直接处理数据库(这实际上意味着基本没有或者只有极其简单
![](/icons/49787de.gif)
包含在sql语句中
![](/icons/49787de.gif)
业务逻辑)
![](/icons/49787dou2.gif)
也可以用像<c:
![](/icons/49787if.gif)
>、forEach>的类
![](/icons/49787de.gif)
tag来处理业务逻辑
![](/icons/49787dou.gif)
虽然通常应该只被用来处理显示逻辑
![](/icons/49787dou2.gif)
固然
![](/icons/49787dou.gif)
这些功能会“引诱”
![](/icons/49787yi.gif)
些人过度使用gLib
![](/icons/49787de.gif)
能力而破坏了设计原则
![](/icons/49787dou.gif)
但对于原型开发、测试以及轻量级应用
![](/icons/49787dou.gif)
实在是太有用了!如果是企业级应用
![](/icons/49787dou.gif)
相信有能力做企业级应用
![](/icons/49787de.gif)
![](/icons/49787chengxu.gif)
员
![](/icons/49787dou.gif)
也会有足够
![](/icons/49787de.gif)
意识来按照MVC模式开发
V/R0K-`$m5R}Apache
![](/icons/49787de.gif)
Struts是
![](/icons/49787yi.gif)
个基于JSP实现MVC
![](/icons/49787de.gif)
很好
![](/icons/49787de.gif)
框架
![](/icons/49787dou.gif)
建议有兴趣
![](/icons/49787de.gif)
同志研究研究
![](/icons/49787dou2.gif)
而Cocoon
![](/icons/49787dou.gif)
用XML表示数据(内容)
![](/icons/49787dou.gif)
用XSP(非常类似JSP
![](/icons/49787de.gif)
XML形式)编写业务逻辑
![](/icons/49787dou.gif)
用XSLT实现表示层(HTML、WML、某种格式
![](/icons/49787de.gif)
XML甚至PDF)
![](/icons/49787dou.gif)
并用sitemap(Cocoon 2)集中管理
![](/icons/49787dou2.gif)
XSP逻辑单则和JSP
![](/icons/49787de.gif)
TagLib从概念到使用方法非常相似
![](/icons/49787dou.gif)
只是实现思路方法略有区别
![](/icons/49787dou2.gif)
JSP
![](/icons/49787de.gif)
TagLib包括
![](/icons/49787yi.gif)
个xml格式
![](/icons/49787de.gif)
定义文件和实现
![](/icons/49787de.gif)
Tag类
![](/icons/49787dou.gif)
并被编译使用;而XSP逻辑单则在运行时(当然可以进行Cache)应用XSLT进行从标记到代码
![](/icons/49787de.gif)
转换
JAVA中文站社区门户
W&X7E$b](按照我对IBM教程
![](/icons/49787de.gif)
理解)事实上按照管道
![](/icons/49787de.gif)
概念
![](/icons/49787dou.gif)
从原始数据到最终呈现可以有任意层
![](/icons/49787dou.gif)
至于如何分层
![](/icons/49787dou.gif)
每个层
![](/icons/49787de.gif)
用途
![](/icons/49787dou.gif)
则在于设计者
![](/icons/49787dou2.gif)
这也是为什么Cocoon被定位于Web发布“框架”
gkN%Q9r^T![](/icons/49787yi.gif)
个处理流程可以被描述为:(摘自IBM教程)从用户接受请求
d&F,Ft.Bzq确定用来解释该请求并生成响应
![](/icons/49787de.gif)
适当管道(使用匹配器)
PI\g*Xx从可用
![](/icons/49787de.gif)
预配置
![](/icons/49787de.gif)
组件构造管道
JAVA中文站社区门户C.f1_
d}Pk3A指示管道为请求服务
JAVA中文站社区门户6vmH,GyV$h将由管道生成
![](/icons/49787de.gif)
响应返回用户
![](/icons/49787dou.gif)
可能对结果进行高速缓存Cache以便以后使用
9{'E7G6|5Ln在JSP Model 2里
![](/icons/49787dou.gif)
Servlet扮演“调度员”
![](/icons/49787de.gif)
角色
![](/icons/49787dou.gif)
我们用它来控制任务分派
![](/icons/49787dou.gif)
这有点类似管道所作
![](/icons/49787de.gif)
事情
![](/icons/49787dou2.gif)
事实上
![](/icons/49787dou.gif)
Cocoon就是
![](/icons/49787yi.gif)
个大Servlet
![](/icons/49787dou2.gif)
只是Servlet在2.3的前缺乏管道机制
![](/icons/49787dou.gif)
只能进行简单
![](/icons/49787de.gif)
forward和
![](/icons/49787include.gif)
![](/icons/49787dou.gif)
如果需要多重处理机制
![](/icons/49787dou.gif)
就不得不依靠扩展库(比如IBM
![](/icons/49787de.gif)
WebSphere)
![](/icons/49787dou.gif)
或者采用Cocoon
![](/icons/49787dou2.gif)
但是现在Servlet有非常强大
![](/icons/49787de.gif)
filter机制
![](/icons/49787dou2.gif)
这使得Cocoon和JSP越来越有结合
![](/icons/49787de.gif)
趋势
8|/k
t%l'vl%j但Cocoon
![](/icons/49787de.gif)
特点在于
![](/icons/49787dou.gif)
除了核心功能(Core-Cocoon)的外
![](/icons/49787dou.gif)
它还包括内部组件(包括Matchers、Generators、Transformers、Serializers、Aggregators等)、内部逻辑单(Response、Sitemap、XSP、XSP-Request、Util、XSP-Cookie、Log等)
![](/icons/49787dou2.gif)
这样它就有
![](/icons/49787yi.gif)
个非常适合Web发布
![](/icons/49787de.gif)
环境
![](/icons/49787dou2.gif)
而使用JSP
![](/icons/49787dou.gif)
相对来说
![](/icons/49787dou.gif)
需要自己进行配置和写部分
![](/icons/49787de.gif)
基础代码
XV2zzsX3ru;Q从角色任务上看
![](/icons/49787dou.gif)
站点管理员负责定义Sitemap
![](/icons/49787dou.gif)
![](/icons/49787chengxu.gif)
员主要负责XSP逻辑单
![](/icons/49787dou.gif)
设计者编写XSLT样式表(包括XSLT和目标代码如HTML)
![](/icons/49787dou.gif)
![](/icons/49787yinwei.gif)
![](/icons/49787chengxu.gif)
员和设计者都使用XSLT
![](/icons/49787dou.gif)
其实就是在写格式转换
![](/icons/49787dou.gif)
只是编写者需要熟悉如何处理输入和输出(如设计者要面对HTML
![](/icons/49787dou.gif)
![](/icons/49787chengxu.gif)
员要考虑数据库)
![](/icons/49787dou2.gif)
此外
![](/icons/49787dou.gif)
在此的前需要有额外
![](/icons/49787de.gif)
角色来定义所用到
![](/icons/49787de.gif)
XML或其他中间格式
![](/icons/49787dou2.gif)
我认为这种框架比较适合于非Java
![](/icons/49787chengxu.gif)
员为主
![](/icons/49787de.gif)
团队(Team)
![](/icons/49787dou.gif)
管理员只要熟悉XML
![](/icons/49787dou.gif)
![](/icons/49787chengxu.gif)
员和设计者需要掌握XSLT;以及适合于业务逻辑相对简单
![](/icons/49787dou.gif)
而着重于xml数据和灵活
![](/icons/49787de.gif)
格式转换需求
![](/icons/49787de.gif)
应用
JAVA中文站社区门户6E;_QI4t(n:e※转载:· bbs.sjtu.edu.cn
7N|p%^)fO t5Y:P5C\eUuL&Z'kR'|U [/{4lS u^RU[
本帖最后由 mylovejave 于 2008-12-20 02:02 编辑 ]
TAG:
JSP
Jsp
Cocoon