Struts優缺點


跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟件,這是它的一大優點。使開發者能更深入的了解其內部實現機制。

Struts開放源碼框架的創建是為了使開發者在構建基于Java Servlet和JavaServer Pages(JSP)技術的Web應用時更加容易。Struts框架為開

放者提供了一個統一的標準框架,通過使用Struts作為基礎,開發者能夠更專注于應用程序的商業邏輯。Struts框架本身是使用Java Servlet

和JavaServer Pages技術的一種Model-View-Controller(MVC)實現.?
具體來講,Struts的優點有:

???? 1. 實現MVC模式,結構清晰,使開發者只關注業務邏輯的實現.

???? 2. 有豐富的tag可以用 ,Struts的標記庫(Taglib),如能靈活動用,則能大大提高開發效率。另外,就目前國內的JSP開發者而言,除了

使用JSP自帶的常用標記外,很少開發自己的標記,或許Struts是一個很好的起點。

???? 3. 頁面導航.頁面導航將是今后的一個發展方向,事實上,這樣做,使系統的脈絡更加清晰。通過一個配置文件,即可把握整個系統各部

分之間的聯系,這對于后期的維護有著莫大的好處。尤其是當另一批開發者接手這個項目時,這種優勢體現得更加明顯。

???? 4. 提供Exception處理機制 .

???? 5. 數據庫鏈接池管理

???? 6. 支持I18N

???? 缺點:?
???? 一、 轉到展示層時,需要配置forward,每一次轉到展示層,相信大多數都是直接轉到jsp,而涉及到轉向,需要配置forward,如果有十

個展示層的jsp,需要配置十次struts,而且還不包括有時候目錄、文件變更,需要重新修改forward,注意,每次修改配置之后,要求重新部

署整個項目,而tomcate這樣的服務器,還必須重新啟動服務器,如果業務變更復雜頻繁的系統,這樣的操作簡單不可想象。現在就是這樣,幾

十上百個人同時在線使用我們的系統,大家可以想象一下,我的煩惱有多大。

???? 二、 Struts 的Action必需是thread-safe方式,它僅僅允許一個實例去處理所有的請求。所以action用到的所有的資源都必需統一同步

,這個就引起了線程安全的問題。

???? 三、 測試不方便. Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴于Web容器,單元測試也很難實現。不過有一個Junit的

擴展工具Struts TestCase可以實現它的單元測試。

???? 四、 類型的轉換. Struts的FormBean把所有的數據都作為String類型,它可以使用工具Commons-Beanutils進行類型轉化。但它的轉化都

是在Class級別,而且轉化的類型是不可配置的。類型轉化時的錯誤信息返回給用戶也是非常困難的。

???? 五、 對Servlet的依賴性過強. Struts處理Action時必需要依賴ServletRequest 和ServletResponse,所有它擺脫不了Servlet容器。

???? 六、 前端表達式語言方面.Struts集成了JSTL,所以它主要使用JSTL的表達式語言來獲取數據。可是JSTL的表達式語言在Collection和索

引屬性方面處理顯得很弱。

???? 七、 對Action執行的控制困難. Struts創建一個Action,如果想控制它的執行順序將會非常困難。甚至你要重新去寫Servlet來實現你的

這個功能需求。

???? 八、 對Action 執行前和后的處理. Struts處理Action的時候是基于class的hierarchies,很難在action處理前和后進行操作。

???? 九、 對事件支持不夠. 在struts中,實際是一個表單Form對應一個Action類(或DispatchAction),換一句話說:在Struts中實際是一個

表單只能對應一個事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件。?
????
???? Struts重要的表單對象ActionForm是一種對象,它代表了一種應用,這個對象中至少包含幾個字段,這些字段是Jsp頁面表單中的input字

段,因為一個表單對應一個事件,所以,當我們需要將事件粒度細化到表單中這些字段時,也就是說,一個字段對應一個事件時,單純使用

