Struts1的原理和实例讲解

来源:互联网 发布:git server windows 编辑:程序博客网 时间:2024/05/22 00:08

Action,ActionForm,ActionForward,这三个构成了Struts的核心。

     Struts最核心的控制器是ActionServlet,Servlet主要是拦截用户的请求,然后转发到Struts的控制器中。

     一、配置ActionServlet

           ActionServlet是一个标准的Servlet,是在web.xml中进行配置,用户拦截所有的http的请求。并且需要把Servlet设置成自启动,通过load-on-startup属性。属性中配置的值越小,优先级越高。

     在web.xml中配置servlet如下:

 <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>  
二、创建Struts1的配置文件struts-config.xml,如下:

<?xml version="1.0" encoding="UTF-8" ?>    <!DOCTYPE struts-config PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN""http://struts.apache.org/dtds/struts-config_1_3.dtd">    <struts-config>    <form-beans>        <form-bean name="user" type="form.User"></form-bean>    </form-beans>    <global-exceptions>    </global-exceptions>    <global-forwards>    </global-forwards>    <action-mappings>       <action name="user" path="/user" type="action.UserAction" parameter="operate">        <forward name="error"  path="/jsp/error.jsp"></forward>        <forward name="success" path="/jsp/success.jsp"></forward>    </action>  </action-mappings>  <message-resources parameter="MessageResources" />  </struts-config>

 配置详解:

        1.<form-beans>项用来定义所有用到的ActionForm类。           

例如:

<form-beans>

    <form-bean name="user" type="form.User"    />

</form-beans>

所有用到的ActionForm都可以在中间定义,name属性是ActionForm的类名,type属性定义这个ActionForm类所在的位置。

2.<global-forwards>项中的<forward>子项定义了JSP页面中<html:link>标签所要连接的页面或者类。

例如:

JSP页面中有<html:link forward="login">

struts-config.xml配置文件中

<global-forwards>

<forward name="login" path="/login.do">

<forward name="logout" path="/logout.do">

</global-forwards>

注:这里的name属性值要和<html:link>标签中的forward属性值相一致。

     path属性指定<action>项中定义的Action类的别名。

   ------如下

<action-mapping>由它定义ActionForm和Action类之间的关系。

<action path="/loninAction" 

       type="cn.login.LoginAction"

       name="loginForm"

      validate="true" //如果是true就需要在ActionForm也就是loginForm中进行表单验证,如果是false不需要进行验证

     input="/login.jsp">

如:path属性定义这里用到的LoginAction的别名。其中login.jsp中的<html:form action="/loginAction" focus="username">

的action属性要和这里的path的值是一样的。

type属性是Action类的全名。

validate属性,struts默认validate属性值为false,如果需要ActionForm对表单进行验证那么就需要将这个值设置为true。

input属性:表示当bean发生输入错误的时候(也就是在loginForm类中有错误返回时)必须要返回的页面。这里出现错误时必须要返回login.jsp。

parameter属性:直接指定需要跳转的页面,这是type属性必须设置为org.apache.struts.actions.ForwardAction,也不需要指定ActionForm进行数据的封装。不进行任何业务处理,只进行页面转发。

<action>里面定义了一个页面转向<forward name="success" path="/index.jsp">定义一个页面转向:

name属性:和LoginAction中的mapping.findForward(success);这个语句中的success和上面的name 的值是一样的。

<message-resources parameter="cn,login.MessageResources">项定义了资源文件的位置。它对应cn.login包下的MessageResources文件。

   三、a.创建action,只有execute方法,如下:

      
package action;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import org.apache.struts.action.Action;  import org.apache.struts.action.ActionForm;  import org.apache.struts.action.ActionForward;  import org.apache.struts.action.ActionMapping;  import form.User;  public class HelloAction extends Action {      @Override      public ActionForward execute(ActionMapping mapping, ActionForm form,              HttpServletRequest request, HttpServletResponse response)              throws Exception {          User user = (User) form;          if (user.getUserName().equals("zhangjie")                  && user.getPassword().equals("zhangjie")) {              return mapping.findForward("success");          } else {              // 返回ActionForward对象,指定用哪个页面或是Action处理结果              return mapping.findForward("error");          }      }  }  
b.继承DispatchAction实现根据方法名跳转不同的方法中,如下:

package action  import java.util.ArrayList;  import java.util.List;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import org.apache.struts.action.ActionForm;  import org.apache.struts.action.ActionForward;  import org.apache.struts.action.ActionMapping;  import org.apache.struts.actions.DispatchAction;  import form.User;  public class UserAction extends DispatchAction {        static List<User> userList = new ArrayList<User>();      static {          userList.add(new User("admin", "123456"));          userList.add(new User("123456", "123456"));          userList.add(new User("111111", "111111"));      }      public ActionForward login(ActionMapping mapping, ActionForm form,              HttpServletRequest request, HttpServletResponse response) {          User user = (User) form;          if (user.getUserName().equals("admin")                  && user.getPassword().equals("123456")) {              return mapping.findForward("success");          } else {              // 返回ActionForward对象,指定用哪个页面或是Action处理结果              return mapping.findForward("error");          }      }  }  
注:struts-config中的actionMapping中需要定义一个参数parameter在请求中传递方法名。

 四、实现JavaBean继承ActionForm如下:

package form;  import org.apache.struts.action.ActionForm;  public class User extends ActionForm {      private String userName;      private String password;      private String method;        public User() {        }      public User(String userName, String password) {          this.userName = userName;          this.password = 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;      }      public String getMethod() {          return method;      }      public void setMethod(String method) {          this.method = method;      }  }
如有不明者,请下载源码研究吐舌头吐舌头  链接:http://pan.baidu.com/s/1nv3fZrN 密码:wepc


原创粉丝点击