现在的位置: 首页 > 综合 > 正文

Struts基本原理实现

2013年10月02日 ⁄ 综合 ⁄ 共 2100字 ⁄ 字号 评论关闭

struts是一个开源框架。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的选择。

         Struts流程:

         服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。

  以登录为例:第一次进login.jsp会先实例化Form、把默认值(String默认为空字符串,整形默认为0)赋给表单元素。

输入用户名密码提交表单、提交到action属性的login.action,通过ActionServlet读struts-config.xml文件找到 action下的path属性找到.action,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面.验证通过会实例化Action,执行Action的execute方法。

相应框架结构如图:Struts对Model,View和Controller都提供了对应的组件。

在上图中,ActionServlet,这个类是Struts的核心控制器,负责拦截来自用户的请求。

Action,这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。

 

Model部分

由JavaBean组成,ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionForm里面的请求参数处理用户的请求。

JavaBean则封装了底层的业务逻辑,包括数据库访问等。

View部分

该部分采用JSP实现。

Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。对应上图的JSP部分。

 

Struts配置文件:

这是将struts组件结合在一起的东东:struts-config.xml。默认值

\WEB-INF\struts-config.xml。配置文件可以定义:

a. 全局转发

b. ActionMapping类 帮助控制器将请求映射到操作

c. ActionFormbean 显示模块数据

d. JDBC数据源

 

ActionServlet类:

框架中的控制器组件是有org.apache.struts.action.ActionServlet类实现的,这个类是javax.servlet.http.HttpServlet类的扩展。

Strutscontroller基本功能是:

1. 截获用户的Http请求

2. 把这个请求映射到相应的Action类,如果这是此类收到的第一个请求,将初始化实例并缓存。

3. 创建或发现一个ActionFormbean实例(看配置文件是否定义),然后将请求过程移植到bean.

4. 调用Action实例的perform()方法并将ActioFormbean,Action Mapping对象,request和response对象传给它。

 

ActionMapping类:

将特定请求映射到特定Action的相关信息存储在ActionMapping中,ActionServelt将ActionMapping传送到Action类的perform()方法,Action将使用ActionMapping的findForward()方法,此方法返回一个指定名称的ActionForward,这样Action就完成了本地转发。若没有找到具体的ActionForward,就返回一个null.

 

Action类

Action类真正实现应用程序的事务逻辑,它们负责处理请求。在收到请求后,ActionServlet会:

为这个请求选择适当的Action

如果需要,创建Action的一个实例

调用Action的perform()方法

如果ActionServlet不能找到有效的映射,它会调用默认的Action类(在配置文件中定义)。如果找到了ActionServlet将适当的ActionMapping类转发给Action,这个Action使用ActionMapping找到本地转发,然后获得并设置ActionMapping属性。根据servlet的环境和被覆盖的perform()方法的签名,ActionServlet也会传送ServletRequest对象或HttpServletRequest对象。

 

简单了解Struts其实很简单,深刻理解MVC模式的含义,原始javaweb开发的流程,Struts主要的几个类,以及ActionServlet.Action,ActionMapping,ActionForward的简单职责即可。

抱歉!评论已关闭.