STRUTS חלק א’

‏ • 10 במרץ, 2005

מבוא:


STRUTS הוא מסגרת –FRAMEWORK – לפיתוח GUI בJSP הנפוץ ביותר במערכות לניהול מהלך מחזור פעילות משתמש באפליקציה של WEB כלומר בSESSION: כניסה LOGIN סדרת פעולות ויציאה. למעשה נחשב כסטנדרט דה פקטור בתעשייה.ה- JSF   של  SUN בא בעקבותיו ומשמש כמתחרה חדש יחסית בתחום.


 


כדי להקל על מתכנתי  גאווה  וליצר הפרדה ברורה בין ההצגה של דפים לבין הלוגיקה שממלאת ומקשרת לבסיס הנתונים נוצרה צורת תכנון  DESIGN PATTERN הנקראת   MVC:


MODEL VIEW CONTROL



  • MODEL – הלוגיקה – קוד גאווה   SERVLET מורחב מסוג Action

  • VIEW  – ההצגה בדפי JSP HTML עם ספריית TAGLIB    – נוח לתכנון וכתיבה ע”י מעצב HTML ללא קוד גאווה בתוכו.


  • CONTROL– הדבק בין שניהם-   ניתן  נתב קבוע ActionServlet  כחלק מהחבילה שמבצע את הקישור של הדפים JSP ללוגיקה Action ומשם חזרה לדפים. הנתב מבין את דף הגדרות WEB_INF/struts-config.xml ופועל על פיו.

 


בSTRUTS כל דף  מילוי טופס מקושר לאובייקט בזיכרון מסוג ActionForm  .


 


הנתב וגם תגי הJSP מבצעים עליו פונקציות get וset  – אובייקט הממש פעולות כאלו נקרא באופן כללי JavaBean  ובמקרה של STRUTS זה אובייקט זיכרון הנגזר מActionForm


 


 


 


הלוגיקה עצמה מורכבת מSERVLET הנגזר מאוביקט Action  כאשר מופעלת עליו רוטינה עיקרית כזו:


           


 


כאשר request  והresponse  הם כמו בJSP וASP ,  הform   זה אובייקט הזכרון ActionForm   של הטופס האחרון  ועל בקרת הניתוב לאיזה דף תלך בסיום הפעלה ע”י שימוש  ActionMapping ActionForward  נדבר בהמשך…


כאן יש לרוב  פניה כאן לבסיס נתונים לטעינה עדכון מחיקה והוספה של רשומה ישירות בתוך ה Action  ע”י פקודות SQL דרך JDBC  או למשל דרך אובייקט DAO  שהוא צורת תכנון נוספת DESIGN PATTERN:


 


DATA ACCESS OBJECT


מסגרת תכנון שמטרתה לקשר בין בסיס הנתונים לבין אובייקט הזיכרון  ActionForm. האובייקט המתווך  DAO מכיל את המיפוי בין שדות אובייקט הזיכרון לשמות השדות בבסיס הנתונים ולשאילתות  SQL ומטפל בטעינה שמירה עדכון ומחיקה של האובייקטים בבסיס הנתונים.


(אחד האובייקטים הנפוצים לסנכרון תוכן לבסיס הנתונים הדומה ל  DAO בעולם J2EE הוא HOME/EJB BMP/CMP – זה הרבה מחוץ לתחום מאמר זה ולכן קרא על כך באתר  java.sun.co/j2ee.  בעולם הג’אווה הרגיל מערכות HIBERNATE  JDO  וCASTORJDO הם דוגמאות למימוש אוטומטי למדי לסנכרון אובייקט זיכרון לבסיס נתונים.)


 


התקנת STRUTS על אפליקצית הWEB


כדי להתחיל לעבוד עם STRUTS יש צורך לבצע ארבעה פעולות



  • לטעון ספרייה JAR וTLD מwww.apache.org/struts  


  • ראשית להגדיר את הנתב

/WEB-INF/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-config.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>


      <init-param>


            <param-name>validate</param-name>


            <param-value>true</param-value>


      </init-param>


      <init-param>


            <param-name>application</param-name>


            <param-value>MyAppWeb</param-value>


      </init-param>


      <load-on-startup>2</load-on-startup>


</servlet>


<servlet-mapping>


            <servlet-name>action</servlet-name>


            <url-pattern>*.do</url-pattern>


</servlet-mapping>


במקרה שלנו כל דף תחת MyAppWeb    המסתיים ב.do  הוא מבוצע על ידי הנתב


 



  • שנית יש לשים תחת WEB_INF/lib את ספריות STRUTS struts.jar


  • שלישית תחת WEB-INF  לשים את הגדרת תגיות STRUTS TLD (ראה השמות בראש דף של ה(JSP

 


חלק א: VIEW


איך נראה דף JSP בSTRUTS


 


<%@ taglib uri=”/WEB-INF/struts-html.tld” prefix=”html” %>


<%@ taglib uri=”/WEB-INF/struts-bean.tld” prefix=”bean” %>


<%@ taglib uri=”/WEB-INF/struts-logic.tld” prefix=”logic” %>


<HTML><HEAD><TITLE>טופס בקשה</TITLE><HEAD>


<BODY>


<html:form name=”FormBean” type=”com.adi.app.form.FormBean”>


            <html:hidden property=”reqId”>


            <table dir=”rtl”>


<tr>


            <td>שם</td>


            <td>


<html:text property=”name” style=”width:100’/>


</td>


</tr>


<tr>


            <td>תפקיד</td>


            <td.>


<html:select property=”jobTitle”>


                        <html:options collection=”jobList”


property=”code” labelProperty=”description”/>


            </html:select>


            </td>


</tr>


<tr><td>בקשה</td>


<td>


<html:textarea property=”report” style=”width:100” cols=”80” rows=”5”/>


</td></tr>


 


</html:form>


</BODY></HTML>


 


כדי לתמוך בו  יש ליצר ראשית את שני מבני הנתונים בזיכרון כ JavaBeans


הראשון מייצג הנתונים לדף המילוי שמעל


package com.adi.app.forms


import org.apache.struts.action.ActionForm;


import java.io.Serializable; //to enable session saving at tomcat


class FormBean extends ActionForm implements Serializable {


            protected int _reqId;     //index in the data base


            protected String  _name;


            protected int _jobCode;


            protected String _report;


 


            public FormBean(){}   


            public String getName(){return _name;}


            public void setName(String name){


                        _name=name;


            }


            public int getJobTitle(){return _jobCode;}


            public void setJobTitle(int code){


                        _jobCode=code;


            }


…same for report and reqId


}


והשני  מייצג  את כניסת טבלת התפקידים


package com.adi.app.forms;


 


class Lookup{


private int _code;


private String _description;


Lookup(int code,String description){


            setCode(code);


            setDescription(description);


}


            public void setCode(int code){…}


            public int getCode(){..}


public void setDescription(String description){…}


            public String getDescription(){..}


}                     


           


במקביל יש לדאוג לשים על ה SESSION את הרשימה של jobList


למשל אחרי    LOGIN


ArrayList list=new ArrayList();


list.add(new Lookup(1,”מנהל”));


list.add(new Lookup(2,”מזכירה”));


….


request.getSession().setAttribute(“jobList”,list);


 


בחלק ב – נסביר את קונפיגורציה של הSTRUTS תהליך המיפוי וכיצד משתמשים בו בפעולה ACTION

תגיות: , ,

עדי לב

מנהל פורום HTPC ב HOMETHEATER הישראלימקים ומנהל אתר חלם www.chelem.org.il  הבלוג שלי ובשבילכם

תגובות בפייסבוק