Struts

 

MVC – Model-1

 

·       Aplicações complexas, utilizando Model 1 normalmente tem uma grande quantidade de scriptlets com código Java presente nas páginas JSP

·       Para resolver esses problemas, podemos utilizar JSP Tags Extension(Custom Tags)

·       Struts tem um conjunto dessas tags, que são as “tag  libraries” para diminuir a quantidade de código Java nos JSPs. (Se possível chegar a 0%).

 

MVC – Model-2

·         Arquiteturalmente falando, o Struts segue o MCV2:

Componentes do Struts

 

·       Aplicações que utilizam Model 2 utilizam Servlets e JSP tirando vantagem das melhores características de cada uma das tecnologias.

Controlador (C)

 

View (V): normalmente a visão é implementada através de uma página HTML ou JSP.

 

Model (M): geralmente o modelo é implementado através de um objeto Java (um Javabean).

 

Classes Auxiliares: Struts oferece um conjunto de classes que auxiliam no desenvolvimento:

Tag libraries

 

 

Funcionamento:

Exemplo

 


Segunda tela



Terceira tela


 

Vamos da uma olhada com mais detalhes em nosso exemplo

 

Primeira página




<%@ include file="headerCode.jsp" %>

<html:html locale="true">

<html:base/>

<head>

<title><bean:message key="application.title"/></title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body>

<table width="75%" border="1">

  <tr>

    <td><html:errors/></td>

  </tr>

</table>

<html:form action="/cadastroUsuario?metodo=cadastraUsuario" focus="login">

<table>

       <tr>
             <td>
                    <bean:message key="index.login"/>  :
             </td>
             <td>
                    <html:text property="login" />
             </td>
       </tr>

       <tr>
             <td>
                    <bean:message key="index.mail"/>
             </td>
             <td>
                    <html:text property="mail"/>
             </td>
       </tr>

       <tr>

             <td>

                    <bean:message key="index.senha"/>:
             </td>
             <td>
                    <html:password property="senha" />
             </td>
       </tr>

       <table>

             <tr>      
                    <td>

                           <html:submit value="Enviar dados "/>
                    </td>
             </tr>
       </table>

</table>

</html:form>

<logic:present name="lista_usuarios">

<table width="75%" border="1">
  <tr>
    <td>Nome</td>

    <td>E-mail</td>
   
<td>Opção</td>
 
</tr>

<logic:iterate id="usuarioCorrente" name="lista_usuarios" indexId="index">

         <tr>
             <td><bean:write name="usuarioCorrente" property="login"/></td>

             <td><bean:write name="usuarioCorrente" property="mail"/></td>

             <td>
<a href='<html:rewrite page="/removeUsuario.do"/>?metodo=removeUsuario&pos=<bean:write name="index"/>'>excluir</a>

</td>
         </tr> 

 </logic:iterate>

</table>

</logic:present>

</body>

</html:html>

 

 

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@ tagliburi="/WEB-INF/struts-logic.tld" prefix="logic" %>

 

 


<html:base/>=<base href="http://host:8080/caminho/nome.jsp ">

 

 

 

 

<bean:message key="application.title"/>

 

 

Esta tag verifica a configuração da aplicação (que veremos adiante) procurando um bean especial ("Form bean") relacionado com /index.jsp

 

Neste caso, o tag acha um tal Form bean e verifica se já foi instanciado

 

Como não foi instanciado, um novo objeto é criado

 

Quando o form é submetido via HTTP, Struts automaticamente transfere todos os campos do form (no request) para o Form bean

O que você tem que fazer para que isso ocorra:

 

Definir uma classe para o Form bean (com getters e setters para os campos)

 

Adicionar a classe à configuração da aplicação

 

Ligar a classe ao mapeamento da ação, usando o mesmo nome (name="usuarioForm")

<html:form action="/cadastroUsuario?metodo=cadastraUsuario" focus="login">

 

Esta tag é uma entrada (input) com o nome de login, isso significa que você tem que ter uma propriedade String login no seu bean.(usuarioForm)

                  <html:text property="login" />

 

Esta tag envia os dados do formulário para o servlet controlador do Struts

                        <html:submit value="Enviar dados "/>

 

