More About Model-View-Controller Architecture : What Is MVC?
More About Model-View-Controller Architecture : What Is MVC?
MVC decouples interface from business logic and data. Model : The model contains the core of the application's functionality. The model encapsulates the state of the application. Sometimes the only functionality it contains is state. It knows nothing about the view or controller.
View: The view provides the presentation of the model. It is the look of the application. The view can access the model getters, but it has no knowledge of the setters. In addition, it knows nothing about the controller. The view should be notified when changes to the model occur.
Controller:The controller reacts to the user input. It creates and sets the model.
5.What are the core classes of the Struts Framework? Struts is a set of cooperating classes, servlets, and JSP tags that make up a reusable MVC 2 design. JavaBeans components for managing application state and behavior. Event-driven development (via listeners as in traditional GUI development). Pages that represent MVC-style views; pages reference view roots via the JSF component tree.
6.What is ActionServlet? ActionServlet is a simple servlet which is the backbone of all Struts applications. It is the main Controller component that handles client requests and determines which Action will process each
received request. It serves as an Action factory creating specific Action classes based on users request. 7.What is role of ActionServlet? ActionServlet performs the role of Controller: Process user requests Determine what the user is trying to achieve according to the request Pull data from the model (if necessary) to be given to the appropriate view, Select the proper view to respond to the user Delegates most of this grunt work to Action classes Is responsible for initialization and clean-up of resources
8.What is the ActionForm? ActionForm is javabean which represents the form inputs containing the request parameters from the View referencing the Action bean. 9.What are the important methods of ActionForm? The important methods of ActionForm are : validate() & reset(). 10.Describe validate() and reset() methods ? validate() : Used to validate properties after they have been populated; Called before FormBean is handed to Action. Returns a collection of ActionError as ActionErrors. Following is the method signature for the validate() method.
reset(): reset() method is called by Struts Framework with each request that uses the defined ActionForm. The purpose of this method is to reset all of the ActionForm's data members prior to the new request values being set.
<action-mappings> <action path="/submit" type="submit.SubmitAction" name="submitForm" input="/submit.jsp" scope="request" validate="true"> <forward name="success" path="/success.jsp"/> <forward name="failure" path="/error.jsp"/> </action> </action-mappings>
13.What is role of Action Class? An Action Class performs a role of an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request. 14.In which method of Action class the business logic is executed ? In the execute() method of Action class the business logic is executed.
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception ;
Perform the processing required to deal with this request Update the server-side objects (Scope variables) that will be used to create the next page of the user interface Return an appropriate ActionForward object
15.What design patterns are used in Struts? Struts is based on model 2 MVC (Model-View-Controller) architecture. Struts controller uses the command design pattern and the action classes use the adapter design pattern. Theprocess() method of the RequestProcessor uses the template method design pattern. Struts also implement the following J2EE design patterns. Service to Worker Dispatcher View
Composite View (Struts Tiles) Front Controller View Helper Synchronizer Token
16.Can we have more than one struts-config.xml file for a single Struts application? Yes, we can have more than one struts-config.xml for a single Struts application. They can be configured as follows:
<servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-config.xml, /WEB-INF/struts-admin.xml, /WEB-INF/struts-config-forms.xml </param-value> </init-param> ..... <servlet>
17.What is the directory structure of Struts application? The directory structure of Struts application :
18.What is the difference between session scope and request scope when saving formbean ? when the scope is request,the values of formbean would be available for the current request. when the scope is session,the values of formbean would be available throughout the session.
19.What are the important tags of struts-config.xml ? The five important sections are:
20.What are the different kinds of actions in Struts? The different kinds of actions in Struts are: ForwardAction IncludeAction DispatchAction LookupDispatchAction SwitchAction
21.What is DispatchAction? The DispatchAction class is used to group related actions into one class. Using this class, you can have a method for each logical action compared than a single execute method. The DispatchAction dispatches to one of the logical actions represented by the methods. It picks a method to invoke based on an incoming request parameter. The value of the incoming parameter is the name of the method that the DispatchAction will invoke. 22.How to use DispatchAction? To use the DispatchAction, follow these steps : Create a class that extends DispatchAction (instead of Action) In a new class, add a method for every function you need to perform on the service The method has the same signature as theexecute() method of an Action class. Do not override execute() method Because DispatchAction class itself provides execute() method. Add an entry to struts-config.xml
DispatchAction Example
23.What is the use of ForwardAction? The ForwardAction class is useful when youre trying to integrate Struts into an existing application that uses Servlets to perform business logic functions. You can use this class to take advantage of the Struts controller and its functionality, without having to rewrite the existing Servlets. Use ForwardAction to forward a request to another resource in your application, such as a Servlet that already does business logic processing or even another JSP page. By using this predefined action, you dont have to write your own Action class. You just have to set up the struts-config file properly to use ForwardAction. 24.What is IncludeAction? The IncludeAction class is useful when you want to integrate Struts into an application that uses Servlets. Use the IncludeAction class to include another resource in the response to the request being processed. 25.What is the difference between ForwardAction and IncludeAction? The difference is that you need to use the IncludeAction only if the action is going to be included by another action or jsp. UseForwardAction to forward a request to another resource in your application, such as a Servlet that already does business logic processing or even another JSP page. 26.What is LookupDispatchAction? The LookupDispatchAction is a subclass of DispatchAction. It does a reverse lookup on the resource bundle to get the key and then gets the method whose name is associated with the key into the Resource Bundle. 27.What is the use of LookupDispatchAction? LookupDispatchAction is useful if the method name in the Action is not driven by its name in the front end, but by the Locale independent key into the resource bundle. Since the key is always the same, the LookupDispatchAction shields your application from the side effects of I18N.
28.What is difference between LookupDispatchAction and DispatchAction? The difference between LookupDispatchAction and DispatchAction is that the actual method that gets called in LookupDispatchAction is based on a lookup of a key value instead of specifying the method name directly. 29.What is SwitchAction? The SwitchAction class provides a means to switch from a resource in one module to another resource in a different module. SwitchAction is useful only if you have multiple modules in your Struts application. The SwitchAction class can be used as is, without extending. 30.What if <action> element has <forward> declaration with same name as global forward? In this case the global forward is not used. Instead the <action> elements <forward> takes precendence. 31.What is DynaActionForm? A specialized subclass of ActionForm that allows the creation of form beans with dynamic sets of properties (configured in configuration file), without requiring the developer to create a Java class for each type of form bean. 32.What are the steps need to use DynaActionForm? Using a DynaActionForm instead of a custom subclass of ActionForm is relatively straightforward. You need to make changes in two places: In struts-config.xml: change your <form-bean> to be an org.apache.struts.action.DynaActionForm instead of some subclass of ActionForm
<form-bean name="loginForm"type="org.apache.struts.action.DynaActionForm" > <form-property name="userName" type="java.lang.String"/> <form-property name="password" type="java.lang.String" /> </form-bean>
In your o o o
Action subclass that uses your form bean: import org.apache.struts.action.DynaActionForm downcast the ActionForm parameter in execute() to a DynaActionForm access the form fields with get(field) rather than getField()
import org.apache.struts.action.DynaActionForm; public class DynaActionFormExample extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { DynaActionForm loginForm = (DynaActionForm) form; ActionMessages errors = new ActionMessages(); if (((String) loginForm.get("userName")).equals("")) { errors.add("userName", new ActionMessage( "error.userName.required")); } if (((String) loginForm.get("password")).equals("")) { errors.add("password", new ActionMessage( "error.password.required")); } ...........
33.How to display validation errors on jsp page?
<html:errors/> tag displays all the errors. <html:errors/> iterates over ActionErrors request
attribute. 34.What are the various Struts tag libraries? The various Struts tag libraries are: HTML Tags Bean Tags Logic Tags Template Tags Nested Tags Tiles Tags
<table border=1> <logic:iterate id="customer" name="customers"> <tr> <td><bean:write name="customer" property="firstName"/></td> <td><bean:write name="customer" property="lastName"/></td> <td><bean:write name="customer" property="address"/></td> </tr> </logic:iterate> </table>
36.What are differences between <bean:message> and <bean:write> <bean:message>: is used to retrive keyed values from resource bundle. It also supports the ability to include parameters that can be substituted for defined placeholders in the retrieved string.
<bean:message key="prompt.customer.firstname"/>
<bean:write>: is used to retrieve and print the value of the bean property. <bean:write> has no body.
<message-resources parameter="com.login.struts.ApplicationResources"/>
40.What is the life cycle of ActionForm? The lifecycle of ActionForm invoked by the RequestProcessor is as follows: Retrieve or Create Form Bean associated with Action "Store" FormBean in appropriate scope (request or session) Reset the properties of the FormBean Populate the properties of the FormBean Validate the properties of the FormBean Pass FormBean to Action
Threading Model
Struts 1 Actions are singletons and must be thread-safe since there will only be one instance of a class to handle all requests for that Action. The singleton strategy places restrictions on what can be done with Struts 1 Actions and requires extra care to develop. Action resources must be thread-safe or synchronized. Struts 1 Actions have dependencies on the servlet API since the HttpServletRequest and HttpServletResponse is passed to the execute method when an Action is invoked.
Servlet Dependency
Struts 2 Actions are not coupled to a container. Most often the servlet contexts are represented as simple Maps, allowing Actions to be tested in isolation. Struts 2 Actions can still access the original request and response, if required. However, other architectural elements reduce or eliminate the need to access the HttpServetRequest or HttpServletResponse directly. Struts 2 Actions can be tested by instantiating the Action, setting properties, and invoking methods. Dependency Injection support also makes testing simpler. Struts 2 uses Action properties as input properties, eliminating the need for a second input object. Input properties may be rich object types which may have their own properties. The Action properties can be accessed from the web page via the taglibs. Struts 2 also supports the ActionForm pattern, as well as POJO form objects and POJO Actions. Rich object types, including business or domain objects, can be used as
Testability
A major hurdle to testing Struts 1 Actions is that the execute method exposes the Servlet API. A third-party extension, Struts TestCase, offers a set of mock object for Struts 1. Struts 1 uses an ActionForm object to capture input. Like Actions, all ActionForms must extend a base class. Since other JavaBeans cannot be used as ActionForms, developers often create redundant classes to capture input. DynaBeans can used as an alternative to creating conventional ActionForm classes, but, here too, developers may be redescribing
Harvesting Input
existing JavaBeans.
input/output objects. The ModelDriven feature simplifies taglb references to POJO input objects. Struts 2 can use JSTL, but the framework also supports a more powerful and flexible expression language called "Object Graph Notation Language" (OGNL). Struts 2 uses a "ValueStack" technology so that the taglibs can access values without coupling your view to the object type it is rendering. The ValueStack strategy allows reuse of views across a range of types which may have the same property name but different property types. Struts 2 uses OGNL for type conversion. The framework includes converters for basic and common object types and primitives.
Expression Language
Struts 1 integrates with JSTL, so it uses the JSTL EL. The EL has basic object graph traversal, but relatively weak collection and indexed property support. Struts 1 uses the standard JSP mechanism for binding objects into the page context for access.
Type Conversion
Struts 1 ActionForm properties are usually all Strings. Struts 1 uses Commons-Beanutils for type conversion. Converters are per-class, and not configurable per instance. Struts 1 supports manual validation via a validate method on the ActionForm, or through an extension to the Commons Validator. Classes can have different validation contexts for the same class, but cannot chain to validations on sub-objects. Struts 1 supports separate Request Processors (lifecycles) for each module, but all the Actions in the module must share the same lifecycle.
Validation
Struts 2 supports manual validation via the validate method and the XWork Validation framework. The Xwork Validation Framework supports chaining validation into subproperties using the validations defined for the properties class type and the validation context. Struts 2 supports creating different lifecycles on a per Action basis via Interceptor Stacks. Custom stacks can be created and used with different Actions, as needed.
Q What is web work ? Ans. Web work is open source web development framework struts 2 use this framework.
Q. What is Struts 2 ? Ans. Struts 2 is open source java base web development framework . Q . Difference between Struts1.2 and struts 2 ? Ans. # 1. 2. 3. 4. Struts 1.2 Follow MVC Architecture/ Model Has Action and FormBean classes Has Action for execute method andFormBean for data Action class is singleton and thread- Action has instance per request so do not need to be safe and has only one instanceFormBean has instance per request 5. 6. Single validation.xml file created for all FormBean validation. Programmatic validation is done by overriding FormBean.validate() method 8. 9. 11. Configuration file isStruts-config.xml Frond controller is ActionServlet Container dependent Configuration file is struts.xml Front controller is interceptors Container independent Separate actionname-validation.xml files are created for each action Programmatic validation is done by overriding Action.validate() method thread-safe Struts 2.0 Follow MVC Architecture/ Model Has only Action class Data and execute() are defined in Action class
Q. Who populate the data from jsp to action in struts 2 ? Ans. Interceptor are populate the data from jsp to action class in struts2. Q. Who dose validation in struts 2.0 ? Ans. Struts 2.0 provide the validation framework handle the validation in struts 2.0. Q. What is validation framework ? Ans. Validation framework is provide by struts 2 done the input validation .
Q. Which design pattern follow by struts 2.0? Ans. Struts 2 use the Action Class as a Model and Action class follow by commend design pattern so struts 2 follow command design pattern its also use Interceptor that are use front control design pattern . Q. What are the different result types in struts 2.0 ? Ans. Struts 2 follow many result types
Chain Dispatcher
Redirect Redirect Action Tiles Stream Plain Text Json By Default its result type is Dispatcher . Q. What is difference between Redirect and Redirect Action result type in struts 2 ? Ans. Main difference between redirect and redirect action is redirect use when we send redirect our control one url to another url we use redirect. And when we redirect our control one action to another action at this time we are use redirectaction result type. Q. What is Action Context in struts 2 ? Ans. Action Context is memory area where struts 2 tags are read and write the objects. It content value-Stack and Ognl . Q. What is Value-Stack in struts 2.0 ? Ans. Value Stack is the default memory area where struts2 tags are read and write the object (data ) with the help of OGNL(object graph Navigation language) . Q. What is OGNL ? Ans. OGNL stands for Object graph Navigation language . Its expression language Struts 2 tags are use OGNL to read and write the data and object for Action Context and Value-stack . Q. Why struts 1.2 are container dependent and Struts 2 not container Dependent ? Ans. In Struts 1.2 we are use Action Servlet that why its Container dependent . But Struts 2 Action class Dose not use any container dependent object like HttpSession,HttpRequest,HttpResponse etc. that are container dependent object that is the resin the struts 2 are not container dependent . Q . What is Aware interfaces in struts 2 ? Ans . Aware Interfaces are use to make a struts 2 container dependent if Your Application need any Container Dependent object like Sssion ,Application, Request etc. You can use there Respective aware interface to implement your Action class. Aware Interface are also use to achieve the IOC in Struts 2. Q. How many Types validation Support by Struts validation framework ? Ans. Struts 2 Support two types validation
Q. What is Business validation and Input Validation ? Ans. Business Validation are those validation they are need to communicate with our data base like Your Login Failed etc. And Input Validation dont need to communicate the database like null value insert in any filed .
Q. How to achieve the localization and internalization in struts 2 ? Ans. Struts 2 support the Localization and Internalization with the help of .properties file. Q. What is the work of ActionInvocation calss ? Ans. Function of ActionInvocation class its invock the interceptor and action class. Q. How many Action class in Struts 2 ? Ans. Action Class object are create a every time when request is come . Q. What is the function of Interceptor ? Can we create a our custom Interceptor ? Ans. Interceptor in struts 2 work like Filter its check each and every request and perform the filtering task in our application . Yes we can Create Our Own interceptor AbstractInterceptor . Q. What is struts.devMode in struts.xml ? Ans. Struts.devMode its use to represent your application is ether Development Mode Or Production Mode by Setting True or false . If Its true than Your Application is Development Mode and its false Than your Application is Production Mode.