Struts 2 action classes are most certainly not servlets, nor particularly similar.
This info forced me to dig up Struts 2 site. Here I come up with one point.
"S2 has Action classes which are extended by ActionSupport (or Action interface) classes, this is not the general requirement, you can access any Java class with execute() method, Struts will find it for you."
Am I right ?
And it means there is no HttpServletResponse/Request objects, nor any J2EE "javax.servlet.http" classes used/implemented in S2?
You *can* extend from ActionSupport but it's not a *must*. If you have an execute-method in your action it will be called automatically.
Regarding the HTTP*-Objects have a look at the Servlet Config Interceptor (http://struts.apache.org/2.0.14/docs/servlet-config-interceptor.html). You have access to those objects but you need to implement certain interfaces so Struts can inject those objects.
Are you right that the S2 site says that, or is it correct that S2 actions don't *have* to extend ActionSupport? I don't know if the S2 site says that, but it's true that actions don't *have* to extend ActionSupport.
That has nothing to do with the second part of your question, though. One of the main points of S2 is to abstract itself away from the servlet spec--one of the *major* pain points with Struts 1 (that's why WebWork went that route).
As the previous commenter states you *can* get access to the servlet spec objects, but there are very few situations where that's necessary. Since there are trivial, non-servlet-spec-related ways to get the attribute/parameter maps of the servlet spec objects, one more use case for accessing servlet spec objects is eliminated.
All of that combines to make action testing far, *far* easier.