Struts就不太可能,當然通過結合JavaScript也是可以轉彎實現的。

轉載于:https://www.cnblogs.com/baiduligang/p/4247301.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258684.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

由Google Protocol Buffer的小例子引起的g++編譯問題

問題 學習 Google Protocol Buffer 的使用和原理時&#xff0c;提供了一個小例子&#xff0c;講述了protobuf的使用方法。 假如已經有了如下文件&#xff1a; 其中writer.cpp如下&#xff1a;#include "lm.helloworld.pb.h" #include<iostream> #include<…

用python編寫表達式求值_用Python3實現表達式求值

Problem Description yizhen has no girlfriend due to his stupid brain that he even can’t solve a simple arithmetic roblem. Can you help him If you solve it and tell him the result, then he can find his lovers! So beautiful! Input The input一、題目描述請用 …

the first day

開博第一天&#xff0c;從此記錄我生活學習的點滴&#xff0c;加油轉載于:https://www.cnblogs.com/fkissx/p/3702132.html

驅動-問題解決

今天在網上買了一個二手的電腦&#xff0c;拿回來以后&#xff0c;發現有點問題&#xff0c;一個問題就是 1.usb插上U盤以后沒有反應 解決方法&#xff1a; 嘗試一、直接在網上下載了一個360驅動大師&#xff0c;更新了一下驅動&#xff0c;沒有解決 嘗試二、在網上下載了一個驅…

Swift 學習- 02 -- 基礎部分2

class NamedShape{ var numberOfSides: Int 0 var name: String init(name: String) { self.name name } func simpleDecription() -> String { return "A shape with \(numberOfSides) \(name) sides" } } // 除了儲存簡單的屬性之外,屬性可以有 getter 和 set…

R-CNN detection 運行問題及辦法

運行caffe官方提供的jupyter 的rcnn detection&#xff0c;總是出現各種問題。先將問題及方法匯集在此&#xff1a; 1. Selective Search 的安裝問題 按照官網&#xff0c;我下載了selective_search_ijcv_with_python&#xff0c;但是在我的linux matlab2017a上總是出現問題&…

python怎么用lambda和map函數_Python之lambda匿名函數及map和filter的用法

現有兩個元組((a),(b)),((c),(d))&#xff0c;請使用python中匿名函數生成列表[{a:c},{b:d}]t1 ((a), (c))t2 ((b), (d))print(list(map(lambda t: {t[0]: t[1]}, zip(t1, t2))))l lambda t1, t2: [{i: j} for i, j in zip(t1, t2)]print(l(t1, t2))map內置函數使用&#xf…

UVALive 5903 Piece it together(二分圖匹配)

給你一個n*m的矩陣&#xff0c;每個點為B或W或.。然后你有一種碎片。碎片可以旋轉&#xff0c;問可否用這種碎片精確覆蓋矩陣。N,M<500 WB 《碎片 W 題目一看&#xff0c;感覺是精確覆蓋&#xff08;最近被覆蓋洗腦了&#xff09;&#xff0c;但是仔細分析可以知道&#xf…

將undefault和null的數據轉換成bool類型的數據 使用!!

<script> var o{}; var anull; console.info(!!o.name); </script> 輸出false 此方法是將undefault和null的數據轉換成bool類型的數據. var model avalon.define({ $id: model, defaultvalue {},});<span ms-if"!!defaultvalue .cost" >測試</…

springcloud(五):熔斷監控Hystrix Dashboard和Turbine

Hystrix-dashboard是一款針對Hystrix進行實時監控的工具&#xff0c;通過Hystrix Dashboard我們可以在直觀地看到各Hystrix Command的請求響應時間, 請求成功率等數據。但是只使用Hystrix Dashboard的話, 你只能看到單個應用內的服務信息, 這明顯不夠. 我們需要一個工具能讓我們…

如何修改PKG_CONFIG_PATH環境變量

