您的位置:首页 > 编程语言 > Java开发

传智播客 struts1.x 工作原理与流程

2009-10-23 23:04 363 查看
预习视频到现在,发现赖老师对struts的讲解越来越深入,虽然是原理性的东西,但是在例子的配合以及形象的比喻下,理解并不会觉得困难。接下来的一段视频就是总结struts的工作原理和开发流程。赖老师将struts的工作流程总结为八步,如下:
1.初始化,读取配置(初始化ModuleConfig对象):ActionServlet是struts框架的总控制器,同时它也是一个Servlet,需要在web.xml中配置成自动启动。这样在web应用程序部署到服务器上以后,ActionServlet将自动初始化,它的主要任务就是读取struts的配置文件(struts-config.xml)的配置信息,并且为不同的struts模块初始化相应的ModuleConfig对象(包括ActionConfig、ControlConfig、FormBeanConfig、ForwardConfig、MessageResourcesConfig)。
2.发送请求:有了服务器端的web应用程序,客户端就能发送请求,接收响应了。我普通请求一样,用户通过提交表单或者调用URL向web应用程序提交一个请求,请求的数据用HTTP协议上传给web服务器。
3.填充FORM:在填充FORM的过程中,需要实例化ActionForm、复位、填充数据、校验最后才是保存。当接收到的是后缀为.do的请求时,ActionServlet就需要从ActionConfig对象中找出对应该请求的Action子类,如果没有对应的Action子类,控制器直接将请求转发给JSP或者静态页面。如果有对应的Action并且这个Action配有一个相应的ActionForm,则ActionForm将被实例化并且用HTTP请求的数据填充其属性,然后保存在ServletContext中(默认是在session对象中,可以通过配置将其保存在request中),这样它们就可以被其他Action对象或者JSP调用了。
4.派发请求:将请求转到具体的Action处理,控制器根据配置信息ActionConfig将请求派发给具体的Action,并且将相应的ActionForm也传递给Action的execute方法。
5.处理业务:调用后台业务功能完成商务逻辑,这一步属于普通代码调用和struts并无关系。Action一般只包含一个execute方法,它负责执行相应的的业务逻辑,调用其它业务模块。处理完毕后返回一个ActionForward对象,控制器通过该ActionForward对象来进行转发工作。
6.返回响应:返回目标响应对象,Action根据业务处理的不同结果返回一个目标响应对象给总控制器,该目标响应对象对应一个具体的JSP页面或者另一个Action。在这里,响应目标只是一个关键字,它是配置文件中配置的。
7.查找响应:转换HTTP请求到目标响应对象,总控制器根据业务逻辑功能Action返回的目标响应对象(关键字),根据配置信息找到对应的资源对象,通常是一个具体的JSP页面。
8.响应用户:目标响应对象将结果展现给用户。一般的目标响应对象是一个JSP,所以也就是在服务器端执行完相应的目标JSP后,将结果通过HTTP协议返回给用户。
了解完以上的步骤,前面的三个问题就有了答案了,比如第一个问题:ActionServlet在接到请求的时候,去用户提交的数据中提取表单参数数据,然后放入对应的ActionForm的成员变量中。后面两个问题最后五步就能说明问题。下面继续在前面的例子的基础上增加功能并且模拟实现以下第五步中的的业务处理,这样就能算一个比较完善的struts应用。
步骤与前面一样,环境已经搭建好了。下一步是写Action需要用到的ActionForm,从struts的API文档中可以了解到其实它就是一个JavaBean,在相应的Action的execute方法被调用前会根据请求参数进行初始化,同时在初始化时还会对传进来的值进行校验。视频中需要写的Form先不考虑这些,只是体验一下struts的开发流程。
public class AddStudentForm extends ActionForm {
private String name;
private String major;
private float score;
private Date birth;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
}
写完Form,就应该在配置文件中注册该form-bean。然后就可以动手写Action了,这个AddStudentAction和前面的LoginAction类似,只是对获取的form对象改成相应的类型。然后比较重要的改变就是业务代码。在这里就需要调用数据访问层的代码了。实际上就是创建一个和以前一样的IStudentDAO接口,然后再创建一个具体的实现类StudentDAO来实现和数据库的访问,完成添加学生的功能。Action代码片段如下(execute方法中的一部分):
AddStudentForm addStu = (AddStudentForm)form;
IStudentDAO stuDAO = new StudentDAO();
boolean successful = false;
successful = stuDAO.addStudent(addStu);
if(successful)
return mapping.findForward("addSuccess");
else
return mapping.findForward("addFailure");
上面的代码第二行到第四行就是模拟调用模型层的代码。这个添加的任务实现和以前的登录实现除了在调用业务逻辑和实现数据访问上有差别外,其它都是类似的配置。下面就是新增的配置文件的内容:
<form-bean name="addStuForm" type="com.yxb.struts.AddStudentForm"></form-bean>
<action path="/addStu.do"
type="com.yxb.struts.AddStudentAction"
name="addStuForm">
<forward name="addSuccess" path="/add_success.jsp"></forward>
<forward name="addFailure" path="/add_failure.jsp"></forward>
</action>
熟悉了struts的基本内容以后,后面将继续深入分析struts的每个组件的功能以和struts的核心配置文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: