Struts is JSP and Tag centric and with a fixed dependecy on
being deployed in a conventional Servlet HTTP request /
JSF is somewhat more generic. It is component centric and
has no specific dependency on HTML markup / tags apart from
the fact that the renders for most components are tailored
for conventional browser output via HTML.
Both will implement mvc2 design pattern, struts given by
apache, jsf given by sun.
Struts didn't provide any use implementations but JSF we
can implement our own implementations like UI-components,
JSF provides the Converters also
The main difference is the UIComponent of JSF. Developers
can define their own components and also the way it should
be rendered. A component having a particular behavious can
be rendered in different ways.
Eg: UISelectOne. This components behaviour is to select one
value, but can be rendered as a List, Menu or Radio.
More we can develop RenderKit's appropriate to the client,
ie html, wml, etc. So a single JSF application can be used,
and using different renderers can be rendered to different
Jsf is component based frame work which concentrates on
UIComponents look and feel(view layer) where as struts
concentrates more on the controller part not on the
userinterface but both follow model-2 architecture
Configuration wise both are same and supports the
internalization. JSF is more developer friendly why because
to validate mandatory filed in JSF we can specify attribute
like require is true and we can use mandatory filed id in
message tag. But in struts we have to include
validation-rules.xml in struts-config.xml and form has to be
specified in validation-rules.xml.
Even for condition statement in JSF is better than struts.
No need to overwrite any method like execute in JSF.