Agora vamos ver como encaixar tudo com o arquivo de configuração do struts(struts-config.xml)

 


   
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

<!-- ========== Data Source Configuration =============================== -->

<data-sources />

<!-- ========== Form Bean Definitions ================================== -->

<form-beans>

<!—Estamos dando um nome ao bean usuarioActionForm -->

<form-bean name="usuarioForm" type="daca.actionform.UsuarioActionForm" />

</form-beans>

<!-- ========== Global Exception Definitions ============================== -->

<global-exceptions />

<!-- ========== Global Forward Definitions =============================== -->

<global-forwards>

<forward name="sucesso" path="/sucesso.jsp" /> 

<forward name="pagina_inicial" path="/index.jsp" /> 

</global-forwards>

<!-- ========== Action Mapping Definitions =============================== -->

<action-mappings>

<!-- Action para cadastrar usuario -->

<action
path="/cadastroUsuario"
input="/index.jsp"
name="usuarioForm"
validate="true"
parameter="metodo"
type="daca.action.UsuarioAction"/>

<action
path="/removeUsuario"
parameter="metodo"
type="daca.action.UsuarioAction"/>

</action-mappings>

<!-- ========== Message Resources Definitions ============================ -->

<message-resources parameter="application" />

<!-- ========== Plug Ins Configuration ================================= -->

<!—diz onde encontrar os arquivos de validação-->

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

<set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>

</plug-in>

</struts-config>


 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <display-name>Daca</display-name>

  <listener>
    <listener-class>daca.ContextListener</listener-class>
  </listener>

    <!-- Standard Action Servlet Configuration (with debugging) -->

  <servlet>

    <servlet-name>action</servlet-name>

	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>

    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>

    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>

    <load-on-startup>2</load-on-startup>

  </servlet>

	<!-- Spring Servlet-->	
	<servlet>
	   	<servlet-name>SpringContextServlet</servlet-name>
	   	<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>	  
	  	<load-on-startup>2</load-on-startup>
	</servlet>

    <!-- Standard Action Servlet Mapping -->

  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
  </welcome-file-list>

   <!-- Struts Tag Library Descriptors -->

  <taglib>
    <taglib-uri>/tags/struts-bean</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-html</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-logic</taglib-uri>
    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
  </taglib>

</web-app>

 

 

Relembrando o funcionamento

 

 

·       A implementação do Bean




package daca.actionform;

import java.lang.reflect.InvocationTargetException;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.validator.ValidatorActionForm;

import org.apache.struts.validator.ValidatorForm;

import daca.business.Usuario;

/**

 * @author marcos

 *

 * Classe que recebe os dados do usuário enviados de um formulário

 */

public class UsuarioActionForm extends ValidatorForm {

    private String login="";

    private String senha="";

    private String mail="";

    /**

     * @return Returns the login.

     */

    public String getLogin() {

         return login;

    }

    /**

     * @param login The login to set.

     */

    public void setLogin(String login) {

         this.login = login;

    }

    /**

     * @return Returns the mail.

     */

    public String getMail() {

         return mail;

    }

    /**

     * @param mail The mail to set.

     */

    public void setMail(String mail) {

         this.mail = mail;

    }

    /**

     * @return Returns the senha.

     */

    public String getSenha() {

         return senha;

    }

    /**

     * @param senha The senha to set.

     */

    public void setSenha(String senha) {

         this.senha = senha;

    }

    /**

     * cria um usuario do model

     * @return usuario, o usuário criado com os dados do form

     */

    public Usuario createUsuarioBussiness(){

         //TODO usar uma factory, tirar os printStackTrace

         Usuario u = new Usuario();

         try {

             BeanUtils.copyProperties(u, this);

         } catch (IllegalAccessException e) {  

             e.printStackTrace();

         } catch (InvocationTargetException e) {

             e.printStackTrace();

         }

         reset();

         return u ;

    }

     /* (non-Javadoc)

      * @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)

      */

    public void reset() {

         setLogin("");

         setMail("");

         setSenha("");       

    }

