2007年8月11日星期六

再来一篇艰苦奋斗的文章

精通struts-基于mvc的java.web设计与开发
2007-2-3 晚
看书总是要作笔记的,但是现在常年在外短短的几个月我做的笔记又垒了厚厚的一摞子,每次搬家实在是一种折磨,有种食之无肉,弃之可惜的感觉,今天彻底下定决心,开始电子笔记,可能要失去笔尖在纸上飞驰的那种快意感。但相比而言还是比较值得改革的,想起一句话,中国人民总是认为改革就是好的:)

本书名《精通struts-基于mvc的java.web设计与开发》
作者:孙卫琴
1.共享数据的范围:
Page:用户请求访问的当前jsp网页
Request:用户请求访问的当前web组件以及和当前web组件共享同一个用户请求的其它web组件
Session:共享数据存在于整个http会话的生存周期
Application:整个web应用的生命周期

2.JavaBean在jsp中的语法:
例:假设有一个JavaBean的类名为CounterBean,它有一个Count的属性

注:myBean为自命名 scope里面的属性可以为page/request/session/application

如果将JavaBean的内容输出网页:


如果要给莫个JavaBean的属性赋值:

3.视图:
Struts框架中的ActionForm Bean划分到视图模块中,Struts利用ActionForm Bean来进行视图和控制器之间表单数据的传递。
流程:Struts框架把用户输入的表单数据保存在ActionForm Bean,然后传给控制器,控制器可对表单数据进行修改,jsp文件使用Struts标签读取修改后的Action Bean的信息,并重新设置HTML表单。

4.控制器
控制器由ActionServlet和Action类来实现
ActionServlet 继承了java.servlet.http.httpservlet类,它在Struts中扮演中央控制器的角色;它的主要任务:接收Http的请求信息,根据配置文件struts-config.xml的配置信息把请求转发给适当的Action对象。
ActionServlet的工作流程:ActionServlet接收到用户的一个请求后,把请求发送到一个Action的实例,如果这个实例不存在则控制器会自动创建一个Action,然后调用Action中的execute()这个方法,execute()方法返回一个ActionForward对象,它封装了把用户请求在转发给其它web组件的信息。注:用户定义自己的Action类,即Action基类的子类时,必须覆盖execute()方法,应为在基类中execute()返回null。

ActionServlet通过struts-config.xml来决定把用户请求发送到那个Action中

Struts的工作流程:
Struts接收一个用户请求时的工作流程如下
1. 检索和用户匹配的ActionMapping实例,如果不存在则返回用户请求路径无效的信息
2. 如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单保存到这个对象里
3. 根据配置信息确定是否需要表单验证,如果需要,就调用ActionForm中的validate()
4. 如果ActionForm表单的返回值为null,或者返回一个不包含ActionMessage的ActionError对象,表示表单验证成功
5. ActionServlet根据ActionMapping的实例包含的映射信息将请求转发到Action,如果相应的Action实例不存在就创建这个实例,然后调用execute()
6. Action的execute()返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的jsp组件
7. ActionForward对象指向的jsp组件生成动态网页返回给用户
以上流程4如果ActionForm验证失败,则ActionServlet直接把请求转发给用户提交的jsp组件,此情况下不再创建Action对象,也不再有execute()

没有评论: