介紹
Apache的Struts是一個用於開發JSP或基於servlet的Web應用程序的開源框架. Struts的擴展Java Servlet API的和基於模型視圖控制器或MVC設計模式上. 在Struts框架的Action類定義了業務邏輯. 一個Action類處理客戶端的請求,並準備響應. 這也決定了應答應該轉發. 基本上是一個動作類從表現層接收數據,並將數據轉發到相應的業務層. 同時它處理它來自業務層的數據,並轉發那些回表現層. In short, Action類被描述為 –
- Action類應該擴展 [碼] apache.struts.action.Action [/碼] 類.
- 應重寫 [碼] 執行 [/碼] 的方法 [碼] 行動 [/碼] 類.
- 操作servlet選擇在動作映射標記下定義傳入的HTTP請求中的Action類 [碼] 支柱config.xml中 [/碼] 文件.
- 這些類被用來在業務層或數據訪問層來調用的類來從豆中的數據,並存儲處理後的數據,並返回根據情況的結果或錯誤.
- 這些類是多線程. 因此,一個開發者在處理動作變量,因為它們不是線程安全的要小心.
動作類的類型
我們已經在struts以下類型的動作類 –
- 行動 – 我們在其中實現業務邏輯的基本動作類.
- 包括行動 – 類似包括JSP頁面指令.
- 正向動作 – 使用的情況下,我們需要向前從一個JSP到另一個請求. 如果我們直接從一個JSP請求轉發它違反了MVC架構. 因此,一個動作類是用來做這個工作.
- 派遣行動 – 處理在多個方法的多個操作. 最好是有,而不是在一個動作類的單個execute方法合併整個業務邏輯的每個操作的一種方法.
- 查找派遣行動 – 同派遣行動,但建議不要使用.
- 開關動作 – 使用Struts應用程序的不同模塊之間進行切換.
最常用的動作類 –
- 行動
- 派遣行動
Action類
這是在struts的基本操作類. 在這裡,開發者需要重寫execute方法為下 -
[碼]
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 ;
/**
* @作者 TechAlpine
*/
公眾 類 FileUploadAction 擴展 行動 {
私人 靜止 記錄儀 記錄儀 =記錄儀.getLogger(FileUploadAction.類);
公眾 執行的ActionForward(的ActionMapping映射, ActionForm的形式, HttpServletRequest的請求,
HttpServletResponse的響應) 投 IOException異常, ServletException異常 {
如果 (形式 != 零) {
上傳表單上傳表單= (UploadForm) 形式;
FormFile文件1 = uploadForm.getFilePath1 ();
FormFile文件2 = uploadForm.getFilePath2 ();
FormFile文件3 = uploadForm.getFilePath3 ();
地圖< 串, 字節[] > fileMap = 新 HashMap中< 串, 字節[] > ();
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));
}
}
[/碼]
“ [碼] 支柱config.xml中 [/碼] 文件為這個動作類應該是為下 -
[碼]
<?XML版本= “1.0” 編碼= “ISO-8859-1” ?>
<!DOCTYPE Struts的配置PUBLIC ” -//Apache軟件基金會// DTD的Struts配置1.1 // EN” “HTTP://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd”>
<Struts的配置>
<表單豆>
<表單bean名稱= “登錄表單” 類型= “com.home.upload.action.forms.LoginForm” />
<表單bean名稱= “菜單表” 類型= “com.home.upload.action.forms.MenuForm” />
<表單bean名稱= “UploadForm” 類型= “com.home.upload.action.forms.UploadForm” />
</表單豆>
<全球前鋒/>
<動作映射>
<操作路徑= “/登錄” 類型= “com.home.upload.action.LoginAction” name = “登錄表單” 輸入= “/login.jsp的” >
<轉發名= “success” PATH = “/menu.jsp” />
<轉發名= “失敗” PATH = “/loginFailure.jsp” />
</action>
<操作路徑= “/menuAction” 類型= “com.home.upload.action.MenuAction” name = “菜單表” 輸入= “/menu.jsp” 參數= “方法” >
<轉發名= “上載” PATH = “/fileUpload.jsp” />
<轉發名= “listfiles” PATH =“/listUploadedFiles.jsp” />
</action>
<操作路徑= “/uploadAction” 類型= “com.home.upload.action.FileUploadAction” name =“UploadForm” 輸入=“/fileUpload.jsp” >
<轉發名=“uploadSuccess” PATH =“/uploadSuccess.jsp” />
</action>
</動作映射>
<信息資源參數= “ApplicationResources” />
<插件的className = “org.apache.struts.validator.ValidatorPlugIn” >
<設置property屬性= “路徑名”
值= “/WEB-INF /驗證 - rules.xml中,/WEB-INF / validation.xml中” />
</插入>
</Struts的配置>
[/碼]
正如我們在上面的例子中看到,如果類擴展了基本的Action類應該重寫 [碼] 執行 [/碼] 方法. 也支柱配置文件僅具有一個對應於正向通路 [碼] uploadAction [/碼].
派遣行動
調度動作類也擴展了基本動作類. 這個類有一個優點,即它不具有明確覆蓋執行方法,而開發者可以自由地寫自己的方法action類. 它使開發人員使用多個流相同的動作類. 一個經典的例子使用調度動作類在處理菜單操作的情況下 -
[碼]
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 ;
/**
* @作者 TechAlpine
*/
公眾 類 MenuAction 擴展 DispatchAction的 {
私人 靜止 記錄儀 記錄儀 =記錄儀.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 );
菜單窗體菜單形式= (菜單表) 形式;
如果 ((新 文件( stagingLocation ) ).存在() ) {
名單<串> 文件名= uploadService.getFileNames( stagingLocation );
如果 (fileNames.size() > 0 ) {
menuForm.setFiles( 文件名 );
menuForm.setListFlag ( UploadConstants.真正 );
} 其他 {
menuForm.setListFlag ( UploadConstants.假 );
}
} 其他 {
menuForm.setListFlag( UploadConstants.假 );
}
記錄儀.信息( ” 返回列表 “);
return (mapping.findForward(UploadConstants.LIST_UPLOADED_FILES));
}
}
[/碼]
我們在這裡看到有兩種方法從用戶處理請求. 這兩種方法都在所定義 [碼] 支柱config.xml中 [/碼] 為下 -
[碼]
<操作路徑= “/menuAction” 類型= “com.home.upload.action.MenuAction” name = “菜單表” 輸入= “/menu.jsp” 參數= “方法” >
<轉發名= “上載” PATH = “/fileUpload.jsp” />
<轉發名= “listfiles” PATH = “/listUploadedFiles.jsp” />
</action>
[/碼]
這兩種方法 – 上傳和listfiles有對動作類兩個單獨的條目 – MenuAction. 每一種方法都有它們將重定向到響應分開前進路徑.
結論
- Struts是基於Java的Web應用程序使用的開源框架.
- Struts是基於模型視圖控制器 – MVC設計模式.
- Struts有五種不同的動作類,其中最常用的是 –
- 行動
- DispatchAction的
- Action類是基類,所有的動作類應該擴展到.
- 擴展Action類的類應該重寫execute方法.
- 擴展調度動作類類有自己的行動方式前進.
- 擴展調度動作類類可以有因此成為有用的多個可選流的情況下,多個動作轉發方法.