关于Jblooming

简单的了解了一下JBLOOMING。看管了Struts Spring 之类的 xml 配置驱动的框架,第一次知道原来JSP也可以进行配置,不免有些新奇,看过官方简陋的说明文档也大体了解其工作原理,但就Web层来说,这儿只是将web访问的状态封装了起来(SessionState,PageState,ApplicationState),然后在view部分进行简单处理。仔细想想设计的动机竟是如此简单,只不过其view部分的封装的彻底性导致其代码结构看起来有些恐怖异常。没有学过Tapestry,

看到这种封装,也大抵猜出T的事件驱动开发原理,无非是组件封装,事件封装以尽其OO之所能。
不过,说实话,JB关于ajax和view component的封装实在是太纯粹了(代码看起来有点ft),优化一下简直一个appfuse。

加油加油,早日编出一个属于自己的框架,一切尽在YY中。

Struts学习随笔(4)

  1. <html:base/\>
  2. 统一资源标识符(URI) 是一个简短的字符串,用来标识在Internet 或
    者其他网络中的资源。资源可以是一个文档,图像,下载文件,电子
    邮箱,或者其它东西。一个 URI可以对应一个服务器文件系统的路径,
    但通常也有一个别名。Strtuts应用中的许多URI都是Java类或者Action
    的别名。
    因为路径是在配置文件中定义的,你可以随时改变你的主意而不用触
    及到JSP源代码。如果 你更改并重载了配置文件,改变会在页面下次
    渲染时生效。
  3. <html:errors/\>

  4. 认识到了struts 导航的威力,所有的操作都要通过controllor,浏览器不留
    任何的书签…., ForwardAction体现的MVC的一大精髓,这种导航机制实在
    不错,client看不到任何的物理成分,牛

Struts In Action ChapterIII 终于看完了,收获颇丰……………….

Struts学习随笔(3)

对于一个框架,它至少应该具备以下三个部分:

####外部配置文件
提供开发人员不想嵌入源代码中的实现细节。

####中心控制器
提供一种方式,将HTTP 请求排入一个易于管理的队列。这种设计有时叫前端控制器
模式(Front Controller [Go3])

####外部表现系统
让不同的人同时工作在同一应用的不同部分。如, Java 工程师可以工作在和中心控制
器相关的类,而页面设计者则专注于JSP。除了JSP,其他表现系统,如Velocity Templates或者 XSLT, 都可以和Struts 一起使用。

####框架有时分为两极标有白盒和黑盒的统一体
白盒框架严重依赖于面向对象的语言的特征,如继承和动态绑定。黑盒框架则注重定义可插入组件的接口,然后基于这些接口提供基本的起始组件。接口和基本组件通常提供热点(hotspot)方法,这个方法可以直接使用或者重写后提供特别的行为。

Design Patterns 中的MVC 例子称为通知/订阅者(notify/subscribe)协议和观察者(Observer)模式的使用。

结合使用 JSP和 servlet 开始被称为Model 2 (单独使用JSP 称为Model 1)

层模式在一个复杂应用中,这可以在添加组件时,防止依赖关系呈指数增长。在设计远程应用时,分层是一个核心模式。

分层的web 应用使用一种比传统MVC 模式更加“扁平”的模式。控制器被夹在表现层(View) 和应用逻辑 (Model)之间。
每个组件的主要职责并没有改变。流程有轻微改变,即查询状态和改变通知都必须通过控制器。另一个改变是,当视图,或者表现层需要渲染动态页面时,它使用从控制器传递的数据而不是直接来自于模型层。这种改变去除了View 和 Model 的耦合,允许控制器选择数据和显示这些数据的视图。

Struts 通过提供一个控制器Servlet 实现了Sun 的 Model 2 架构,这个控制器可以用来管
理JSP 页面和其他表现设备之间的流程。Struts 通过使用ActionForward和ActionMapping
来保证表现层之外的控制流决策来实现 MVC/层 模式。JSP 可以引用一个逻辑目标。控制器组件在运行时提供准确的URI。
类 描述
ActionForward 用户指向或者视图选择
ActionForm 状态改变的数据
ActionMapping 状态改变事件
ActionServlet 控制器,接受用户请求和状态改变,以及发出视图选择
Action 控制器的一部分,与模型交互,执行状态改变或状态查询,以及告诉ActionServlet 下一个选择的视图

