As to why it's preferred, consider how you'd unittest an action. If you need to inject your own request, perhaps a mock request, into the action, it's obviously going to be substantially easier if you could just set the request on the action via a setter. Using the static method means you have to create the entire Struts 2 request processing stack--not fun.
That said, tying your action to the servlet spec is almost never required, and even more rare, a good idea.
I cannot stress enough how much easier, and faster, your learning curve would be if you'd just read the documentation.