Kaixo! Softwarearen munduan, "legacy" edo ondare-kodea hitza entzuten dugunean, askotan sistema zahar eta konplexuetan pentsatzen dugu. Apache Struts familia bi belaunaldi desberdinetako esparru (framework) bat da, eta askotan nahasmena sortzen du. Garrantzitsua da ulertzea Struts1 eta Struts2 ez direla bertsio-jauzi soil bat, bi mundu erabat desberdin baizik.
Gida honetan, bi esparruen arteko talka teknologikoa aztertuko dugu eta, batez ere, Struts2-rekin modu moderno eta seguruan lan egiteko "eztizko aholkuak" partekatuko ditugu.
Arkitektura Talka: Zergatik Ez Dira Berdinak
Struts2 ez da Struts1-en bertsio hobetua; ia guztiz berridatzitako esparru bat da (jatorriz WebWork 2 izeneko proiektua zen). Hona hemen desberdintasun kritikoenak:
| Ezaugarria | Struts1 (Zaharkitua) | Struts2 (Heldua) |
| Arkitektura Nukleoa | Servlet API-aren menpekotasun handia. ActionServlet izeneko kontrolatzaile zentral bat du. | Filtroetan oinarritutako arkitektura (StrutsPrepareAndExecuteFilter). Askoz akoplamendu gutxiago du Servlet API-arekin. |
| Hari Segurtasuna | Action klaseak Singleton dira. Horrek esan nahi du EZ direla hari-seguruak (thread-safe). Garatzaileak kontu handiz ibili behar du aldibereko eskaerekin. | Action klaseen instantzia berri bat sortzen da eskaera bakoitzeko. Diseinuz hari-seguruak (thread-safe) dira. Hau da desberdintasun garrantzitsuena. |
| Action Klaseak | org.apache.struts.action.Action klase abstraktua hedatu behar dute. execute metodoak sinadura konplexua eta finkoa du. | POJO (Plain Old Java Object) sinpleak izan daitezke. Ez dute zertan ezer hedatu. Metodoek sinadura sinpleak izan ditzakete. |
| Datuen Kudeaketa | ActionForm izeneko klase bereziak erabiltzen ditu inprimakietako datuak jasotzeko. Askotan kodea bikoiztea dakar. | Action klasearen propietateak (getters/setters) zuzenean erabiltzen ditu. Datuak automatikoki mapatzen dira. Askoz garbiagoa. |
| Espresio Lengoaia | Batez ere JSTL eta bere EL mugatua erabiltzen du. | OGNL (Object-Graph Navigation Language) indartsu eta malgua erabiltzen du. |
| Malgutasuna | Eskaerak prozesatzeko ziklo nahiko zurruna du. | Interceptor-etan oinarritutako arkitektura du. Funtzionalitate transbertsala (segurtasuna, log-ak...) gehitzeko modu oso malgua. |
"Eztizko Aholkuak" Struts Munduan Bizirauteko
Desberdintasunak ikusita, hona hemen aholku praktiko batzuk:
1. Aholkua (KRITIKOA): Migratu Struts1-etik Ahalik eta Azkarren!
Oso argi esan behar da: Struts1 bizitzaren amaierara iritsi zen (End-of-Life) 2013an. Horrek esan nahi du ez duela eguneraketarik jasotzen, eta segurtasun-zulo ezagunak eta adabakirik gabeak dituela. Struts1 erabiltzen duen aplikazio bat mantentzea arrisku handia da.
Aholkua: Zure lehentasun absolutua Struts1-etik Spring Boot edo Jakarta EE bezalako esparru moderno batera migratzeko plan bat diseinatzea izan beharko litzateke. Hori ezinezkoa bada, gutxienez Struts2-ra migratu beharko zenuke.
2. Aholkua (Struts2): Gozatu POJO Action-en Sinpletasunaz
Struts1-etik bazatoz, ahaztu ActionForm-ez. Struts2-n zure Action klasea POJO sinple bat izan daiteke.
// Ez da ezer hedatu behar!
public class LoginAction {
private String username;
private String password;
// Getters eta Setters...
public String execute() {
if ("admin".equals(username) && "password123".equals(password)) {
return "SUCCESS";
}
return "ERROR";
}
}
Onura: Kode hau probatzea oso erraza da. Ez duzu Servlet edukiontzi baten beharrik. JUnit proba batean, LoginAction klasearen instantzia bat sortu, setUsername eta setPassword deitu, eta execute() metodoa exekutatu besterik ez duzu.
3. Aholkua (Struts2): Menperatu Interceptor Pilak (Stacks)
Struts2-ren boterea Interceptor-etan datza. defaultStack izeneko pila lehenetsia nahikoa da kasu askotan, baina zure pila pertsonalizatuak sortzeak kontrol handiagoa ematen dizu.
Adibidea: JSON API bat sortzen ari bazara, agian ez duzu fitxategiak igotzeko (fileUpload) interceptor-ra behar. Pila arinago bat sor dezakezu struts.xml-en, behar dituzun interceptor-ak bakarrik sartuz. Honek errendimendua hobetzen du.
4. Aholkua (Struts2): Eraiki API-ak Emaitza Motekin (Result Types)
Struts2 ez da soilik JSP orrietara birbidaltzeko. Emaitza mota desberdinak erabil ditzakezu, eta hori oso erabilgarria da aplikazioak modernizatzeko.
Adibidea: REST API sinple bat sortzeko, JSON Plugin-a erabil dezakezu. struts.xml-en, emaitza mota json gisa definitu:
<action name="getUser" class="com.nireapliazioa.UserAction">
<result type="json">
<param name="root">user</param>
</result>
</action>
Zure UserAction klaseak User objektu bat (user) izango luke propietate gisa, eta execute() metodoak SUCCESS itzultzean, Struts2-k automatikoki serializatuko luke objektu hori JSON formatura.
5. Aholkua (Struts2): Segurtasuna Lehenetsi, Beti
Aurreko artikuluetan aipatu dugu, baina ezin da nahikoa azpimarratu: Struts2-k historikoki segurtasun-arazo larriak izan ditu.
- Erabili beti azken bertsio egonkorra. Hau negoziaezina da.
- Egiaztatu segurtasun-buletinak maiz Apache Struts-en webgune ofizialean.
- Lehenetsi segurtasuna garapenean, aurreko artikuluan aipatutako aholkuak jarraituz (OGNL erabilera segurua, devMode produkzioan desgaitzea, etab.).
Amaiera: Iraganari Agur Esan eta Oraina Kudeatzen
Struts1 eta Struts2 funtsean bi esparru desberdin dira. Struts1 segurtasun-arrisku bat da, eta lehenbailehen ordezkatu beharreko teknologia zaharkitua.
Struts2, aldiz, ondo mantentzen bada (beti eguneratuta) eta praktika modernoekin erabiltzen bada, oraindik ere lehendik dauden aplikazioak kudeatzeko tresna sendoa izan daiteke. Gakoa bere interceptor-etan oinarritutako arkitektura ulertzea eta segurtasuna beste guztiaren gainetik lehenestea da.
'IT' 카테고리의 다른 글
| C#-ko 50 Termino Nagusiak (Euskara) (0) | 2025.10.03 |
|---|---|
| 🔒 Eremu Kritikoa eta Aldi Bereko Kontrolaren Oinarrizko Hitzak 200 (Euskara) (0) | 2025.10.02 |
| 🏛️ Struts2 Proiektu Klasikoak Modernizatzeko 5 Aholku (0) | 2025.09.30 |
| 🚀 Zure Spring Boot Aplikazioa Abiadura Argian Jartzeko 5 Aholku (0) | 2025.09.29 |
| 🍃 Zure Datu-basea Dieta Jarriz: RDBMS bat Arintzeko 5 Aholku (0) | 2025.09.29 |
댓글