ApplicationResources.properties 存储本地化信息和标签,以使应用可以国际化
struts-config.xml 存储控制器对象的缺省配置,包括模型支持的用户指向,状态改变,状态查询

标记库描述符 目的
struts-html.tld 扩展HTML Form的JSP标记
struts-bean.tld 扩展处理JavaBean的JSP标记
struts-logic.tld 扩展测试属性值的JSP标记

IMPORTANT

实践中,控制器与视图的交互通过请求,会话以及Servlet 平台提供的应用上下文进行。
控制器和模型的交互通过文件和数据存储系统完成 (比如装入XML 文档或者属性文件),或者通过其他服务,如TCP, 创建一个到JDBC 数据库的连接。

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

当ActionServlet 收到一个请求, 它通过一系列的流程处理locale, mapping, form bean, 最
后是Action 来运行这个请求
当ActionServlet 收到一个请求, 它通过一系列的流程处理locale, mapping, form bean, 最
后是Action 来运行这个请求。这里某些步骤只在Struts 1.1 应用才有:
􀂄 处理多部分请求. 如果请求是个多部分(multipart)请求 (比如,一个表单加上一个MIME
附件), Servlet 用一个特殊的句柄包装这个请求,避免处理错误。
􀂄 处理路径 ActionServlet 首先检查这个请求路径是否是一个应用模块。如果是,相应模
块的配置被选中。[Struts 1.1]
􀂄 处理场所.(local) 默认下,ActionServlet 会检查是否有一个标准的locale 对象在用户会
话的上下文当中。如果没有, ActionServlet将放入一个。这个对象将为每个用户提供
本地化表现。
􀂄 处理内容和缓存 默认的MIME 类型和可选的请求头将加在响应之上。
􀂄 处理映射( Mapping) ActionServlet检查ActionMapping,是否有注册的路径符合正处
理的请求。如果没找到,ActionServlet 转发到默认(或 “unknown”) Action(如果设定有
默认或未知Action),否则,产生一个 “bad request” 错。如果找到相关映射,将被放入
请求之中,供后面引用。
􀂄 处理角色. ActionServlet 检查是否用户被授权可以访问action. [Struts 1.1]。
􀂄 处理ActionForm. ActionServlet 检查是否mapping 中指定了一个ActionForm.。如果是,
servlet 检查是否已经有一个存在于特定的范围之内(默认是会话)。如果不存在,
ActionServlet 创建一个。
􀂄 处理组装. ActionForm的 reset 方法被调用,然后通过反射机制被自动组装。匹配
ActionForm属性的参数将被使用。其他参数和属性被忽略。
􀂄 处理验证 ActionForm的 validate 方法被调用。如果方法返回false, 控制传递给
ActionMapping的input 属性标明的路径, Action 未被处理。
􀂄 处理转发和包含 如果ActionMapping 标明forward 或include 属性,控制被传递给其
他资源。否则ActionServlet 将请求委托给一个Action 对象。
􀂄 处理 Action. 如果mapping 标明一个Action 类型, ActionServlet检查是否已经有一个被
实例化了。如果没发现, Action 对象将被实例化。每个类只能有一个Action 对象
(Singleton 模式),它通过多线程处理所有对它的请求。Servlet调用 Action的 perform
或 execute 方法,传递请求, 响应, mapping, 以及form bean。
Action 执行要求的行为,可以包括:
􀂄 访问数据系统,比如JDBC 数据库
􀂄 在请求中创建被视图使用的对象
􀂄 如果需要,在会话中创建对象
􀂄 根据需要更新会话对象,比如用户的场所
􀂄 执行需要的业务功能
􀂄 处理以外和其他错误条件
􀂄 发送一个直接发送一个响应,或者返回一个ActionForward 给servlet
这里某些行为,象访问数据库,通常由Action 调用的业务对象来处理( Business Delegate
模式)。 Action 处理一些web 特定的任务,可以放在业务对象中的代码都应该放入业务对
象。Action 是一个控制器类,不应该用来处理业务的核心逻辑。

