struts1执行流程及环境搭建

          struts是应用在web层的一个MVC框架。主要包含actionServlet、Action、ActionForm、ActionForward、ActionMapping这几个组件和struts-config.xml配置文件。其运行流程如下图:

      struts1执行流程及环境搭建_第1张图片

           黄色的标志的是需要用户自己实现的类。

        actionServlet:是struts1的核心控制器。其主要功能是截取url,读取struts-config.xml的配置信息,把表单数据赋值给actionForm。

       action:完成业务逻辑,确定要跳转的页面(return mapping.findForward("要返回页面对应的name"))。

       actionForm:接收表单数据,并能够自动完成数据类型转换。

       actionMapping:根据截取的url映射到相应的action,并且将action和对应的form相关联。

       actionForward:封装转发路径

  

下面搭建一个简单登录的struts实例:

      1. 下载struts的jar包,http://struts.apache.org/

      2. 引入struts1运行必须的jar包,项目整个目录如下:

         

       3. web.xml中配置ActionServlet入口

 

<servlet>
  	<servlet-name>action</servlet-name>
  	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  	<init-param>
  		<param-name>config</param-name>
  		<param-value>/WEB-INF/struts-config.xml</param-value>
  	</init-param>
  	<init-param>
  		<param-name>debug</param-name>
  		<param-value>2</param-value>
  	</init-param>
  	<load-on-startup>2</load-on-startup>
  </servlet>


      4. struts1核心配置文件struts-config.xml
        在使用框架之前,没有action,只有servlet,每个servlet的实例是根据url到web.xml中进行匹配的。而现在web.xml中只有一个核心servlet,它控制,那程序怎么知道具体要使用哪个action呢?这就需要在配置文件中进行一一对应了。action标签中的path就是截取到的url,type就是对应的action全路径,name是这个action对应的form。

  <form-benas>中可以配置多个form,<action-mappings>中可以配置多个action

<struts-config>
    <form-beans>
 
       <form-bean name="logonForm" type="com.tgb.struts1.form.LogonActionForm"></form-bean>
    </form-beans>
    <action-mappings>
      <action path="/logon" type="com.tgb.struts1.LogonAction" name="logonForm" scope="request">
	    <forward name="success" path="/success.jsp"></forward>
	    <forward name="error" path="/error.jsp"></forward>
      </action>
    </action-mappings>
</struts-config>

        5. 定义Form

public class LogonActionForm extends ActionForm {
	private String userName;
	private String passWord;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	
}

       6. Action实现类

public class LogonAction extends Action {
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		LogonActionForm logonActionForm =(LogonActionForm)form;
		String userName =logonActionForm.getUserName();
		String passWord =logonActionForm.getPassWord();
		return mapping.findForward("success");
	}
}

       form必须继承ActionForm,action必须继承Action。logon.jsp页面中用户名和密码标签的name属性值必须和form类中set方法后的名字一致(首字母小写)。

     这样,一个struts1的运行环境就搭建好了。

     以上面的登录为例介绍一下struts1的执行流程:

     1. 项目启动后,根据web.xml的配置信息,初始化ActionServlet。

     2. ActionServlet初始化时读取struts-config.xml的信息。

     3. 客户端发送请求,ActionServlet截取url(截取到logon),根据读取的配置信息,找到logon对应的action的配置。

     4.通过action中的name属性得到对应的ActionForm,实例化form,将表单数据赋值给form,并调用form的validate方法进行验证。

     5.验证通过后,实例化相应的action,并执行action中指定的方法

     6. 根据action中方法的返回值,从配置信息中找到对应的转向信息(jsp页面或者是其他的action方法)。

你可能感兴趣的:(struts1执行流程及环境搭建)