Staplerisalibrarythat"staples"yourapplicatioobjectstoURLs,makigiteasiertowritewebapplicatios.ThecoreideaofStapleristoautomaticallyassigURLsforyourobjects,creatigaituitiveURLhierarchy.
Normally,mostofyourJSPadservletgoeslikethis;first,youuseparametersadextrapathifotolocatetheobjecttoworkwith,theusesomemoreparametersadsuchtoperformsomeoperatiosagaistit(orperhapsrederHTML).Staplertakescareofthisfirstportiobydispatchigrequeststothatobjectyou'llbeworkigwith.
Supposeyouarebuildigawebapplicatiolikethesystemofjava.et,whereyougotprojects,mailiglists,documetsadfilessectio,adetc.ThefollowigfigureshowshowStaplerworks.
Thelefthalfshowsyourcode.OOPletsyoumodelthosecoceptsstraight-forwardlyitoclassesthatrefertoeachother.Throughreflectio,StaplerassigsURLstoyourapplicatioobjects.TherootofyourapplicatioobjectgetstherootURL /.Theobjectyoucaaccesswith root.getProject("stapler") wouldbeassigedtotheURL /project/stapler.Ithisway,yourobjectmodeldirectlytursitotheURLhierarchy,aspartiallyshowipurplearrows.
JSPsadservletsMostofthetimesJSPsareusedtoshowaobjectiyourapplicatio.StaplerallowsyoutoassociateJSPstoyourapplicatioclasses,asshowigreecirclesitheabovefigure.StaplerweavesthoseJSPsitotheURLhierarchy,adwhetheygetrequested,Staplersetsuptheevirometsuchthattheycaaccessthecorrespodigapplicatioobjectveryeasily,bythe"it"variable(like${it.ame}).
Similarly,ofteyouwattorusomeJavacodewheacertaiURLisrequested,asshowiredcirclesitheabovefigure.Forexample,whe /project/stapler/delete isrequested,you'dliketodeletetheprojectadredirecttheuserto /.WithStapler,thisisaseasyasdefiigamethodoyourapplicatioobjects.Staplerivokesthemethodotherightobject.
ProblemsThatStaplerSolvesServlet(adtechologieslikeJSP/JSFthatbuildsotopofit)caolybidrequestURLsitoyourstaticresources,JSPs,ad/orservletsiaverylimitedway.Youcaevetellthatfromthejava.etsystem.Forexample,theURLtoviewthearchiveofamailiglistis /servlets/SummarizeList?listName=aouce,theURLtosearchthearchiveif /servlets/SearchList?listName=aouce,adtheURLtomaageitis /servlets/MailigListEdit?list=aouce.
Thishassomeproblems.
RelativeURLsareuselessOrdiaryservlet/JSPprevetsyoufromusigtheURLhierarchytoorgaizeyourapplicatio.Ithejava.etsystem,ifyouwattogeeratealikfromthearchivetothesearchpage,youhavetoputthewholeURLicludigalltheparameters.You'llbewritigsomethiglike /servlets/SearchList?list=${listName}.Asyourapplicatiogetsmorecomplicated,theumberofparameterswillicrease,makigyourapplicatioharderadhardertomaitai.
StaplerallowsyoutouseURLslike list/aouce/summarize, list/aouce/search,ad list/aouce/edit.Thusalikfromthesummarypagetothesearchissimply search.
Alotofboiler-platecodeMostofthetimes,thefirstthigyourJSPsadservletseedtodoistolocatetheobjectthatyou'llbeworkigwith.Thisistedious.Eveworse,iteedstoberepeatedimayplaces.
Staplertakescareofthisforyou.WheyourJSPisivoked,youcaaccessthetargetobjectbythevariable"it".Orwheyouractiomethod(theequivaletoftheservlet)isivoked,itisivokedothetargetobject.Thiscutsdowalotofborigboiler-platecodeiyourapplicatio.
RecursiveStructureServletsca'thadlerecursivedirectorystructureverywell.Itheabovefigure,Ihaverecursive Folder classthathastwoJSPseach.TheolywaytomakethisworkiservletistoassiguiqueIDstoeachfolderaddefiethoseJSPsatthetop-level.TheactualURLswillbeverydifferetfromtheaturaltreestructure.
StaplermapsthisveryaturallytoURLs.








评论