通常, 动态数据在JavaBean 中传递到请求上下文中的页面。这就是熟知的视图助手(View
Helper )模式
ps: struts in action 真是通俗易懂啊….

毕业设计

设计题目:整合WAP和WEB的移动/在线航空订票系统

内容概要:

随着移动技术的迅猛发展,移动终端的显示和处理能力日渐增强,随之而来的便是采用wap技术编写的网站或系统的广泛应用,它与传统的web应用逐渐掩盖了传统的c/s应用模式的光芒,成为了应用的焦点。目前,很多的wap应用都是与传统的web应用隔离开的,即wap应用的模型数据部分的编写完全是基于移动应用的,这些部分如果要适应与web应用就必须要进行重构,随之出现的便是现在存在的很多的wap/web应用都需要调用不同的模型以适应不同平台的应用,这无疑浪费了太多的资源,因此wap和web的整合是减少这种浪费的一种途径,为进行更合理的应用我们必须实现wap和web的整合。

本设计正是针对当前存在的这种wap/web应用的隔离,提供一种整合方案,本设计目的正是建立一个移动/在线航空订票系统,以实现wap和web的整合。系统采用J2EE开源MVC框架建立,支持移动终端和web浏览器的双重访问,并严格地采用MVC设计模式,划分为web/service/dao三层,对于web层,分别采用wap/web标准编写视图代码,wap/web请求到达web服务器,控制器对请求进行识别,根据请求来自的平台将请求分派给公共的模型部分,模型数据取出后经由控制器处理传递到相应的视图部分,从而实现了模型独立基础上的wap和web的完全整合。对于表现层部分系统采用当前流行的Struts开源框架,而在持久层部分则采用目前最流行的ORM框架-Hibernate,同时,采用轻量级框架Spring,并利用其特有的IoC机制,将整个系统整合在一起,对于web视图部分,为了提高响应灵敏性,系统融入了AJAX 等相关技术,而对于wap则采用传统的wml+jsp机制。系统的主要功能包括:航班的信息查询和管理;航班票务信息的查询和管理;客户信息的录入;客户信息的维护和管理;机票的实时预定功能;机票的预定的取消;航班信息的设定;新闻的发布和维护;系统提示功能等等,用户通过PC和其他移动终端对系统进行实时访问,对于移动用户系统根据设备的特定功能采用J2ME相关技术添加短信提醒,闹钟提示等特定功能。

通过设计该系统,可以深入了解wap协议的相关知识,深入了解MVC设计模式,并在实践过程中掌握Struts,Spring等MVC框架的相关知识,以及Hibernate ORM框架的相关技术原理和使用技巧,同时通过对web页面编写,可以深入了解AJAX技术的相关原理和操作技巧,同时, 通过系统的构建过程可以实践软件工程理论、深刻理解面向对象思想,以及系统分析、设计、编码、测试等等相关知识,对于自身能力的提高大有裨益。

最后,希望本次毕业设计能够使自己实践的能力能够得以提高,同时,祝愿这次毕业设计一切顺利。

Struts学习随笔(2)

飞思struts.chapter2终于搞定。

异样的晕,入门就是难.

