Introduction to Struts 2
Pattern is the way you can architect your application
Framework provides foundation classes and libraries
Gets us strated quickly
leverage industry best practices
Give us pre-built classed from MVC that we use and extend
How it works
Handle input parameters; -------->Interceptors
Route using XML config -------->Structs XML
Business services / model need to be in place ------->Action Class callling business services
View and tag libraries -------->JSP
Setting Up
common-fileupload
javaassitant
commons-io(API)
ogni
struts2-core
freeemaker
xwork-core
Writing a Struts 2 Application
How do we let eclipse know to copy the related jar/library files to be in the web-inf/lib folder? windows->properties->development assemblely->java build path entries-->maven dependecies/or customized libraries.
1) struts XML similar with servlets; take the input URL to output ACTION classes and JSPs
2) Action Class
3) JSP
There are no doget() and dopose() methods for Struts which be part of servlet ; Default method of Action class is execute();
1 Structs.xml begins with <struts> and then followed with <package>; after that <action> tag possiblely with a child tag of <result name="success"> be mapped from within action class;
2 Create a action class with execute() overidden; same action class may need to show different JSPs
3 Create a jsp and map it to the action class within the struts.xml; JSP displayed depends on the return value/codes,. i.e. success or failure.
4 Then configure the web.xml by adding a <filter> <filter-name>struts<filter-calss>:org.apaceh.struts; <filter mapping><filter-name><url-pattern> .
5 URL by default should be ended with .action.
Understanding Namespaces
It could be configured from within the <package> tag in the struts.xml file by adding namespace proeperty.
for e.g., <package name="default" namespace="homework" extends="struts-default"
http://localhost:8080/webapp/getdone.action ------>http://localhost:8080/webapp/homework(actual namespace)/getdone.action
A Tag And A Business Service
Action class will call business service this time;
service should be just interfaces and will be called using implemented subclass
what happens behind the scene of a tag: to print the string from a action to the JSPs. in struts, the session will not be used which is useful for Servlet and JSPs and be replaced with a class level field of action class. Struts use the tag in the JSPs with <%@ taglib prefix="s" uri:/struts-tags"%> <s:property value="action class level field" /> in which way we do not have to worry about servlet scope, session and etc.. this is a good way to wire up the service class, actions and JSPs.
The ValueStack
how servlets and JSP works? each thread serves independent requst. as it is based, it could not contain a member variables given the thread safe perspective. instead, a req or session object is created for each thread request for data transfering.
how does struts work around it? new action objects/instances(instead of threads) which contain the meber variables are created for each requests.
So value stack is used to store the action instance.
PS: ease the way to do things; in a common/tranditional sense; there are a few tricks you need to refer to;
-------------------------------------------------------------------Ends@T07 and to be continued---------------------------------
............................ ,
of the execution() methods.