`
yp307567950
  • 浏览: 104213 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts1

阅读更多

-------------------------------------------------------------------------------------------------------------------------------------

Struts简介:由apache提供的一个基于MVC的开源框架,与SUN公司无关,非J2EE规范。

-------------------------------------------------------------------------------------------------------------------------------------

使用目的:利用Struts可以构造我们整个软件系统的框架,可以将系统划分为三个核心的模块:

1.Model(模型层)

JavaBean:处理业务逻辑的--->业务逻辑层

                  处理数据访问逻辑的--->数据访问层

EJB:(SessionBean)

AtionForm:

2.View(示图层):Jsp;Html

3.Controller(控制层):

ActionServlet(控制器)

Actions(控制器)

RequestProcessor(请求处理器)

View和Controller属于表现层(Web层);

------------------------------------------------------------------------------------------------------------------------------------

Struts的优缺点:

有点:1.快速构建软件系统的框架结构,提高开发效率。

         2.可以提高系统的可重用性,扩展性和可维护性。

         3.比较适合于开发一些比较大型的项目。

缺点:1.Struts框架的运作机制相当复杂,不易理解。

         2.用户开发的程序和框架绑定在一起,脱离框架就无法正常运行。

-----------------------------------------------------------------------------------------------------------------------------------

Struts中控制层的分类:

1.ActionServlet:这个类由Struts框架提供,它专门负责接受所有客户端的请求(*.do),但是它本身不会去处理请求,而是将请求交给RequestProcessor全权处理。

2.RequestProcessor:这个类也是由Struts框架提供,它接受ActionServlet转发过来的请求(request)并进行处理,它会根据struts-config.xml中的配置文件去调用不同的Action去处理客户端不同的请求。

3.Action:这个类也是由Struts框架提供,我们用户只要定义一个类继承Action即可。Action(功能是控制和转发请求)类似于Servlet,作为控制器去调用模型层中的业务接口方法,根据不同的返回结果不同的视图去展示数据。

------------------------------------------------------------------------------------------------------------------------------------

Struts模型层中的ActionForm

ActionForm 也是由Struts框架提供,只要定义一个类继承它即可。

使用目的:1.用于封装表单的字段信息;2.验证提交表单中的字段信息;3.可以对表单中的字段信息重新赋值显示。

一个Action可以配置一个ActionForm,也可以不配置。一个ActionForm可以被多个Action使用。

------------------------------------------------------------------------------------------------------------------------------------

Struts的工作流程

1.容器在装载并实例化ActionServlet实例对象后,在初始化方法init()中先去解析struts-config.xml文件,将其中的每个元素封装成struts框架中对应的一个个类的对象。如:

<form-bean>---->ActionFormBean对象

<action>----->ActionMapping

<forward>---->ActionForward

那么这些对象存放进ModuleConfigImpl维护的若干个HashMap中。

formBeans:(name,ActionFormBean对象引用);

actionConfigs:(path,ActionMappings对象引用)

放置全局的ActionForward对象

forwards(name,ActionForward对象引用)

例如:actionConfigs("/basic/register",ActionMapping对象引用);

2.不管表单时get还是post方法提交,ActionServlet对象调用process(request,response)方法,在该方法中构造一个RequestProcessor类的对象,若后调用它的方法process(request,response);并将request和response传递给该方法,接下来由RequestProcessor对象全权处理请求。

3.RequestProcessor对象根据请求URL中的ServletPath,到HashMap中查找对应的ActionMapping对象,若没有找到则直接返回404.

4.若找到ActionMapping对象,根据属性name的值找到相应的ActionForm,如果没有配置formBean,跳转到8.

5.判断是否存在ActionForm对象,根据scope.getAttribute(属性名)(属性名的值就是attribute指定的值)来查找对应的ActionForm对象,若没有,构造一个新的ActionForm对象,然后放置在scope指定的范围中。

6.调用ActionForm对象的reset()方法进行属性的初始化,再将表单字段封装到该对象的属性中,该方法要用户自己实现。

7.若validate为true,执行ActionForm对象中的validate()方法,若为false,不执行。

8.判断Action对象是否存在,从Action缓存中去查找对应的Action对象(其实就是一个HashMap对象,属性type指定的值,action对象引用)。若没有构造一个新的Action对象放置到该集合中。

9.Action对象调用execute()方法,返回一个ActionForward对象到struts-config.xml中。RequestProcessor对象,根据其中的属性信息forward或者重定向到path指定的资源。

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics