struts1学习第一节-基本流程

 

刚接触到公司项目,我第一个看的文件时web.xml 因为他是整个web应用的配置文件.

<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>
  <load-on-startup>0</load-on-startup>
<servlet>

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

总的入口就是ActionServlet 学习到目前为止,基本的流程已经摸清楚了 大概,第一步,浏览器,发起一个请求,比如localhost:8080/struts1/login.jsp.里面只有简单的一个表单.内容如下:

<form action="<%=request.getContextPath() %>/login.do">
	用户名:<input type="text" name="username"><br>
	密码:<input type="password" name="password"><br>
	<input type="submit" value="submit" style="width: 86px; ">		
</form>

可以看到提交的时候发起的url会是localhost:8080/struts1/login.do?username=demo&password=demo(get请求)

tomcat收到http请求,将其交给struts1这个context容器.获取后缀是.do.将请求交给web.xml里面定义的ActionServlet.

ActionServlet会读取WEB-INF 目录下的struts-config.xml内容如下:

<struts-config>
    <form-beans>
        <form-bean name="loginForm" type="org.qiao.form.LoginForm"/>
     </form-beans>

    <action-mappings>
        <action path="/login" type="org.qiao.action.LoginAction"
                name="loginForm">
            <forward name="loginSuccess" path="/loginSuccess.jsp"></forward>
            <forward name="loginError" path="/loginError.jsp"></forward>
        </action>
     </action-mappings>
</struts-config>

接着.do之前是/login.正好对应path="/login"这个action.将请求交给action处理.这个action的类名就是org.qiao.action.LoginAction.同时action还有name属性,这就会找name=loginForm的其他元素,找到上面的<form-bean>元素.这个元素定义javabean.就是实体类,但要和表单元素一一对应,否则会null.

public class LoginForm extends ActionForm{
	private String username;
	private String password;
        geeter   and  setter  method
}

将url后带的数据填充到LoginForm类中,生成一个LoginForm对象.将它作为参数,和ActionMapping request response,一起进入org.qiao.action.LoginAction类中默认的execute method中

public class LoginAction extends Action{
	
	@Override
	public ActionForward execute(ActionMapping mapping,ActionForm form,
			HttpServletRequest request,HttpServletResponse response)
	throws Exception{
		LoginForm loginForm=(LoginForm)form;
		String un=loginForm.getUsername();
		String pw=loginForm.getPassword();
		if(un!=""&&pw!=""&&un.equals("123")&&pw.equals("123")){
			return mapping.findForward("loginSuccess");
		}else{
			return mapping.findForward("loginError");
		}
		
	}
}

将actionForm强转成自己的loginForm型,取出数据,做自己的逻辑判断. 最后要转发处理,显示结果,是成功还是失败,定义成功要转发到的页面,定义代号loginSuccess,失败loginError..代号在前面的action的配置文件中去获取,最终是转发到loginSuccess.jsp或者loginError.jsp页面.

整个历程中的字段对应关系就是这样.

无标题.png

流程图:

struts1流程图.png