struts是应用在web层的一个MVC框架。主要包含actionServlet、Action、ActionForm、ActionForward、ActionMapping这几个组件和struts-config.xml配置文件。其运行流程如下图:
黄色的标志的是需要用户自己实现的类。
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方法)。