So far I fail to see where Struts 2 deviates from or violates the spec.
The fact that _usually_ a front controller - a concept not to be found
at all in the servlet spec - is implemented as servlet does not mean
that it _has_ to be implemented that way, unless the spec says or
clearly implies otherwise. For what I found in the and cited earlier,
this is not the case.

That WAS *interprets* the spec in a different way - especially when it
comes to a tooling level that has nothing to do with the spec whatsoever
(parsing web.xml to generate loadbalancing / proxy webserver
configuration) - is a totally different story. To some extent I
understand the rationale behind this, implying a servlet mapping should
exist for a given URL - but besides IBM claiming this has to be the
case, I haven't found any evidence so far. Interestingly, when it comes
to IBM support saying Struts 2 deviates from the spec, I remember more
than one case where I found WAS / Websphere Portal to implement a very
... say ... at least ... imaginative interpretation of the specs. I'm
not quite sure if them saying that Struts 2 deviates makes a case for
this being a fact to count on. But again, I'm happy to hear I'm wrong if
someone could clearly point out what I might have missed when reading
the spec.

Side note - sorry to say, but in my very personal and for sure not
representative experience, every time a "some application servers might
have issues" case arises, there is a good chance that _some_ of them
share a common product line name, starting with "W" :) And well, going
through hell when deploying apps to WAS* is something I suffered from
myself many times, with various different frameworks and technology
stacks in use.

I'll try to wrap up my points:
- the filter-based dispatching addressed real and serious technical
integration issues, and was able to solve them
- if it would violate the spec, we would *have to* remove it again, or
at least deliver a then spec conform dispatcher servlet as alternative -
so far there seems to be no evidence this is the case
- the Struts team *can for sure do much better* in documenting the
possible glitches, especially after what we learned from this thread and
your experiences; we should point out that using a filter dispatcher
might impose the need to add a default dummy servlet mapping to help
some application servers

BTW: I agree, Spring MVC became a great framework once they dropped the
inheritance-based controller madness, replacing it with annotation based
POJO configuration and heavy AOP magic. Nevertheless, Struts 2 has a lot
of sweet spots even over Spring MVC, as to my opinion as a user of both :)

Cheers,
- René

Am 14.08.12 15:46, schrieb Struts Two:
> What people are missing here is that using filters and deviating from the 
> spec as front controller would cause quite a few issues when some 
> applications servers are used. I quite clearly remember that I went through 
> hell to deploy my applications on WebSphere applications with an Http server 
> as front Web server. WebSphere goes through web.xml files and uses Servlet 
> URL mappings to generate the plugin file for resource mapping and filters are 
> ignored. Even when I opened a pmr, I was told by support that struts 2 
> deviates from the Spec. when you pick a framework, you got to be aware that 
> these things may cost you dearly down the road depending on what application 
> servers you use or you plan to migrate.
> 
> As much as I have been an avid struts user [specially struts 1], I personally 
> think that you should seriously consider Spring MVC / MVC Portlet against any 
> other framework. I ,per se, have had a great experience with Spring MVC which 
> somehow brings up the good memories of struts 1 [once everything is put in 
> the context of its time]
> 
> 
> 
> ----- Original Message -----
> From: "umeshawas...@gmail.com" <umeshawas...@gmail.com>
> To: Struts Users Mailing List <user@struts.apache.org>
> Cc: 
> Sent: Monday, August 13, 2012 2:05:45 PM
> Subject: Re: Benefits of using Filter as front controller
> 
> Rene
> Thanks for such a detailed explanation and descrbing each and every aspects
> Now even I can say and explains things in much more and good way
> Sent from BlackBerry® on Airtel
> 
> -----Original Message-----
> From: Rene Gielen <rgie...@apache.org>
> Date: Mon, 13 Aug 2012 20:00:04 
> To: Struts Users Mailing List<user@struts.apache.org>
> Reply-To: "Struts Users Mailing List" <user@struts.apache.org>
> Subject: Re: Benefits of using Filter as front controller
> 
> Grabbed me a copy of Servlet Spec 2.4:
> 
> <quote>
> SRV.6.1 What is a filter?
> A filter is a reusable piece of code that can transform the content of
> HTTP requests, responses, and header information. Filters do not
> generally create a response or respond to a request as servlets do,
> rather they modify or adapt the requests for a resource, and modify or
> adapt responses from a resource.
> </quote>
> 
> "do not generally" is way different from "may not", right?
> 
> Reading both the relevant parts of the spec and the API docs again, I
> cannot see any violation of the servlet specification by using a Filter
> for doing the dispatching, rather than a Servlet.
> 
> The other part is how requests are mapped, which imposes the question if
> a servlet mapping matching the request URL must exist:
> 
> <quote>
> SRV.11.1 Use of URL Paths
> [...]
> 1. The container will try to find an exact match of the path of the
> request to the path of the servlet. A successful match selects the servlet.
> 2. The container will recursively try to match the longest path-prefix.
> This is done by stepping down the path tree a directory at a time, using
> the ’/’ character as a path separator. The longest match determines the
> servlet selected.
> (ad 2.: Previous versions of this specification made use of these
> mapping tech- niques as a suggestion rather than a requirement, allowing
> servlet con- tainers to each have their different schemes for mapping
> client requests to servlets.)
> 3. If the last segment in the URL path contains an extension (e.g.
> .jsp), the servlet container will try to match a servlet that handles
> requests for the extension. An extension is defined as the part of the
> last segment after the last ’.’ character.
> 4. If neither of the previous three rules result in a servlet match, the
> container will attempt to serve content appropriate for the resource
> requested. If a "default" servlet is defined for the application, it
> will be used.
> </quote>
> 
> Point 4 is crucial. As to my opinion, it doesn't state clearly if a
> default mapping must exist or not, which leaves it IMO up to the container.
> 
> That said, most frameworks use dispatcher servlets, and WebWork / Struts
> 2 once did as well.
> 
> The rationale behind switching to the Filter architecture was to deal
> better with integrating technologies such a Sitemesh or Portlet, which
> both profit from splitting the dispatching in more than one phase. This
> could only be accomplished by using filters rather than servlets. Since
> then, e.g. all major problems with sitemes integration magically
> disappeared.
> 
> So my point of view is that there is nothing wrong with using filters
> for dispatching. If the container interprets the servlet spec in an
> opposite way, a dummy default servlet mapping should do the trick.
> 
> Nevertheless I'm happy to hear about points I might have missed or
> misinterpreted.
> 
> - René
> 
<snip/>

-- 
René Gielen
http://twitter.com/rgielen

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to