Pues así tan genérico... te puedo explicar lo que usé yo, que realmente es una parte pequeña de su potencial, creo.
Yo tenía un servidor que atendía peticiones web. Estas peticiones web, en vez de ser gestionadas por un Servlet como se suele hacer, eran gestionadas por las clases Action que implementan la tecnología Struts. Dentro de estas Action llamaba a las clases encargadas de la lógica, en mi caso, gestión de una BBDD, y devolvía una jsp con los resultados que cada petición web hiciera.
Ejemplo:
public class ListDevicesAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws DaoException,NullPointerException{
try{
List<HouseDevice> deviceList = DaoFactory.getInstance().getHouseDeviceDao().listAllDevices();
request.setAttribute("devices", deviceList);
return mapping.findForward("show_results");
}catch(NullPointerException n){
n.printStackTrace();
}
return null;
}
}
[/i]
Esta clase sirve para listar los dispositivos de mi base de datos. Si te fijas, obtiene la lista de dispositivos, la fija en el ámbito request y forwardea la jsp, que deberá ser la encargada de tratar la información como le de la gana.
Otro aspecto fundamental es el struts-config, que se va a encargar del mapeo petición web-clase Action. En mi caso, aparte de las cosas fijas que hay que poner, esta es la parte que asocia la petición ..../listDevices.do con mi clase listAllDevicesAction
<action path="/listDevices"
type="com.proy.web.ListDevicesAction">
<forward name="show_results" path="/jsp/listDevices.jsp" redirect="false" />
</action>
Si te fijas, le indica al servidor que tiene que devolver la jsp "listDevices.jsp", la encargada de tratar la información obtenida, como ya te he dicho. A mi me interesaba tener esa información en XML, por lo que esta es mi jsp:
<%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tld/struts-logic.tld" prefix="logic" %>
<devices>
<logic:iterate name="devices" id="current_device">
<device>
<device-id>< bean:write name="current_device" property="deviceId" /></device-id>
<name>< bean:write name="current_device" property="name" /></name>
<room-location> < bean:write name="current_device" property="roomLocation" /></room-location>
< bean:write name="current_device" property="isAvaliable" /></is-avaliable>
<state>< bean:write name="current_device" property="state" /></state>
</device>
</logic:iterate>
</devices>
Si entiendes mínimamente de jsp, verás que no uso las jstl tags, sino que uso unas que proporciona Struts. Eso realmente es a gusto, pues se puede hacer más o menos lo mismo con ambas. Yo, como no tenía ni idea de ninguna de las dos, pues aprendí con Struts.
Realmente lo que hace una clase Action es generar un Servlet, pero tu eso no lo ves, te limitas a escribir unas pocas líneas de código y y a se encargará el action de los temas de la conexión.
Espero haberte ayudado aunque sea un poco