One of the first things the Struts ActionServlet does when it initializes is to read the struts-config.xml file. It then follows the instructions in the config file and creates objects as needed. If you've specified a DataSource in your config file, the ActionServlet will create it and put it in Application scope. After it is finished with all its configuration tasks, the ActionServlet will call the init method on any plugin classes that are registered in the config file. So, by the time it calls your init method, everything has been initialized.
In answer to your second question:
Java Naming and Directory Interfact (JNDI) is a part of the
J2EE specification and is supported by every application server. It's considered best practice to register a DataSource in JNDI. Each application server has its own interface for setting up JNDI Datasources. Search for JNDI or DataSource in your App server's documentation and you'll find it.
This link shows how to do it in
Tomcat 5.