Увядзенне
Apache Struts з'яўляецца адкрытым зыходным кодам выкарыстоўваецца для распрацоўкі JSP або сэрвлета аснове вэб-прыкладанні. Распоркі пашырыць сэрвлета Java API, і на аснове кантролера прадстаўлення мадэлі або MVC шаблон дызайну. Дзеянне класа ў рамках Struts вызначае бізнес-логіку. Клас дзеянняў апрацоўвае запыт кліента і падрыхтоўвае адказ. Ён таксама вырашае, дзе адказ павінен быць накіраваны. У асноўным клас дзеянняў атрымлівае дадзеныя ад узроўню прадстаўлення дадзеных і перадае дадзеныя ў адпаведны бізнес-пласт. Ён таксама апрацоўвае дадзеныя, якая зыходзіць ад бізнес-пласта і накіроўвае іх назад у пласт прадстаўлення. In short, клас дзеянне апісваецца як –
- Клас Дзеянне павінна распаўсюджвацца [код] apache.struts.action.Action [/код] клас.
- калі перавызначыць [код] выконваць [/код] спосаб згодна [код] дзеянне [/код] клас.
- Дзеянне Servlet выбірае клас дзеянняў для запыту якое ўваходзіць HTTP, пэўнай пры адлюстраванні дзеянні тэга ў [код] распоркі config.xml [/код] файл.
- Гэтыя класы выкарыстоўваюцца для выкліку класаў на ўзроўні бізнес-узроўні або доступу да дадзеных, каб атрымаць дадзеныя з фасолі і захоўваць апрацаваныя дадзеныя і вяртае вынік ці памылку ў залежнасці ад сітуацыі.
- Гэтыя класы Шматструменнае. Такім чынам, распрацоўшчык павінен быць асцярожным пры звароце з зменнай дзеянні, паколькі яны не з'яўляюцца струменева.
Тыпы класаў дзеянняў
Мы маем наступныя тыпы класаў дзеянняў у стойках –
- дзеянне – Базавы клас дзеянняў, у якіх мы рэалізуем нашу бізнес-логіку.
- уключыце Action – Аналагічна, як уключыць дырэктыву старонкі ў JSP.
- форвард Дзеянне – Выкарыстоўваецца ў выпадку, калі трэба накіраваць запыт ад аднаго да іншага JSP. Калі мы непасрэдна накіраваць запыт ад аднаго JSP ён парушае архітэктуру MVC. Такім чынам, клас дзеянне выкарыстоўваецца, каб зрабіць гэтую працу.
- адпраўка Дзеянне – Апрацоўка некалькіх аперацый у некалькіх метадаў. Лепш мець адзін метад на адну аперацыю замест аб'яднання ўсёй бізнес-логікі ў адным выканання метаду класа дзеянняў.
- Паглядзіце дыспетчарскі Дзеянне – Тое ж, што адпраўка дзеянні, але рэкамендуецца не выкарыстоўваць.
- перамыкач Дзеянне – выкарыстоўваецца для пераключэння паміж рознымі модулямі ва ўжыванні распорак.
Найбольш часта выкарыстоўваюцца класы дзеянняў з'яўляюцца –
- дзеянне
- адпраўка Дзеянне
групавы пазоў
Гэта клас дзеянні базы ў стойках. Пры гэтым распрацоўшчык павінен перавызначыць метад выканання ў адпаведнасці з -
[код]
package com.home.upload.action ;
імпартаваць java.io.IOException ;
імпартаваць java.util.HashMap ;
імпартаваць java.util.Map ;
імпартаваць javax.servlet.ServletException ;
імпартаваць javax.servlet.http.HttpServletRequest ;
імпартаваць javax.servlet.http.HttpServletResponse ;
імпартаваць org.apache.log4j.Logger ;
імпартаваць org.apache.struts.action.Action ;
імпартаваць org.apache.struts.action.ActionForm ;
імпартаваць org.apache.struts.action.ActionForward ;
імпартаваць org.apache.struts.action.ActionMapping ;
імпартаваць org.apache.struts.upload.FormFile ;
імпартаваць com.home.upload.action.forms.UploadForm ;
імпартаваць com.home.upload.service.FileUploadService ;
імпартаваць com.home.upload.service.impl.FileUploadServiceImpl ;
імпартаваць com.home.upload.util.UploadConstants ;
/**
* @author TechAlpine
*/
грамадскасць клас FileUploadAction пашыраецца дзеянне {
прыватны статычны лесаруб лесаруб = Logger.getLogger(FileUploadAction.клас);
грамадскасць ActionForward выканаць(ActionMapping адлюстраванне, ActionForm форма, HttpServletRequest запыт,
HttpServletResponse адказ) кідкі IOException, ServletException {
калі (форма != нулявы) {
Загрузіць Форма загрузкі формы = (UploadForm) форма;
FormFile file1 = uploadForm.getFilePath1 ();
FormFile file2 = uploadForm.getFilePath2 ();
FormFile file3 = uploadForm.getFilePath3 ();
карта< Радок, byte[] > fileMap = новае HashMap< Радок, byte[] > ();
fileMap.put(file1.getFileName(), file1.getFileData());
fileMap.put(file2.getFileName(), file2.getFileData());
fileMap.put(file3.getFileName(), file3.getFileData());
FileUploadService uploadService = новае FileUploadServiceImpl ();
калі (uploadService.doUpload (
getServlet().getServletContext().getRealPath(“/”).CONCAT( UploadConstants.UPLOAD_FOLDER), fileMap )
.памер() > 0) {
лесаруб.адладжваць( “загрузіць паспяховая” );
uploadForm.setUploadFlag(UploadConstants.UPLOAD_SUCCESS);
} яшчэ {
лесаруб.адладжваць( ” Не атрымалася загрузіць ” );
uploadForm.setUploadFlag(UploadConstants.UPLOAD_FAILURE);
}
}
return (mapping.findForward(UploadConstants.UPLOAD_SUCCESS));
}
}
[/код]
The [код] распоркі config.xml [/код] файл для гэтага класа дзеянне павінна быць у рамках -
[код]
<?XML версія = “1.0” кадаваньне = “ISO-8859-1” ?>
<!DOCTYPE распоркі-канфігурацыі PUBLIC ” -//Apache Software Foundation // DTD Struts Configuration 1.1 // EN” “HTTP://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd”>
<распоркі-канфігурацыі>
<формаў-бабы>
<імя формы боб = “LoginForm” тып = “com.home.upload.action.forms.LoginForm” />
<імя формы боб = “форма меню” тып = “com.home.upload.action.forms.MenuForm” />
<імя формы боб = “UploadForm” тып = “com.home.upload.action.forms.UploadForm” />
</формаў-бабы>
<Global-наперад />
<вострасюжэтныя адлюстравання>
<Шлях дзеянні = “/увайсці” тып = “com.home.upload.action.LoginAction” name = “LoginForm” ўваход = “/login.jsp” >
<наперад імя = “success” шлях = “/menu.jsp” />
<наперад імя = “недастатковасць” шлях = “/loginFailure.jsp” />
</action>
<Шлях дзеянні = “/menuAction” тып = “com.home.upload.action.MenuAction” name = “форма меню” ўваход = “/menu.jsp” параметр = “метад” >
<наперад імя = “загружаць” шлях = “/fileUpload.jsp” />
<наперад імя = “listfiles” шлях =“/listUploadedFiles.jsp” />
</action>
<Шлях дзеянні = “/uploadAction” тып = “com.home.upload.action.FileUploadAction” name =“UploadForm” ўваход =“/fileUpload.jsp” >
<наперад імя =“uploadSuccess” шлях =“/uploadSuccess.jsp” />
</action>
</вострасюжэтныя адлюстравання>
<Параметр Message-рэсурсы = “ApplicationResources” />
<убудова Classname = “org.apache.struts.validator.ValidatorPlugIn” >
<ўсталяваць ўласцівасць-ўласцівасць = “імёны шляхоў”
значэнне = “/WEB-INF / валідатар-rules.xml,/WEB-INF / validation.xml” />
</ўстаўны>
</распоркі-канфігурацыі>
[/код]
Як мы бачым, у прыведзеным вышэй прыкладзе, што калі клас пашырае базавы клас дзеянняў ён павінен перавызначыць [код] выконваць [/код] метад. Акрамя таго, канфігурацыйны файл распоркі мае толькі адзін прамы шлях, які адпавядае да [код] uploadAction [/код].
адпраўка Дзеянне
Клас дыспетчарская дзеянне таксама пашырае базавы клас дзеянні. Гэты клас мае перавагу перад класам дзеянні, што ён не мае яўна перавызначыць метад выканання, а распрацоўшчыкі могуць свабодна пісаць свае ўласныя метады. Гэта дазваляе распрацоўнікам выкарыстоўваць адны і тыя ж класы дзеянняў для некалькіх патокаў. Класічны прыклад выкарыстання класа дыспетчарская дзеянняў у выпадку апрацоўкі аперацый меню як пры -
[код]
package com.home.upload.action ;
імпартаваць java.io.File ;
імпартаваць java.io.IOException ;
імпартаваць java.util.List ;
імпартаваць javax.servlet.ServletException ;
імпартаваць javax.servlet.http.HttpServletRequest ;
імпартаваць javax.servlet.http.HttpServletResponse ;
імпартаваць org.apache.log4j.Logger ;
імпартаваць org.apache.struts.action.ActionForm ;
імпартаваць org.apache.struts.action.ActionForward ;
імпартаваць org.apache.struts.action.ActionMapping ;
імпартаваць org.apache.struts.actions.DispatchAction ;
імпартаваць com.home.upload.action.forms.MenuForm ;
імпартаваць com.home.upload.service.FileUploadService ;
імпартаваць com.home.upload.service.impl.FileUploadServiceImpl ;
імпартаваць com.home.upload.util.UploadConstants ;
/**
* @author TechAlpine
*/
грамадскасць клас MenuAction пашыраецца DispatchAction {
прыватны статычны лесаруб лесаруб = Logger.getLogger( MenuAction.клас );
грамадскасць ActionForward загрузкі( ActionMapping адлюстраванне, ActionForm форма, HttpServletRequest запыт,
HttpServletResponse адказ ) кідкі IOException, ServletException {
return ( mapping.findForward ( UploadConstants.ЗАГРУЗІЦЬ ) );
}
грамадскасць ActionForward listFiles( ActionMapping адлюстраванне, ActionForm форма, HttpServletRequest запыт,
HttpServletResponse адказ ) кідкі IOException, ServletException {
FileUploadService uploadService = новае FileUploadServiceImpl ();
Радок stagingLocation = getServlet().getServletContext().getRealPath( “/” ). CONCAT( UploadConstants.UPLOAD_FOLDER );
Меню Форма меню Форма = (форма меню) форма;
калі ((новае File( stagingLocation ) ).існуе() ) {
спіс<Радок> FileNames = uploadService.getFileNames( stagingLocation );
калі (fileNames.size() > 0 ) {
menuForm.setFiles( FileNames );
menuForm.setListFlag ( UploadConstants.ПРАЎДА );
} яшчэ {
menuForm.setListFlag ( UploadConstants.ХЛУСНЯ );
}
} яшчэ {
menuForm.setListFlag( UploadConstants.ХЛУСНЯ );
}
лесаруб.інфармацыя( ” вяртанне LIST “);
return (mapping.findForward(UploadConstants.LIST_UPLOADED_FILES));
}
}
[/код]
Як мы бачым, тут ёсць два спосабу, якія апрацаваць запыт ад карыстальніка. Гэтыя два метаду вызначаны ў [код] распоркі config.xml [/код] як па -
[код]
<Шлях дзеянні = “/menuAction” тып = “com.home.upload.action.MenuAction” name = “форма меню” ўваход = “/menu.jsp” параметр = “метад” >
<наперад імя = “загружаць” шлях = “/fileUpload.jsp” />
<наперад імя = “listfiles” шлях = “/listUploadedFiles.jsp” />
</action>
[/код]
два метаду – загружаць і listfiles маюць дзве асобныя запісы супраць класа дзеянняў – MenuAction. Кожны з гэтых метадаў мае свае асобныя шляху наперад, да якога яны перанакіроўваюць адказ.
Заключэнне
- Struts з'яўляецца адкрытым зыходным кодам выкарыстоўваецца ў Java на аснове вэб-прыкладанняў.
- Struts заснавана на кантролеры прадстаўлення мадэлі – MVC шаблон дызайну.
- Struts мае пяць розных класаў дзеянняў, з якіх найбольш часта выкарыстоўваюцца –
- дзеянне
- DispatchAction
- Клас дзеянняў з'яўляецца базавым класам, да якога ўсе класы дзеянняў павінны распаўсюджвацца на.
- Класы, якія пашыраюць клас дзеянняў варта перавызначыць метад Выканаць.
- Класы, якія пашыраюць клас дыспетчарская дзеянні маюць свае ўласныя дзеянні наперад метады.
- Класы, якія пашыраюць клас дыспетчарская дзеянняў можа мець некалькі дзеянняў наперад метадаў такім чынам, становіцца карысным у выпадку некалькіх дадатковых патокаў.