struts1工作流程

首先,服务器接收到客户浏览器请求后,对请求进行过滤,若属于Struts的处理范围则自动提交给Struts控制器进行处理,否则按传统方式作出响应。

注:过滤标准依据web.xml中Servlet的配置信息:

<servlet>

<servlet-name>actionServlet</servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>actionServlet</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

以上信息配置了名为actionServlet的控制器Servlet,并说明凡是以.do(也可约定为其它)结尾的页面请求都由此Servlet来处理,实现此Servlet的类是org.apache.struts.action.ActionServlet.(Struts API中定义的组件类)

其次,控制器servlet开始工作,读取struts_config.xml中的配置信息

注:Struts_config.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>

<struts-config>

<form-beans>

<form-bean name="formBeanName" type=" package.ClassNameForm "/>

</form-beans>

<global-forwards>

<forward name="failed" path="/error.jsp"/>

<forward name="successed" path="/right.jsp"/>

</global-forwards>

<action-mappings>

<action path="/login" type ="classmate.LoginAction" name ="formBeanName" scope="request" input ="/login.jsp"/>

<action path="/regist" forward="/regist.jsp"/>

</action-mappings>

</struts-config>

1. 使用指定的JavaBean来自动接收来自客户提交的表单数据,声明该JavaBean的代码对应于struts_config.xml中的:

<form-beans>

<form-bean name="formBeanName" type="package.ClassNameForm"/>

</form-beans>

Name:该bean的名字

Type:实现该bean的类

为实现自动填充功能,该Bean(package.ClassNameForm类)必须是org.apache.struts.action.ActionForm类(即其子类)的对象。

2. Servlet控制器读取Http分发规则(即Http请求与处理此请求的类的对应关系)

<action-mappings>

<action path="/login" type ="package.LoginAction" name =" formBeanName " scope="request" input ="/login.jsp"/>

<action path="/regist" forward="/regist.jsp"/>

</action-mappings>

说明:

path:和本Action对应的请求页面的相对路径(不包括后.do)。

type:处理请求的Action Bean类(完整路径)。

name:用到的ActionForm Bean的名字(<form-bean>元素中声明的)

scope:ActionForm Bean的作用域(默认为session)。

input:表单验证出错时的处理页面。

forward:指定目标响应页面(与<forward>元素不同,只有当没有指定type属性时本属性才生效)。

另:还可以在<action>中配置<forward>元素,即此Action处理后反回的目标页面

以上代码使用<action-mapping>元素的子元素<action>来约定控制器(ActionSevlet对象)分发HTTP请求的规则:

1. 若页面URI是login.do,则使用formBeanName来自动接收来自客户请求表单中的数据(该formBeanName中属性要与用户提交表单中的属性名称对应该,否则将无法接收),并将该请求分给一个package.LoginAction类型的实例来处理。该实例起到事件监听器的作用,类型必须是org.apache.struts.action.Action的子类。

注:控制器(ActionServlet)对象与JavaBean的情形类似,第一次运行时会自动实例化一个对象。

2. 若页面URI是regist.do,则直接转向/regist.jsp页面作出响应。

3. Action对象的功能

Action对象接收到发送来的Http请求和由ActionServlet对象已填充过的表单对象,然后调用其execute()方法进行处理,此方法有四个参数:

ActionMapping mapping:映射到struts_config.xml中的相关配置信息。

ActionForm form:ActionServlet对象填充过的表单(ActionForm Bean)的一个引用,可以从对象中获取表单数据。

HttpServletRequest request:来自客户端的Http请求信息。

HttpServletResponse response:响应客户端的Http信息。

执行完成后,返回给控制器ActionServlet对象一个封装了目标页面的ActionForward对象,此时,mapping对象调用findForward()方法 到struts_config.xml中的查找<forward>元素中映射信息,<forward>元素的定义如下:

<global-forwards>

<forward name="name1" path="/page1.jsp"/>

<forward name="name2" path="/page2.jsp"/>

</global-forwards>

Execute方法中的findForward()方法中的参数对应forward元素中的name属性,找到后将导航到相应的页面。

注:<forward>可以在struts_config.xml中两个地方定义:一个是<global-forwards>元素中,此时在整个应用中都有关效,可理解为编程语言中的全局变量;另一个是<action>元素中,此时作用域为本Action。 findForward()方法查找顺序为<action>?<global_forwards>

6.Struts构架工作流程总结

ActionSerlvet接收客户Http请求,使用ActionForm Bean自动填充客户送来的表单数据到ActionForm Bean对象中?根据配置信息(struts_config.xml)将请求分发给相应的Action对象?Action对象调用execute()方法处理请求(根据JavaBean和ActionForm取得业务逻辑和表单数据),并反回ActionForward对象给ActionSerlvet对象?根据ActionForward对象的信息(目标页面),ActionServlet再次将Http请求导航到目标页面,并发送到客户端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值