视频中struts的实践步骤的内容是用struts开发一个简单的登陆示例程序。再上一步搭建完开发环境后,接下来就是建立一个ActionForm,它实际上和JAVABEAN一样,只是所建立的这个FORM需要继承自ActionForm。因此这一步就是建立一个类名为LoginForm的ActionForm,里面有两个属性,分别对应用户名和密码,然后产生getter和setter方法。写完FORM以后,接下来比较重要的一件事就是在struts的配置文件中注册这个FORM。完成ActionForm的建立后需要开发Action了,也属于控制层,由ActionServlet调用,所以称做后端控制器。在这里需要建立一个类LoginAction,该类继承自Action,在类中需要重写execute方法。然后紧接着就是在struts的配置文件中注册该Action。最后就是写三个JSP页面,分别是login.jsp、login_success.jsp、login_failure.jsp。其中login.jsp中提供和以前一样的表单,只包含用户名和密码两个字段。比较重要的是配置文件和Action类的编写。代码片段如下:
代码一:
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginForm loginForm = (LoginForm) form;
if (loginForm.getUserName().equals("itcast")) {
return mapping.findForward("loginSuccess");
} else {
return mapping.findForward("loginFailure");
}
}
代码二:
<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.yxb.struts.LoginForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/login"
type="com.yxb.struts.LoginAction"
name="loginForm">
<forward name="loginSuccess" path="/login_success.jsp"></forward>
<forward name="loginFailure" path="/login_failure.jsp"></forward>
</action>
</action-mappings>
</struts-config>
代码一就是LoginAction类中重写的execute方法,首先是将通过参数传入的form向下转型,然后通过form对象的方法获取其中的数据,这段代码模拟验证过程,只是简单将输入的用户名与itcast对比,相同则取成功的页面,不等则取失败的页面。代码二就是配置文件,它们都位于<struts-config>根元素下,首先是通过<form-bean>元素配置ActionForm,需要配置的有name和type属性,其中name可以随便取,但是不能和<form-bean>的name属性重复,而type则是其完整的类名(包含包名的类名)。配置了<form-bean>以后就该配置action了,该元素在<action-mappings>元素里面配置。<action>元素里面的path属性是指明调用者能通过前端控制器(中心控制器)ActionServlet找到该Action,Type属性指明该Action类的全名,另外一个就是name属性,表示该Action引用的form(与<form-bean>中配置的名字对应)的名称。配置完action元素的属性后,很自然想到处理完请求后,Action需要进行跳转,将结果显示到相应的页面上。因此最后还需要配置<action>元素的子元素<forward>,里面的属性有name,表示跳转的名字,然后就是path属性,表示该name下的跳转的目的页面。这样就完成了以个简单的struts模拟登陆实例,直接部署就能完成相应的功能。和以前不使用框架时对比,就会发现有很多事是没有做的,比如那些页面页面端的数据是怎么传递进来的,如果要修改跳转页面只需要改配置文件。
通过实例对struts有了感性的认识后,下面来分析和体验一下struts程序的执行流程。上面的例子的执行过程如下:
1.首先是login.jsp页面将封装了用户名和密码参数的请求提交给服务器,请求路径是login.do。
2.请求到达服务器后,将会传递到前端控制器ActionServlet。
3.ActionServlet继续将请求传递到后端控制器Action,Action得到响应后将结果传回ActionServlet。
4.ActionServlet根据执行是否成功来选择合适的页面返回给客户端。
5.在第三步中,ActionServlet将相应的ActionForm传递给Action(根据<action>元素中的name属性查找相应的<form-bean>)。
6.在从ActionServlet跳转到Aciton以及回到ActionServlet并跳转到相应的页面都需要查找struts-config.xml这个配置文件,比如<action>元素中的path属性和<forward>子元素。
以上就是大概的流程,当然了现在还是比较初步的认识,后面将有详细的原理介绍。在上面的例子中,如果<action>元素代表FORM的name属性配置错误(例如和<form-bean>元素的name属性对应不上等),则在Action中对form的操作就会出现空指针异常的错误信息。如果在login.jsp页面中的表单中文本框name与ActionForm中的属性名字不一致,则在Action中form获取相应属性值时也将出现空指针异常的错误的信息。在这一小节的最后留下了三个问题(将在原理中详细解答):
1.谁来填充FORM?什么时候填充?根据什么来填充?
2.ActionServlet怎样把请求派发给Action?
3.Action运行完后怎么样跳转?
本文通过实例演示了如何使用Struts1.x开发一个简单的登录程序,涉及ActionForm、Action及配置文件的编写。Action中重写了execute方法,比较用户名与预设值判断登录成功或失败。配置文件包括ActionForm定义和Action映射,以及请求跳转到不同页面的设置。执行流程包括请求提交、前端和后端控制器交互、Action处理及结果返回。
385

被折叠的 条评论
为什么被折叠?



