Question 1: What is Struts? Why you have used struts in your application or project.
Ans: This is the first interview questions anyone asks in Struts to get the interview rolling. Most commonly asked during less senior level. Struts is nothing but open source framework mostly used for making web application
whenever we use the term framework means it comprises JSP ,servlet
,custom tags message resources all in one bundle which makes developer
task very easy. Its is based on MVC pattern which is model view
Controller pattern.
Now why we use Struts?
So main reason is if we go with servlet all HTML code which is related
with design part mostly will come inside java code which makes code
unmaintainable and complex similarly if use JSP, all java code related
with business come inside design part which again make code complex,
that’s why MVC pattern come into existence and which separate the
business, design and controller and struts was made based upon this
pattern and easy to develop web application. The keyword to answer this Struts interview questions is MVC design pattern,
Front Controller Pattern and better flow management which mostly
interviewer are looking to hear. You can read more design pattern
interview question on my post
Question 2: What are the main classes which are used in struts application?
Ans 2: This is another beginner’s level Struts interview question which is used to check how familiar candidate is with Struts framework and API. Main classes in Struts Framework are:
Action servlet: it’s a back-bone of web application it’s a controller class responsible for handling the entire request.
Action class: using Action classes all the business logic is developed us call model of the application also.
Action Form:
it’s a java bean which represents our forms and associated with action
mapping. And it also maintains the session state its object is
automatically populated on the server side with data entered from a form
on the client side.
Action Mapping: using this class we do the mapping between object and Action.
ActionForward: this class in Struts is used to forward the result from controller to destination.
Question 3: How exceptions are handled in Struts application?
Ans: This is little tough Struts interview question though looks quite basic not every candidate knows about it. Below is my answer of this interview questions on Struts:
There are two ways of handling exception in Struts:
Programmatically handling: using try {} catch block in code where exception can come and flow of code is also decided by programmer .its a normal java language concept.
Declarative handling: There are two ways again either we define <global-Exception> tag inside struts config.xml file
<exception
key="stockdataBase.error.invalidCurrencyType"
path="/AvailbleCurrency.jsp"
type="Stock.account.illegalCurrencyTypeException">
</exception>
Programmatic
and Declarative way is some time also asked as followup questions given
candidate’s response on knowledge on Struts.
Key: The key represent the key present in MessageResource.properties file to describe the exception.
Type: The class of the exception occurred.
Path: The page where the controls are to be followed is case exception occurred.
Question 4: How validation is performed in struts application?
Ans:
Another classic Struts interview question it’s higher on level than
previous interview questions because it’s related to important
validation concept on web application. In struts validation is performed
using validator framework, Validator Framework in Struts consist of two XML configuration files.
1. validator-rules.xml file: which contains the default struts pluggable validator definitions. You can add new validation rules by adding an entry in this file. This was the original beauty of struts which makes it highly configurable.
2. Validation.xml files which contain details regarding the validation routines that are applied to the different Form Beans.
These two configuration file in Struts should be place somewhere inside the /WEB-INF folder of the application to keep it safe from client and make it available in Classpath.
<!-- Validator plugin -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
Now the next step towards validation is create error messages inside the message resource property file which is used by validator framework.
Message resource Contain:
1. CurrencyConverterForm.fromCurrency = From Currency
2. CurrencyConverterForm.toCurrency=To currency
3. errors.required={0} is required.
Then validation rules are defined in validation.xml for the fields of form on which we want desire validation
Form bean code that extend DynaValidatorForm
Eg; <form-beans>
<form-bean name="CurrencyConverterForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="fromCurrency" type="java.lang.double" />
<form-property name="toCurrecny" type="java.lang.double" />
</form-bean>
</form-beans>
Validation.xml file contains
<form-validation>
<formset>
<form name=" CurrencyConverterForm ">
<field property=" fromCurrency " depends="required">
<arg key=" CurrencyConverterForm. fromCurrency "/>
</field>
<field property=" toCurrecny " depends="required ">
<arg key=" CurrencyConverterForm.toCurrency "/>
</field>
</form>
</formset>
</form-validation>
To
associate more than one validation rule to the property we can specify a
comma-delimited list of values. The first rule in the list will be
checked first and then the next rule and so on. Answer of this Struts
questions gets bit longer but it’s important to touch these important
concept to make it useful.
Question 5: What is the Difference between DispatchAction and LookupDispatchAction in Struts Framework?
This Struts interview questions is pretty straight forward and I have put the differences in tabular format to make it easy to read.
Dispatch Action
|
LookupDispatchAction
|
It’s a parent class of LookupDispatchAction
|
Subclass of Dispatch Action
|
DispatchAction
provides a mechanism for grouping a set of related functions into a
single action, thus eliminating the need to create separate actions
for each function.
|
An abstract Action
that dispatches to the subclass mapped executes method. This is
useful in cases where an HTML form has multiple submit buttons with
the same name. The button name is specified by the parameter property
of the corresponding ActionMapping.
|
If not using Internalization functionality then dispatch action is more useful.
|
Lookup Dispatch Action is useful when we are using Internalization functionality
|
DispatchAction selects the method to execute depending on the request parameter value which is configured in the xml file.
|
LookupDispatchAction
looks into the resource bundle file and find out the corresponding
key name. We can map this key name to a method name by overriding the
getKeyMethodMap() method. 
|
DispatchAction is not useful for I18N
|
LookupDispatchAction is used for I18N
|
Question 6: How you can retrieve the value which is set in the JSP Page in case of DynaActionForm?
Ans: DynaActionForm is a popular topic in Struts interview questions. DynaActionForm
is subclass of ActionForm that allows the creation of form beans with
dynamic sets of properties, without requiring the developer to create a
Java class for each type of form bean. DynaActionForm eliminates the
need of FormBean class and now the form bean definition can be written
into the struts-config.xml file. So, it makes the FormBean declarative and this helps the programmer to reduce the development time.
For Example: we have a CurrencyConverterForm and we don't want a java class.
CurrencyConverterForm has properties fromCurrency, toCurrency
in the struts-config.xml file, declare the form bean
<form-bean name=" CurrencyConverterForm "
type="org.apache.struts.action.DynaActionForm">
<form-property name=" fromCurrency " type="java.lang.String"/>
<form-property name=" toCurrency " type="java.lang. String "/>
</form-bean>
Add action mapping in the struts-config.xml file:
<action path="/convertCurrency" type="com.techfaq.action.ConvertCurrencyAction"
name=" CurrencyConverterForm "
scope="request"
validate="true"
input="/pages/ currencyConverterform.jsp">
<forward name="success" path="/jsp/success.jsp"/>
<forward name="failure" path="/jsp/error.jsp" />
</action>
In the Action class.
public class ConvertCurrencyAction extends Action
{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
DynaActionForm currencyConverterForm = (DynaActionForm)form;
// by this way we can retrieve the value which is set in the JSP Page
String fromCurrency = (String) currencyConverterForm.get("fromCurrency ");
String toCurrency = (String) currencyConverterForm.get("toCurrency ");
return mapping.findForward("success");
}
}
}
In the JSP page
<html:text property=" fromCurrency " size="30" maxlength="30"/>
<html:text property=" toCurrency " size="30" maxlength="30"/>
Question 7: what the Validate () and reset () method does?
Ans: This is one of my personal favorite Struts interview questions. validate()
: validate method is Used to validate properties after they have been
populated, and this ,method is Called before FormBean is passed to
Action. Returns a collection of ActionError as ActionErrors. Following
is the method signature for the validate() method.
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if ( StringUtils.isNullOrEmpty(username) && StringUtils.isNullOrEmpty(password)){
errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.usernamepassword.required"));
}
return errors;
}
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.
Example :
public void reset(ActionMapping mapping, HttpServletRequest request) {
this.password = null;
this.username = null;
}
Set null for every request.
Question 8: How you will make available any Message Resources Definitions file to the Struts Framework Environment?
Ans:
Message Resources Definitions file are simple .properties files and
these files contains the messages that can be used in the struts
project. Message Resources Definitions files can be added to the
struts-config.xml file through < message-resources / > tag.
Example: < message-resources parameter= MessageResources / >
Message resource definition files can available to the struts environment in two ways
1. using web.xml as
<servlet>
<servlet-name>action<servlet-name>
servlet-class>org.apache.struts.action.ActionServlet<servlet-class>
<init-param>
<param-name>application<param-name>
<param-value>resource.Application<param-value>
</servlet>
2.
<message-resource key="myResorce" parameter="resource.Application" null="false">
Question 9: What configuration files are used in Struts?
Ans: ApplicationResources.properties and struts-config.xml these two files are used to between the Controller and the Model.
Question 10: Explain Struts work Flow?
Ans: Some time this Struts interview questions asked as first questions but I recall this now J . Here is the answer of this Struts interview questions
1) A request comes in from a Java Server Page into the ActionServlet.
2)
The ActionServlet having already read the struts-config.xml file, knows
which form bean relates to this JSP, and delegates work to the validate
method of that form bean.
3)
The form bean performs the validate method to determine if all required
fields have been entered, and performs whatever other types of field
validations that need to be performed.
4)
If any required field has not been entered, or any field does not pass
validation, the form bean generates ActionErrors, and after checking all
fields returns back to the ActionServlet.
5)
The ActionServlet checks the ActionErrors that were returned from the
form beans validate method to determine if any errors have occurred. If
errors have occurred, it returns to the originating JSP displaying the
appropriate errors.
6)
If no errors occurred in the validate method of the form bean, the
ActionServlet passes control to the appropriate Action class.
7)
The Action class performs any necessary business logic, and then
forwards to the next appropriate action (probably another JSP).
Are Struts's action classes Thread-safe?Yes.
Action classes are based on "one-instance and many-threads". This is to
conserve resources and to provide the best possible throughput.
What are the various Struts Tag libraries?There are various struts tags. But the most-repeated tags are:
struts-bean.tld
struts-html.tld
struts-logic.tld
struts-nested.tld
What is ActionMapping in struts?Action mapping defines the flow of one request. The possible sequence is
User -> request -> Form -> Validation -> Business Code -> Forward -> JSP -> response -> User.
The components involved are Action classes, Forms and JSP.
What are the advantages of having multiple struts-config in the same application?The
implementation with many struts-config is to organize the development
work, so that many people may be involved and it is some organized way
of doing things. But this would result in some compromise in
performance(speed). Technically there is no any difference between
single and multiple struts-config files.
What are the ways in which resource file can be used in struts?Defining message resources in struts-config file.
Programmatically using resource files in Java classes or in JSP files.
Explain the term 'architecture of the application'?Architecture
is the set of rules (or framework) to bring in some common way of
assembling or using J2EE components in the application. This helps in
bringing consistency between codes developed by various developers in
the team.
Which is the architecture followed by struts?Struts follows MVC architecture.
What are components corresponding o M, V and C in struts?Model
: The model represents the data of an application. Anything that an
application will persist becomes a part of model. The model also defines
the way of accessing this data ( the business logic of application) for
manipulation. It knows nothing about the way the data will be displayed
by the application. It just provides service to access the data and
modify it. Here 'Form Bean' represents Model layer.
View : The
view represents the presentation of the application. The view queries
the model for its content and renders it. The way the model will be
rendered is defined by the view. The view is not dependent on data or
application logic changes and remains same even if the business logic
undergoes modification. JSP represents View Layer.
Controller :
All the user requests to the application go through the controller. The
controller intercepts the requests from view and passes it to the model
for appropriate action. Based on the result of the action on data, the
controller directs the user to the subsequent view. Action classes
(action servlets) represent Controller layer.
Differentiate between the terms 'Design Patterns', 'Framework' and 'Architecture'.Design Pattern:
The various solutions arrived at for the known problem. This helps to
avoid re-inventing the wheel. The risk-free solution can be easily used
by others. For example, singleton is the design pattern that you can use
instantly to enfore one object per class. You do not need to think of
this on your own.
Framework: A framework is a
structure or set of rules, used to solve or address complex issues. It
is basically a reusable designf for the J2EE applications. For example,
Struts, JSF,etc., are the frameworks. You can use these frameworks based
on the requirements of your application and each has its own set of
advantages.
Architecture: It is a design that
describes how the various components in the application fit together.
For example, MVC is an architecture which is helpful to define how the
components interact within the application.
What is the difference between ActionForm and DynaActionForm?In
action form, you need to define the form class that extends ActionForm
explicitly, whereas you can define the form dynamically inside the
struts-config file when using DynaActionForm.
How can you use Validator framework in struts?Validator
Frameworks are helpful when the application needs server-side
validation such that the particular set of validations occur very
frequently within the same application. This avoids writing complex code
in validation() method in every form bean. Using validator framework,
there are different pre-written validations in place. You can customize
these validations in XML file.
What are client-side and server-side vaidations?Client-side validations:
These are the validations that id done using javascripts. There is
always a danger involved that the user can get through (crack-through)
these validations. But for some simple validations, like converting
lower-case to upper-case or date validations can be done, you can use
javascripts.
Server-side validations: These are the
validations done in server-side using Java components (Form bean or in
business logics) where the user has no chance to crookedly get through
the system.
What are the advantages & differences between using validate() method in form over validations using validator framework.Refer to the previous-answer.
Define the terms authentication and authorisation.Authentication is the process/rule that validates if the user is allowed to access the system or not.
Authorization
is the process/rule that validates if the user is allowed to access the
particular part of the system or not. This occurs after user's
successful authentication.
What are the components provided in J2EE to perform authentication and authorization?Authentication – RequestProcessor and/or Filter.
Authorization - DTO, JDO or Java or Action classes.
Give the difference between between 'DispatchAction' and 'Action'.A
DispatchAction contains various different methods other than the
standard execute() method in Action classes. These methods are executed
based on some request parameter. For example, you can code in such a way
that three buttons (namely Insert, Delete, Update) buttons correspond
to different methods such as insert(), delete() and udpate(). The submit
button in JSP would have the property that has the value which matches
to any one of the methods defined in DispatchAction class.
What is pagination technique? How can you design them in struts?Pagination
is the technique where the bulk of results are split into different
pages and only the information where the user can conveniently see are
displayed in a page. (Like in Goooooogle). This can be achieved in many
ways, but the simplest method is to have a query string (say
http://www.testwebsite?pageNumber=2) would lead to information
corresponding to resultset rows from 11 to 20. Assuming that you want to
display 10 related rows of information, you can set the formula as
follows:
Starting row = (pageNumber-1) * + 1 which is equal to 11.
Ending row = Starting row + which is equal to 20.How can you populate the drop-down list using form properties?There are many ways for this. But the best method is to use which
defines collection that needs to be used to populate the drop-down
list, the property to store the selected value and the collection that
is used to display the labels (what we see in JSP page). For Example,
html:options collection="form-collection-property"
property="form-property"
labelProperty="form-another-collection-property"
What is the XML parser provided in struts? Can you use it for other purposes?'Digester' framework. Yes we can use for our applications to store and parse our application-related data.
Difference between Struts 1.0 and 1.1
- Perform() method was replaced by execute()
- DynaActionForms are introduced.
- Tiles Concept is introduced
- We can write our own Controller by Inheriting RequestProcessor