兩種情況&#xff0c;如果你只是想加上某庫的pkg&#xff0c;則選擇下面其一&#xff1a;export PKG_CONFIG_PATH/usr/lib/pkgconfig/ 或者 export PKG_CONFIG_LIBDIR/usr/lib/pkgconfig/ 如果你想覆蓋掉原來的pkg,選擇后者。因為&#xff1a;PKG_CONFIG_LIBDIR的優先級比 PKG_…

python跨包導入包_python引入跨模塊包

人生苦短&#xff0c;我學python。最近學習python&#xff0c;由于包的模塊分的比較多。所以要用到跨模塊引入 且調用中間的方法整體目錄結構如下。需求&#xff1a;在 API模塊 user.py 中 調用 plugin 模塊中 douyin_login 下的方法。貼一下最終解決方案&#xff1a;from plug…

jdk1.8版本已經不包含jdbc.odbc連接

連接access的時候發現報錯&#xff0c;無法加載jdbc.odbc類文件&#xff0c;到Java安裝目錄上jre/lib/rt.jar上找jdbcodbc類也沒有了。 找個jdk1.7安裝就ok啦。轉載于:https://www.cnblogs.com/dohn/p/3707254.html

位運算問題

位運算 位運算是把數字用二進制表示之后&#xff0c;對每一位上0或者1的運算。 理解位運算的第一步是理解二進制。二進制是指數字的每一位都是0或者1.比如十進制的2轉化為二進制之后就是10。在程序員的圈子里有一個流傳了很久的笑話&#xff0c;說世界上有10種人&#xff0c;一…

conda環境管理介紹

我們可以使用conda 來切換不同的環境&#xff0c;主要的用法如下&#xff1a; 1. 創建環境 # 指定python版本為2.7&#xff0c;注意至少需要指定python版本或者要安裝的包 # 后一種情況下&#xff0c;自動安裝最新python版本conda create -n env_name python2.7# 同時安裝必…

unable to execute dex: multiple dex files Cocos2dxAccelerometer

原文轉載&#xff1a;http://discuss.cocos2d-x.org/t/conversion-to-dalvik-format-failed-unable-to-execute-dex-multiple-dex-files-define-lorg-cocos2dx-lib-cocos2dxaccelerometer/6652/4 用cocos2dx2.2.3沒問題&#xff0c;用了3.1.1出現這個問題。確實夠蛋疼。還要有這…

PHP javascript 值互相引用(不用刷新頁面)

PHP javascript 值互相引用的問題 昨天通過EMAIL給一些公司投了簡歷&#xff0c;希望他們能給我一份工作&#xff0c;今天其中一家公司的人給我打電話&#xff0c;大意是要我做一點東西&#xff08;與AJAX有關&#xff09; 給他們看&#xff0c;我聽打電話的人問我的問題&#…

mysql自增_面試官:為什么 MySQL 的自增主鍵不單調也不連續?

為什么這么設計(Why’s THE Design)是一系列關于計算機領域中程序設計決策的文章&#xff0c;我們在這個系列的每一篇文章中都會提出一個具體的問題并從不同的角度討論這種設計的優缺點、對具體實現造成的影響。如果你有想要了解的問題&#xff0c;可以在文章下面留言。當我們在…

caffe 初學參考鏈接

最近在學習caffe&#xff0c;也搜集了一些資料&#xff0c;主要是一些網上公開的博客資源&#xff0c;現匯總一下&#xff0c;以便后面參考。 caffe 安裝 編譯py-faster-rcnn全過程caffe依賴庫安裝&#xff08;非root&#xff09;編譯py-faster-rcnn的問題匯總及解決方法 ca…

java timer 定時任務

監聽類1 package com.xx.model;2 3 import java.util.Calendar;4 import java.util.Date;5 import java.util.Timer;6 import javax.servlet.ServletContextEvent;7 import javax.servlet.ServletContextListener;8 import org.apache.commons.logging.Log;9 import org.apache…