对于Hello app,有以下随笔:

  1. 视图包括两个组件:
    a. 一个jsp文件,Hello.jsp。
    b. 一个ActionForm Bean,HelloForm Bean
  2. JSP文件没有任何java代码,使用了许多struts客户化标签(联系视图组件跟其他组件的纽带)。
  3. 至少也要知道struts html bean logic标签库的基本用法吧。
  4. <bean:message\>标签输出文本内容,来自于Resource Bundle,每个Resource Bundle对应一个或多个本地化消息资源文件。采用“消息key/消息文本”方式。
  5. HelloForm extends ActionForm 并覆写 validate() reset()方法 ps:其实就是简单的javabean+上述两个方法。
  6. 数据验证包括:表单验证,业务逻辑验证。前者由validate搞定,后者需要由Action来搞定。
  7. 控制器组件由ActionServlet 和 Action组成。ActionServlet 框架自带,Action需要扩展,HelloAction extends Action。
  8. 表单验证通过后,执行Action 的 execute()方法。返回ActionForward对象,包含了请求转发的路径信息。
  9. MessageResources m=getResources(request) 封装 Resource Bundle 本地化信息。
    m.getMessage(String key)
  10. Action常将数据保存在request session范围内,以便向视图组件传递信息。
  11. 模型组件常包含一个业务方法saveToPersistentStore(),(想到了Hibernate。。)
  12. struts的key常量常存在Constants.java中。提高Action的独立性。
  13. web.xml对ActionServlet进行配置。并声明使用的struts标签库。
  14. struts-config.xml将struts划分的组件组装起来。
  15. 应用程序发布。
  16. 超级无敌具体的执行流程!(超晕)
  17. 擦汗。。。。 这一章好晕。

Struts学习随笔(1)

只要有点WEB开发的常识,就应该知道Struts开源框架的无穷魅力,本着对魅力追逐的原始性,我也埋头苦练,争取有所造诣。

今天小看了一下飞思的sruts教材,刚看过chapter1,总算对它有了较为深刻的大体了解,感觉比较重要的知识如下所述:

  • web共享信息的四个范围(scope):page,request,session,application
  • web组件三种关联关系:请求转发,重定向,包含(ms高深的名词,其实。。so so)
  • MVC思想,以及M.V.C的分别含义。
  • 了解JSP MODEL2的实现原理。
  • 了解ACTION,ACTIONSERVLET,ACTIONMAPPING,STRUTS-CONFIG.XML,ACTIONFORM,LIB含义,及之间的联系,(ms很多,其实。。so so)
  • YY一下

走了好久
还是在走
一路上习惯了独来独往
宿命式地爱上了自己的背影

或许是自己的灵力
抑或是旁人的恻引
周围的人渐渐多了许多
于是周围多了一些歇斯底里的微笑

看着嬉笑的人群
本能地以为自己的路变了
甚至以为自己变了

悄悄地观察
竟发觉笑声中有太多太多的虚假
或许彼此之间的问候只是为了验证彼此的存在
或许一声问候只是为了对方手中的一个苹果
吃完之后只记得淡淡的甜而忘了对方心中的苦
偷偷地顿首
才明白路是人走出来的
不是变出来的
人的天性是上帝给的泛泛之辈又岂能轻易改变

于是明白了只有自己和亲人对自己是真实的
往昔的欢声笑语只是未来颓废时的回忆
抑或只存在于梦里

一路上走了这么久
身上竟无一丝灰尘
天使说
如果你可以保持这样一辈子
来世必成为天堂最纯洁的大天使
我不禁笑了
我虔诚地揭开衣脚
露出胸口那颗若隐若现的恶疮
阳光下感到胸口隐隐地痛
天使大惊失色
箭似的消失在阳光尽头
我会心地笑了
仿佛回到了过去一样

撒旦说
如果你可以保持这样一辈子
来世必成为天堂最伟大的魔
我不禁笑了
奇异的是竟笑出一身的冷汗
接着是透心的凉
凉地睁开了双眼

一场梦
一场梦而已
好长的梦啊
长得竟记不起何时走入的梦境
只记得曾经微笑过
现在周围没有了欢笑
只能隐约的感觉自己还在呼吸

…………

现在一切都归于真实
我知道我又要回到过去了
拍拍身上看不见的灰尘
仿佛时间转到不久前
跟天使道声再见
跟撒旦说声永别
又开始了那该死的行程

走着走着
就累了
星光都淡了
听着听着
就醒了
开始埋怨了
回头发现
不见了
突然我乱了