     /* (non-Javadoc)

      * @see org.apache.struts.action.ActionForm#validate(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)

      */

    public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) {

         ActionErrors errors = super.validate(arg0, arg1);

         if (getLogin().equals("login")) {

             errors.add("login.invalido", new ActionError("login.invalido"));

         }

         return errors;

    }

}

package daca.service;


import java.util.List;
import daca.business.Usuario;


public interface PersistenteIF {	


	public void save(Usuario usuario);
	public void remove(String id);
	public List selectTodos();	


}
package daca.service;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import daca.business.Usuario;


public class GerenteBanco implements PersistenteIF{


	private DriverManagerDataSource dataSource;	


	public GerenteBanco(){	
	}


	/* (non-Javadoc)
	 * @see daca.service.PersistenteIF#save(daca.business.Usuario)
	 */
	public void save(Usuario usuario) {		
		try {
			Connection conn = dataSource.getConnection() ;		
			PreparedStatement statement = conn.prepareStatement("insert into usuario (login,senha,mail) values  (?,?,?)");
			statement.setString(1,usuario.getLogin());
			statement.setString(2,usuario.getSenha());
			statement.setString(3,usuario.getMail());
			statement.execute();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	}


	/* (non-Javadoc)
	 * @see daca.service.PersistenteIF#remove(java.lang.String)
	 */
	public void remove(String id) {
		try {			
			Connection conn = dataSource.getConnection();
			PreparedStatement statement = conn.prepareStatement("delete from usuario where id=?");
			statement.setString(1,id);			
			statement.execute();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	}


	/* (non-Javadoc)
	 * @see daca.service.PersistenteIF#selectTodos()
	 */
	public List selectTodos() {
		Connection conn = null;
		List lista = new ArrayList();
		try {			
			conn = dataSource.getConnection();
			ResultSet rs = conn.createStatement().executeQuery("select * from usuario");
			while(rs.next()){
				Usuario u = new Usuario();
				u.setId(rs.getInt(1));
				u.setLogin(rs.getString(2));				
				u.setSenha(rs.getString(3));
				u.setMail(rs.getString(4));
				lista.add(u);
			}
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return lista;
	}


	/**
	 * @return Returns the dataSource.
	 */
	public DriverManagerDataSource getDataSource() {
		return dataSource;
	}


	/**
	 * @param dataSource The dataSource to set.
	 */
	public void setDataSource(DriverManagerDataSource dataSource) {
		this.dataSource = dataSource;
	}


}

package daca.service;


import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import daca.util.Util;


public  class ServiceLocator {	

	private static ServiceLocator self = null;	


	//the persistence service bean name
	private static final String PERSISTENT_SERVICE_BEAN_NAME = "servicoPersistencia";	

	//the Spring application context
	private ApplicationContext appContext;	


	//the cached user service
	private PersistenteIF servicoUsuario;	


	/**
	 * Construtor.
	 * <p>
	 * Cria um objeto chamado de WebApplicationContext a partir de um contexto guardado na classe Util
	 */
	private ServiceLocator() {		
		this.appContext = WebApplicationContextUtils.getRequiredWebApplicationContext(Util.singleton().getContext());		
		servicoUsuario = (PersistenteIF) lookupService(PERSISTENT_SERVICE_BEAN_NAME);		
	}	


	public static ServiceLocator singleton(){
		if (self == null) {
			self = new ServiceLocator();
		}
		return self;
	}		


	public PersistenteIF getServicoUsuario() {
		return this.servicoUsuario;
	}


	/**
	 * Socaliza um serviço baseado no nome do bean	 * 
	 * @param serviceBeanName o nome do bean a ser pesquisado
	 * @return o bean de serviço
	 */
	public Object lookupService(String serviceBeanName) {
		return appContext.getBean(serviceBeanName);
	}
}


package daca.action;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.actions.DispatchAction;

import daca.actionform.UsuarioActionForm;

import daca.util.DCConstants;

public class UsuarioAction extends DispatchAction {

    /* (non-Javadoc)

     * @see org.apache.struts.action.Action#perform(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)

     */

    public ActionForward cadastraUsuario(ActionMapping mapping, ActionForm form,

             HttpServletRequest request, HttpServletResponse response)

             throws IOException, ServletException {

         UsuarioActionForm usuario =(UsuarioActionForm) form;

         List listaDeUsuario = (List) request.getSession().getAttribute(DCConstants.LISTA_USUARIO);

         if (listaDeUsuario == null){

             listaDeUsuario = new ArrayList();

             request.getSession().setAttribute(DCConstants.LISTA_USUARIO, listaDeUsuario);

         }

         listaDeUsuario.add(usuario.createUsuarioBussiness());      

         return mapping.findForward(DCConstants.PAGINA_INICIAL);

    }

 

    /* (non-Javadoc)

     * @see org.apache.struts.action.Action#perform(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)

     */

    public ActionForward removeUsuario(ActionMapping mapping, ActionForm form,

             HttpServletRequest request, HttpServletResponse response)

             throws IOException, ServletException {

         String posicao = request.getParameter("pos");

         List listaDeUsuario = (List)  request.getSession().getAttribute(DCConstants.LISTA_USUARIO);

         if (posicao != null) {

             try {

                 listaDeUsuario.remove(Integer.parseInt(posicao));

             }catch (Exception e) {

                 ActionErrors errors = new ActionErrors();

                 errors.add("erro_parametro_invalido",new ActionError("error.usuario.naoremovido"));

                 super.saveErrors(request,errors);

             }

         }               

         return mapping.findForward(DCConstants.PAGINA_INICIAL);

    }

}

·       Depois da computação feita na action, temos uma coleção na sessão com usuários, mostramos o resultado com a tag iterate


					  

<logic:present name="lista_usuarios">

<table width="75%" border="1">

  <tr>

    <td>Nome</td>

    <td>E-mail</td>

    <td>Opção</td>

  </tr>

<logic:iterate id="usuarioCorrente" name="lista_usuarios" indexId="index">

         <tr>

             <td><bean:write name="usuarioCorrente" property="login"/></td>

             <td><bean:write name="usuarioCorrente" property="mail"/></td>

             <td>

<a href='<html:rewrite page="/removeUsuario.do"/>?metodo=removeUsuario&pos=<bean:write name="index"/>'>excluir</a>

</td>

         </tr

 </logic:iterate>

</table>

</logic:present>

 

<a href='<html:rewrite page="/removeUsuario.do"/>?metodo=removeUsuario&pos=

<bean:write name="index"/>'>excluir</a>

 

Finalmente ...

                Struts faz mais do que mostrei aqui, principalmente nas taglibs

                Examine a documentação das taglibs aqui

 

Spring

 

J2EE

 

Componentes J2EE na Camada de Apresentação

 

Os seguintes componentes podem existir na camada de apresentação:

Componentes J2EE na Camada Web

Componentes J2EE na Camada de Aplicação

              

Componentes da camada de aplicação são chamados Enterprise Java Beans (EJB)

                 

Há vários tipos de EJBs:

                 

A camada de dados

 

Containers

A chave da arquitetura J2EE é que muito trabalho normalmente feito pelo programador é poupado, já que é feito automaticamente pelo middleware

O programador se concentra no Business Logic

A entidade que faz essa mágica é o Container

Serviços

 

J2EE é bem mais que EJB?

 

·       Sim, muitas pessoas pensam que se não tivermos EJB não estamos desenvolvendo uma aplicação J2EE. Como vimos acima J2EE é bem mais do que EJB.

 

Porque desenvolver aplicações sem EJB ?

 

·       Deploy complexo

·       Configuração complexa

·       Desempenho nem sempre é adequado

·       Aprendizagem complicada

·       Dificulta a testabilidade

·       Acúmulo de funcionalidades que nem sempre são necessárias para a aplicação.

 

Como implementar os serviços descritos até aqui resolvendo os problemas acima?

 

·       Lightweight container (containers leves).

 

 

 

Serviços embutidos nos lightweight containers

 

·       Gerenciamento do ciclo de vida.

·       Localização de componentes

·       Dependência de resolução: resolver as dependências de implementação através do seu esquema de configuração(Veja mais detalhes em IOC mais adiante)

 

Potenciais serviços

 

·       Enterprise service: Gerência de transação ou a declaração de serviços para os objetos que estão “rodando” no container

·       Thread management: o container oferece um modelo de threads para acessar e gerenciar os objetos

·       Clustering

·       Management: gerência de serviços para os objetos que estão “rodando” dentro dele.

·       Exposing remoting service: acesso remoto para os objetos que estão rodando no container.

·       Consulting remote service: prover acesso transparente para objetos que estão rodando do outro lado do container.

·       Customization and extensibility: permite adicionar serviços de forma declarativa aos objetos que estão “rodando” dentro do container. 

 

Entendendo Inversão de controle (Invertion of control- IoC)

 

·       O que queremos com IoC é minimizar dependência

·       IoC é uma forma de controlar e desenvolver aplicações de forma que estas sejam mais flexíveis e mais "limpas".

·       É um conceito interessante e que facilmente pode ser utilizado para construir códigos muito mais elegantes.

 

Problema

 

public class JDBCDataManger {

  public void accessData() {

        // temos um forte acoplamento aqui

    DataSource dataSource = new DataSource();

    //access data

...
}
}

 

 

Possível solução

 

 

public class JDBCDataManger {
  private DataSource dataSource;
  
  public void setDataManager(DataSource dataSource {
    this.dataSource = dataSource;
  }
  
  public void getData() {
      //use dataSource for something
  }
}



<bean id="myDataSource" 
  class="org.apache.commons.dbcp.BasicDataSource" >
  <property name="driverClassName">
    <value>com.mydb.jdbc.Driver</value>
  </property>
  <property name="url">
    <value>jdbc:mydb://server:port/mydb</value>
  </property>
  <property name="username">
    <value>root</value>
  </property>
</bean>



<bean id="dataManager" 
  class="example.JDBCDataManger">
  <property name="dataSource">
    <ref bean="myDataSource"/>
  </property>
</bean>



 

Exemplo comentado:

 

 


<%@ include file="headerCode.jsp" %><html:html locale="true">
<html:base/>
<head>
<title><bean:message key="application.title"/></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<table width="75%" border="1">
  <tr>
    <td><html:errors/></td>
  </tr>
</table>
<html:form action="/cadastroUsuario?metodo=cadastraUsuario" focus="login">

<table>	
	<tr>
		<td>
			<bean:message key="index.login"/>	: 
		</td>
		<td>
			<html:text property="login" />
		</td>
	</tr>	
	<tr>
		<td>
			<bean:message key="index.mail"/> : 	
		</td>
		<td>
			<html:text property="mail"/>
		</td>		
	</tr>
	<tr>
		<td>
			<bean:message key="index.senha" />: 
		</td>
		<td>
			<html:password property="senha" />
		</td>		
	</tr>	
	<table>
		<tr>	
			<td>
				<html:submit value="Enviar dados "/> 
			</td>
		</tr>
	</table>	
</table>
</html:form>
<logic:present name="lista_usuarios">
<table width="75%" border="1">
  <tr>
    <td>Nome</td>
    <td>E-mail</td>
    <td>Opção</td>
  </tr>
<logic:iterate id="usuarioCorrente" name="lista_usuarios" indexId="index">
	  <tr>
		<td><bean:write name="usuarioCorrente" property="login"/></td>
		<td><bean:write name="usuarioCorrente" property="mail"/></td>
		<td><a href='<html:rewrite page="/removeUsuario.do"/>?metodo=removeUsuario&

id=<bean:write name="usuarioCorrente" property="id"/>'>excluir</a></td>
	  </tr>    
 </logic:iterate>
</table>
</logic:present>
</body>


<bean:write name="usuarioCorrente" property="id"/>

 

Acrescente o servlet dele no web.xml:





	<!-- Spring Servlet-->
	
	<servlet>
	   	<servlet-name>SpringContextServlet</servlet-name>
	   	<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>	  
	  	<load-on-startup>2</load-on-startup>
	</servlet>


	

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>	
	<!-- ========================= Start of PERSISTENCE DEFINITIONS ========================= -->  	
	<!-- DataSource Definition -->
	<bean id="dataSource"  
    	class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
		<property name="driverClassName">
			<value>com.mysql.jdbc.Driver</value>
		</property>
		<property name="url">
			<value>jdbc:mysql:///daca</value>
		</property>
		<property name="username">
			<value>root</value>
		</property>
		<property name="password">
			<value></value>
		</property>
	</bean>	
	<!--  PErsistent Service Defintion -->
	<bean id="servicoPersistencia" class="daca.service.GerenteBanco">
		<property name="dataSource"><ref local="dataSource"/></property>
	</bean>
</beans>

 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class GerenteBanco implements PersistenteIF{	
	private DriverManagerDataSource dataSource;	
	public GerenteBanco(){	
	}
	/* (non-Javadoc)
	 * @see daca.service.PersistenteIF#save(daca.business.Usuario)
	 */
	public void save(Usuario usuario) {		
		try {
			Connection conn = dataSource.getConnection() ;		
			PreparedStatement statement = conn.prepareStatement("insert into usuario (login,senha,mail) values  (?,?,?)");
			statement.setString(1,usuario.getLogin());
			statement.setString(2,usuario.getSenha());
			statement.setString(3,usuario.getMail());
			statement.execute();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	}
	/* (non-Javadoc)
	 * @see daca.service.PersistenteIF#remove(java.lang.String)
	 */
	public void remove(String id) {
		try {			
			Connection conn = dataSource.getConnection();
			PreparedStatement statement = conn.prepareStatement("delete from usuario where id=?");
			statement.setString(1,id);			
			statement.execute();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	}
	/* (non-Javadoc)
	 * @see daca.service.PersistenteIF#selectTodos()
	 */
	public List selectTodos() {
		Connection conn = null;
		List lista = new ArrayList();
		try {			
			conn = dataSource.getConnection();
			ResultSet rs = conn.createStatement().executeQuery("select * from usuario");
			while(rs.next()){
				Usuario u = new Usuario();
				u.setId(rs.getInt(1));
				u.setLogin(rs.getString(2));				
				u.setSenha(rs.getString(3));
				u.setMail(rs.getString(4));
				lista.add(u);
			}
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return lista;
	}
	/**
	 * @return Returns the dataSource.
	 */
	public DriverManagerDataSource getDataSource() {
		return dataSource;
	}
	/**
	 * @param dataSource The dataSource to set.
	 */
	public void setDataSource(DriverManagerDataSource dataSource) {
		this.dataSource = dataSource;
	}
}


package daca.action;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
Import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import daca.actionform.UsuarioActionForm;
import daca.service.ServiceLocator;
import daca.util.DCConstants;
/**
* @author marcos
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class UsuarioAction extends DispatchAction {
/* (non-Javadoc)
* @see org.apache.struts.action.Action#perform(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
	public ActionForward cadastraUsuario(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse 
					response) throws IOException, ServletException {	
		UsuarioActionForm usuario = (UsuarioActionForm) form; 		
		ServiceLocator.singleton().getServicoUsuario().save(usuario.createUsuarioBussiness());
		request.setAttribute(DCConstants.LISTA_USUARIO, ServiceLocator.singleton().getServicoUsuario().selectTodos());
		return mapping.findForward(DCConstants.PAGINA_INICIAL);		
	}	
	/* (non-Javadoc)
	* @see org.apache.struts.action.Action#perform(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	*/
	public ActionForward removeUsuario(ActionMapping mapping, ActionForm form,
				HttpServletRequest request, HttpServletResponse response)
					throws IOException, ServletException {		
		String id = request.getParameter("id"); 
		if (id != null) {
			try {
				ServiceLocator.singleton().getServicoUsuario().remove(id); 
			}catch (Exception e) {
				ActionErrors errors = new ActionErrors();
				errors.add("erro_parametro_invalido",new ActionError("error.usuario.naoremovido"));
				super.saveErrors(request,errors);
			}		
		} 
		request.setAttribute(DCConstants.LISTA_USUARIO, ServiceLocator.singleton().getServicoUsuario().selectTodos());
		return mapping.findForward(DCConstants.PAGINA_INICIAL);
		
	}
}


Módulos