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

我的第一个Struts(二)

2013年08月09日 ⁄ 综合 ⁄ 共 1624字 ⁄ 字号 评论关闭

前几天写了篇关于用户登陆的简单的struts例子,觉得有必要更进一步了解一下struts的工作流程,这里还是以上一个例子为例,说明一下服务器执行表单验证的流程。(嘿嘿,这个我也是刚知道的,有什么写错的地方还请多多指正),同时也希望对初学的朋友有一点点帮助。

服务器执行表单验证的流程

1:Servlet容器在web.xml文件中寻找<url-pattern>为 *.do的<servlet-mapping>元素

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
 </servlet-mapping>

2:Servlet容器根据<servlet-mapping>元素的<servlet-name>属性"action",在web.xml中寻找匹配的<servlet>

<servlet>

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

</servlet>

3:servlet容器把请求转发给<servlet>元素指定的ActionServlet,ActionServlet根据用户请求路径"/loginAction.do",在struts配置文件中检索path属性为"/loginAction" 的<action>元素

<action-mappings>
<action path="/loginAction" name="loginActionForm" type="test.LoginAction">
<forward name="succ" path="/index.jsp"></forward>
<forward name="fail" path="/login.jsp"></forward>
</action>
</action-mappings>

4:ActionServlet根据<action>元素的name属性,创建一个LoginActionForm对象,把提交的表单数据传给LoginActionForm.

此LoginActionForm作为参数传入LoginAction类中。

public class LoginAction extends Action {

public ActionForward execute(ActionMapping arg0, ActionForm arg1, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
LoginActionForm loginActionForm=(LoginActionForm)arg1;
String name=loginActionForm.getName();
String password=loginActionForm.getPassword();
if(name.equals(password))
return(arg0.findForward("succ"));
else
return(arg0.findForward("fail"));
}
}

这样,在LoginAction类中,就可以得到表单中的数据。在进行完业务逻辑的验证之后,根据不同的情况,返回不同的ActionForward对象。

在这里,当用户名等于密码时,转向"succ".这时ActionMapping.findforward()方法从<action>元素中寻找name属性为"succ"的<forward>子元素,然后返回与之对应的ActionForward对象,他代表的请求转发路径为"/index.jsp".

同样的道理,当验证失败时,转向"login.jsp",等待重新输入用户名密码。

END!

抱歉!评论已关闭.