Struts框架(一)
struts框架流程
1.客户端向服务器发送请求。通过截取url中的字符串,到ActionMappping中查找相应的Action。通过读取配置文件,找到具体应该实例化的Action对象。
2.在配置文件中找到此Action对应的ActionForm实例。如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存在ActionFrom对象中。
3.根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。
4.如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
5.ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。
6.Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
7.ActionForward对象指向的JSP组件生成动态网页,返回给客户。
Struts框架组件:ActionServlet
1.ActionServlet类控制导航流。
2.ActionServlet根据URL来决定哪个Action类被用于处理请求,Action可以校验输入,并访问业务层一以便从数据库检索信息
3.Action需要知道页面提交了哪些内容,所以由ActionServlet根据请求URL来决定将请求参数绑定到哪个ActionForm中,并传入Action
4.Action在完成业务逻辑后,返回一个ActionForward对象,ActionServlet根据ActionForward对象中的路径来调用页面完成响应。
5.Struts将这些信息绑定在一个ActionMapping对象中,一个ActionMapping对应一个URL。当请求路径到达的时候,ActionServlet就会查询ActionMapping对象,ActionMapping对象将高速ActionServlet哪个Action类会被调用,哪个ActionFor类被用于传递页面数据以及哪些ActionForward将被用于转向。
6.dispatchAction避免每个Action创建一个类。添加parameter属性到Action的配置,通过他来确定到底调用的是哪个方法。如果parameter没有值,则调用unspecified方法。需注意parameter参数值不能是execute和perform
<action path="/saveSubscription" type="org.apache.struts.actions.DispatchAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="method"/>
通过界面层传过来的method的值,来确定调用哪个方法。如method="add",则调用add方法。
Struts涉及到的对象
- ActionForm:1)必须扩展自org.apache.struts.action.ActionForm.2)如果要获取表单的值,必须定义一个public属性。3)如果要求在将ActionForm传递到Action之前进行校验,必须实现validate方法。4)如果要在组装前初始化属性,必须实现reset方法。
<form-bean name="FormBean的名称" type="FormBean对应JavaBean类的全路径"/> <form-bean name="UserForm" type="com.amigo.struts.form.user.UserForm" />
UserForm类的实现为
public class UserForm extends ActionForm { private static final long serialVersionUID = 1L; /** 用户名.*/ private String userName; /** 密码. */ private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; }}
动态form-bean:1)不需要定义对应的javabean类,其元素都在struts-config.xml中定义。其type为:org.apache.struts.validator.DynaValidatorForm。2)动态ActionForm可以减少静态ActionForm的数量,使用动态ActionForm完全可以获得静态ActionForm所有的功能。3)动态ActionForm其实是把页面中的html元素的名字和值放到了map中,所以通过get方法可以取出相应的值4)动态ActionForm采用EL表达式的输出方式${dynabean.map.prop}, 4)动态ActionForm的验证,通常使用动态验证框架validator
下面的动态FormBean定义了userName和password属性,配置如下:
<form-bean name="UserForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="userName" type="java.lang.String"/> <form-property name="password" type="java.lang.String"/> </form-bean>
在Action中使用动态
ActionFormDynaActionForm daf = (DynaActionForm)form; String username = (String)daf.get("username"); String password= (String)daf.get("password");
- ActionMapping:
- ActionForward
Struts标签库的配置和使用。1)一些简单的使用语句 2)配置国际化支持
异常处理
Struts validator验证框架