SSH框架之Struts(1)——Struts的运行流程

来源:互联网 发布:pdf骑缝章软件 编辑:程序博客网 时间:2024/05/11 05:30


  

  对于采用Struts框架的Web应用,我们通过实例来介绍一下其基本流程.

一、实例

   Login.jsp,进行系统登录的页面
  
  
<form action="login.do" method="post">用户:<input type="text" name="username"><br>密码:<input type="password" name="password"></br><input type="submit" value="登录"></form>

   Web.xml,初始化的配置文件

  <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-config2.xml</param-value>    </init-param>    <init-param>      <param-name>debug</param-name>      <param-value>2</param-value>    </init-param>    <init-param>      <param-name>detail</param-name>      <param-value>2</param-value>    </init-param>    <load-on-startup>2</load-on-startup>  </servlet>  <!-- Standard Action Servlet Mapping -->  <servlet-mapping>    <servlet-name>action</servlet-name>    <url-pattern>*.do</url-pattern>  </servlet-mapping>  </web-app>


  Struts-config.xml,strurs的配置文件

<struts-config><form-beans><form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/></form-beans><action-mappings><action path="/login" type="com.bjpowernode.struts.LoginAction"name="loginForm"scope="request"><forward name="success" path="/login_success.jsp" /><forward name="error" path="/login_error.jsp"/></action></action-mappings></struts-config>



  LoginAction:

public class LoginAction extends Action {        @Override      public ActionForward execute(ActionMapping mapping, ActionForm form,              HttpServletRequest request, HttpServletResponse response)              throws Exception {           UserActionForm  userForm=(UserActionForm)form;           String userName=userForm.getName();           int password=userForm.getPassword();                     UserManage userManage=new UserManage();         User user=new User();            user.setName(userName);            user.setPassword(password);              try {               userManage.ValidateUser(user);               return mapping.findForward("success");            } catch (UserNotFoundException e) {               e.printStackTrace();               request.setAttribute("message", e.getMessage());            }catch(PasswordErrorException e){               e.printStackTrace();               request.setAttribute("message", e.getMessage());            }                return mapping.findForward("fail"); }  

  LoginActionForm:
 
public class UserActionForm extends ActionForm {      private String name;      private int password;      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public int getPassword() {          return password;      }      public void setPassword(int password) {          this.password = password;      }        } 


  UserManager

public class UserManage {             public void ValidateUser(User user) {        // 判断用户名密码是否正确        if (!"admin".equals(user.getName())) {            throw new UserNotFoundException("用户不存在!用户名为:" + user.getName());        } else if (user.getPassword() != 123456) {           throw new PasswordErrorException("密码错误");        }   }} 





二、执行流程


 A、初始化设置

  Struts1的核心ActionServlet是继承于Servlet的,它在Web.xml配置成自动启动;

 B、发送和接收请求

  (1)当客户端提交请求时,所有以.do结尾的请求被提交到ActionServlet这个中央分发器上。
  (2)根据客户端提交请求的方式Get/Post选择执行到ActionServelet的doGet()还是doPost方法

 C、处理和分发请求

  (3)不论执行doGet()/doPost()方法,都会执行到process()方法。这是ActionServlet的一个核心方法,在这个方法中,实现了截取请求路径(processPath),根据截取的请求路径到Struts.cofing.xml配置文件中找对应的ActionMapping(processMapping)
  (4)当ActionServlet匹配到用户请求的Action后,会将response请求的表单参数打包成一个ActionForm(调用processActionForm实现)对象,这个ActionFrom对象实质是一个JavaBean,里面包含了表单的数据信息。
  (5)这时候,系统会转入到具体的Action,并传递过来ActionForm对象,执行具体Action中的Execute()方法。
  (6)execute()执行结束,会生成一个ActionForward类型的对象并返回给ActionServlet,结合在Struts.cofing.xml配置文件中的处理结果项,从而进行转发或者重定向,最后将界面返还给用户!
  
  这里只是一个初步的了解和阐述,至于更详细的结合源码和流程图会在下篇博客中进行分析






0 0