Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf ·...
Transcript of Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf ·...
Tutorial de NetBeans IDE Acessandobanco de dados com Struts Data Source
Configuraccedilatildeoes e SoftwareAntes de comeccedilar a escrita do coacutedigo vocecirc tem que certificar-se que tem todo osoftware necessaacuterio e que seu projeto estaacute ajustado corretamente
Instalando o software
Antes que vocecirc comece vocecirc necessita instalar o seguinte software em seu computador
bull NetBeans IDE 5x (download)bull Versatildeo padratildeo 142 (download) ou 50 Java (JDKtrade) (download)bull Neste tutorial vocecirc usa uma base de dados do Derby de exemplo que vem com o
Sun Java System Application Server 82bull Para comeccedilar origens de dados dos suportes trabalhar corretamente vocecirc
necessita fazer exame de uma etapa adicional Vocecirc necessita commons-poolingjar commons-dbcpjar e common-collectionsjar
1 Ir agrave paacutegina do Apache Commons Download2 Download commons-poolingjar commons-dbcpjar e common-
collectionsjar3 Adicionar os JARacutes no diretoacuterio commonlib do Tomcat
1 - Trabalhando com Struts Data Source Um CenaacuteriosimplesPrimeiramente vocecirc define um Strutus Data Source Em seguida vocecirc cria um StrutsAction para acessar o Data Source Finalmente vocecirc cria uma pagina JSP pararendenizar os resultados
Craindo o Data Source
Adicionar o Data Source no arquivo struts-configxml Abaixo o coacutedigo a adicionarno arquivo
ltdata-sourcesgtltdata-source type=orgapachecommonsdbcpBasicDataSource
key=empTablegtltset-property property=driverClassName
value=orgapachederbyjdbcClientDriver gtltset-property property=url
value=jdbcderbylocalhost1527sample gtltset-property property=username value=app gtltset-property property=password value=app gtltset-property property=validationQuery value=SELECT FROM
CUSTOMER gtltdata-sourcegt
ltdata-sourcesgt
Nota O atributo KEY eacute muito importante Vocecirc iraacute utilizar na classe Struts Actionconforme a linha abaixo
dataSource = (DataSource) servletgetServletContext () getAttribute(ldquoempTablerdquo)
Alcanccedilando a origem dos dados dos suportes de uma classe da accedilatildeo dossuportes
1 Na janela dos projetos o clique com o botatildeo direito em commyappstrutsescolhe novo gt classe de Java e nomei-o Row A classe de Rowjavarepresentaraacute os registro da tabela No editor da fonte adicionar dois atributosname e city como mostrado abaixo
package commyappstruts
public class row
String nameString city
Creates a new instance of row public row()
2 Click com o botatildeo direito em qualquer lugar no corpo da classe e escolhaRefactor gt Encapsulate Fields
Manter os valores e o clique em Next
No fundo do IDE a janela de Refactoring propotildee as mudanccedilas
Manter os valores de defeito e clique em Do Refactoring
3 Preencher o contrutor como mostrado abaixo (o coacutedigo destacado abaixo eacute a uacutenicaparte que foi mudada)
package commyappstruts
public class row
private String nameprivate String city
Creates a new instance of Row public row(String name String city)
thisname = namethiscity = city
public String getName() return name
public void setName(String name) thisname = name
public String getCity() return city
public void setCity(String city) thiscity = city
4 Na janela dos projetos o clique com o botatildeo direito em commyappstrutsescolha New gt FileFolder Na categoria Web selecione Struts Action Nomear aclasse DataSourceConnectionActionjava da Action Struts
5 No editor da fonte preencher a classe de DataSourceConnectionActionjavacomo mostrado abaixo Onde relevante os comentaacuterios in-line foram adicionadosao coacutedigo abaixo para explicar sua finalidade
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession() Aqui o metodo de conecccedilatildeo ao Data Source eacute chamado customerList = getCustomers() Aqui adicionado o customerList no scope para utilizar no
jsp if(customerList = null)
sessionsetAttribute(allMyCustomers customerList)return (mappingfindForward(SUCCESS))
private ArrayList getCustomers()Connection conn = nullStatement stmt = nullPreparedStatement prpStmt = nullResultSet rs = nullStringBuffer resultString
try Aqui recuperamos o datasource atraves da chave
empTable mapeada em struts-configxml dataSource =
(DataSource)servletgetServletContext()getAttribute(empTable)
conn = dataSourcegetConnection()String sqlQuery = SELECT FROM CUSTOMERprpStmt = connprepareStatement(sqlQuery)rs = prpStmtexecuteQuery()
Aqui adicionameos o campo da posiccedilatildeo 4 do resultSet aoatributo name e o campo da posiccedilatildeo 7 ao atributo city
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
6 Na janela dos projetos expandir o Configuration Files e modificar a seccedilatildeo dosmappings no arquivo struts-configxml para registrar a nova Action Abaixoas partes destacadas de coacutedigo satildeo as uacutenicas partes de traccedilar da accedilatildeo que forammodificadas
ltaction-mappingsgt
ltaction input=loginFormjsp name=LoginActionForm path=loginscope=request
type=commyappstrutsDataSourceConnectionActiongt
ltforward name=success path=mydatasourceSuccessfuljspredirect=truegt
ltforward name=cancel path=loginCancelhtmlgtltactiongt
ltaction forward=loginOutjsp path=logoutgt
ltaction path=Welcome forward=welcomeStrutsjspgt
ltaction-mappingsgt
Usando Tag do Struts para rendenizar as informaccedilotildees
O Struts fornecem a tag library logic para paginas JSP O Tag da logic permite quevocecirc inclua a loacutegica de exposiccedilatildeo em uma paacutegina de JSP sem adicionar o coacutedigo Javacomo scriptlets Isto faz sua paacutegina de JSP mais legivel e permite um programador natildeo-Java trabalhar na vista de sua aplicaccedilatildeo O Strutus fornecem tambeacutem o bean tag librarypara recuperar e atribuir dados
1 Na pagina Web Pages criar uma nova JSP com o nomemydatasourceSuccessfuljsp para exibir os dados recuperados
2 Adicionar as seguintes taglib no alto da paacutegina
lt taglib uri=httpjakartaapacheorgstrutstags-logicprefix=logic gtlt taglib uri=httpjakartaapacheorgstrutstags-beanprefix=bean gt
Agora quando vocecirc pressiona o Ctrl-Espaccedilo em uma arquivo JSP todos as tagde logic tags e bean tags eacute indicados
3 Adicionar o texto ldquoSuccessful data connectionrdquo entre as tags lttitlegt elth1gtcomo mostrado abaixo
lthtmlgtltheadgt
ltmeta http-equiv=Content-Type content=texthtmlcharset=UTF-8gt
lttitlegtSuccessful data connectionlttitlegtltheadgt
ltbodygt
lth1gtSuccessful data connectionlth1gt
4 Abaixo da tag lth1gt adicione ltlogicnotPresentgt tag como mostrado abaixo
ltlogicnotPresent name = allMyCustomersgtlth2gtData source not in scopelth2gt
ltlogicnotPresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
5 Diretamente abaixo da tag ltlogicnotPresentgt adicione a tag do Strutsltlogicpresentgt with a tag do Struts ltlogicemptygt como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltlogicempty name = allMyCustomersgt
lth2gtData source in scope but no data foundlth2gtltlogicemptygt
ltlogicpresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
6 Diretamente abaixo das Tag precedentes adicionar a tag do strutsltlogicpresentgt Esta vez entretanto vocecirc estaacute indo dizer ao Struts o quefazer quando a origem dos dados dos suportes natildeo estaacute vazia Arrastar do HTMLPalette uma tabela para a paacutegina de JSP Utilize a tag do Strutsltlogiciterategt para iterar os dados e usar a tag do Struts ltbeanwritegtpara rendeizar os resultados como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltpgtThese are our usersltpgtlttable border=1gt
lttheadgtlttrgt
ltthgtNameltthgtltthgtCityltthgt
lttrgtlttheadgtlttbodygt
ltlogiciterate id=customer name=allMyCustomersgtlttrgt
lttdgtlttdgtlttdgtlttdgt
lttrgtlttrgt
lttdgtltbeanwrite name=customerproperty=name gtlttdgt
lttdgtltbeanwrite name=customerproperty=city gtlttdgt
lttrgtltlogiciterategt
lttbodygtlttablegt
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
1 - Trabalhando com Struts Data Source Um CenaacuteriosimplesPrimeiramente vocecirc define um Strutus Data Source Em seguida vocecirc cria um StrutsAction para acessar o Data Source Finalmente vocecirc cria uma pagina JSP pararendenizar os resultados
Craindo o Data Source
Adicionar o Data Source no arquivo struts-configxml Abaixo o coacutedigo a adicionarno arquivo
ltdata-sourcesgtltdata-source type=orgapachecommonsdbcpBasicDataSource
key=empTablegtltset-property property=driverClassName
value=orgapachederbyjdbcClientDriver gtltset-property property=url
value=jdbcderbylocalhost1527sample gtltset-property property=username value=app gtltset-property property=password value=app gtltset-property property=validationQuery value=SELECT FROM
CUSTOMER gtltdata-sourcegt
ltdata-sourcesgt
Nota O atributo KEY eacute muito importante Vocecirc iraacute utilizar na classe Struts Actionconforme a linha abaixo
dataSource = (DataSource) servletgetServletContext () getAttribute(ldquoempTablerdquo)
Alcanccedilando a origem dos dados dos suportes de uma classe da accedilatildeo dossuportes
1 Na janela dos projetos o clique com o botatildeo direito em commyappstrutsescolhe novo gt classe de Java e nomei-o Row A classe de Rowjavarepresentaraacute os registro da tabela No editor da fonte adicionar dois atributosname e city como mostrado abaixo
package commyappstruts
public class row
String nameString city
Creates a new instance of row public row()
2 Click com o botatildeo direito em qualquer lugar no corpo da classe e escolhaRefactor gt Encapsulate Fields
Manter os valores e o clique em Next
No fundo do IDE a janela de Refactoring propotildee as mudanccedilas
Manter os valores de defeito e clique em Do Refactoring
3 Preencher o contrutor como mostrado abaixo (o coacutedigo destacado abaixo eacute a uacutenicaparte que foi mudada)
package commyappstruts
public class row
private String nameprivate String city
Creates a new instance of Row public row(String name String city)
thisname = namethiscity = city
public String getName() return name
public void setName(String name) thisname = name
public String getCity() return city
public void setCity(String city) thiscity = city
4 Na janela dos projetos o clique com o botatildeo direito em commyappstrutsescolha New gt FileFolder Na categoria Web selecione Struts Action Nomear aclasse DataSourceConnectionActionjava da Action Struts
5 No editor da fonte preencher a classe de DataSourceConnectionActionjavacomo mostrado abaixo Onde relevante os comentaacuterios in-line foram adicionadosao coacutedigo abaixo para explicar sua finalidade
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession() Aqui o metodo de conecccedilatildeo ao Data Source eacute chamado customerList = getCustomers() Aqui adicionado o customerList no scope para utilizar no
jsp if(customerList = null)
sessionsetAttribute(allMyCustomers customerList)return (mappingfindForward(SUCCESS))
private ArrayList getCustomers()Connection conn = nullStatement stmt = nullPreparedStatement prpStmt = nullResultSet rs = nullStringBuffer resultString
try Aqui recuperamos o datasource atraves da chave
empTable mapeada em struts-configxml dataSource =
(DataSource)servletgetServletContext()getAttribute(empTable)
conn = dataSourcegetConnection()String sqlQuery = SELECT FROM CUSTOMERprpStmt = connprepareStatement(sqlQuery)rs = prpStmtexecuteQuery()
Aqui adicionameos o campo da posiccedilatildeo 4 do resultSet aoatributo name e o campo da posiccedilatildeo 7 ao atributo city
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
6 Na janela dos projetos expandir o Configuration Files e modificar a seccedilatildeo dosmappings no arquivo struts-configxml para registrar a nova Action Abaixoas partes destacadas de coacutedigo satildeo as uacutenicas partes de traccedilar da accedilatildeo que forammodificadas
ltaction-mappingsgt
ltaction input=loginFormjsp name=LoginActionForm path=loginscope=request
type=commyappstrutsDataSourceConnectionActiongt
ltforward name=success path=mydatasourceSuccessfuljspredirect=truegt
ltforward name=cancel path=loginCancelhtmlgtltactiongt
ltaction forward=loginOutjsp path=logoutgt
ltaction path=Welcome forward=welcomeStrutsjspgt
ltaction-mappingsgt
Usando Tag do Struts para rendenizar as informaccedilotildees
O Struts fornecem a tag library logic para paginas JSP O Tag da logic permite quevocecirc inclua a loacutegica de exposiccedilatildeo em uma paacutegina de JSP sem adicionar o coacutedigo Javacomo scriptlets Isto faz sua paacutegina de JSP mais legivel e permite um programador natildeo-Java trabalhar na vista de sua aplicaccedilatildeo O Strutus fornecem tambeacutem o bean tag librarypara recuperar e atribuir dados
1 Na pagina Web Pages criar uma nova JSP com o nomemydatasourceSuccessfuljsp para exibir os dados recuperados
2 Adicionar as seguintes taglib no alto da paacutegina
lt taglib uri=httpjakartaapacheorgstrutstags-logicprefix=logic gtlt taglib uri=httpjakartaapacheorgstrutstags-beanprefix=bean gt
Agora quando vocecirc pressiona o Ctrl-Espaccedilo em uma arquivo JSP todos as tagde logic tags e bean tags eacute indicados
3 Adicionar o texto ldquoSuccessful data connectionrdquo entre as tags lttitlegt elth1gtcomo mostrado abaixo
lthtmlgtltheadgt
ltmeta http-equiv=Content-Type content=texthtmlcharset=UTF-8gt
lttitlegtSuccessful data connectionlttitlegtltheadgt
ltbodygt
lth1gtSuccessful data connectionlth1gt
4 Abaixo da tag lth1gt adicione ltlogicnotPresentgt tag como mostrado abaixo
ltlogicnotPresent name = allMyCustomersgtlth2gtData source not in scopelth2gt
ltlogicnotPresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
5 Diretamente abaixo da tag ltlogicnotPresentgt adicione a tag do Strutsltlogicpresentgt with a tag do Struts ltlogicemptygt como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltlogicempty name = allMyCustomersgt
lth2gtData source in scope but no data foundlth2gtltlogicemptygt
ltlogicpresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
6 Diretamente abaixo das Tag precedentes adicionar a tag do strutsltlogicpresentgt Esta vez entretanto vocecirc estaacute indo dizer ao Struts o quefazer quando a origem dos dados dos suportes natildeo estaacute vazia Arrastar do HTMLPalette uma tabela para a paacutegina de JSP Utilize a tag do Strutsltlogiciterategt para iterar os dados e usar a tag do Struts ltbeanwritegtpara rendeizar os resultados como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltpgtThese are our usersltpgtlttable border=1gt
lttheadgtlttrgt
ltthgtNameltthgtltthgtCityltthgt
lttrgtlttheadgtlttbodygt
ltlogiciterate id=customer name=allMyCustomersgtlttrgt
lttdgtlttdgtlttdgtlttdgt
lttrgtlttrgt
lttdgtltbeanwrite name=customerproperty=name gtlttdgt
lttdgtltbeanwrite name=customerproperty=city gtlttdgt
lttrgtltlogiciterategt
lttbodygtlttablegt
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
Creates a new instance of row public row()
2 Click com o botatildeo direito em qualquer lugar no corpo da classe e escolhaRefactor gt Encapsulate Fields
Manter os valores e o clique em Next
No fundo do IDE a janela de Refactoring propotildee as mudanccedilas
Manter os valores de defeito e clique em Do Refactoring
3 Preencher o contrutor como mostrado abaixo (o coacutedigo destacado abaixo eacute a uacutenicaparte que foi mudada)
package commyappstruts
public class row
private String nameprivate String city
Creates a new instance of Row public row(String name String city)
thisname = namethiscity = city
public String getName() return name
public void setName(String name) thisname = name
public String getCity() return city
public void setCity(String city) thiscity = city
4 Na janela dos projetos o clique com o botatildeo direito em commyappstrutsescolha New gt FileFolder Na categoria Web selecione Struts Action Nomear aclasse DataSourceConnectionActionjava da Action Struts
5 No editor da fonte preencher a classe de DataSourceConnectionActionjavacomo mostrado abaixo Onde relevante os comentaacuterios in-line foram adicionadosao coacutedigo abaixo para explicar sua finalidade
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession() Aqui o metodo de conecccedilatildeo ao Data Source eacute chamado customerList = getCustomers() Aqui adicionado o customerList no scope para utilizar no
jsp if(customerList = null)
sessionsetAttribute(allMyCustomers customerList)return (mappingfindForward(SUCCESS))
private ArrayList getCustomers()Connection conn = nullStatement stmt = nullPreparedStatement prpStmt = nullResultSet rs = nullStringBuffer resultString
try Aqui recuperamos o datasource atraves da chave
empTable mapeada em struts-configxml dataSource =
(DataSource)servletgetServletContext()getAttribute(empTable)
conn = dataSourcegetConnection()String sqlQuery = SELECT FROM CUSTOMERprpStmt = connprepareStatement(sqlQuery)rs = prpStmtexecuteQuery()
Aqui adicionameos o campo da posiccedilatildeo 4 do resultSet aoatributo name e o campo da posiccedilatildeo 7 ao atributo city
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
6 Na janela dos projetos expandir o Configuration Files e modificar a seccedilatildeo dosmappings no arquivo struts-configxml para registrar a nova Action Abaixoas partes destacadas de coacutedigo satildeo as uacutenicas partes de traccedilar da accedilatildeo que forammodificadas
ltaction-mappingsgt
ltaction input=loginFormjsp name=LoginActionForm path=loginscope=request
type=commyappstrutsDataSourceConnectionActiongt
ltforward name=success path=mydatasourceSuccessfuljspredirect=truegt
ltforward name=cancel path=loginCancelhtmlgtltactiongt
ltaction forward=loginOutjsp path=logoutgt
ltaction path=Welcome forward=welcomeStrutsjspgt
ltaction-mappingsgt
Usando Tag do Struts para rendenizar as informaccedilotildees
O Struts fornecem a tag library logic para paginas JSP O Tag da logic permite quevocecirc inclua a loacutegica de exposiccedilatildeo em uma paacutegina de JSP sem adicionar o coacutedigo Javacomo scriptlets Isto faz sua paacutegina de JSP mais legivel e permite um programador natildeo-Java trabalhar na vista de sua aplicaccedilatildeo O Strutus fornecem tambeacutem o bean tag librarypara recuperar e atribuir dados
1 Na pagina Web Pages criar uma nova JSP com o nomemydatasourceSuccessfuljsp para exibir os dados recuperados
2 Adicionar as seguintes taglib no alto da paacutegina
lt taglib uri=httpjakartaapacheorgstrutstags-logicprefix=logic gtlt taglib uri=httpjakartaapacheorgstrutstags-beanprefix=bean gt
Agora quando vocecirc pressiona o Ctrl-Espaccedilo em uma arquivo JSP todos as tagde logic tags e bean tags eacute indicados
3 Adicionar o texto ldquoSuccessful data connectionrdquo entre as tags lttitlegt elth1gtcomo mostrado abaixo
lthtmlgtltheadgt
ltmeta http-equiv=Content-Type content=texthtmlcharset=UTF-8gt
lttitlegtSuccessful data connectionlttitlegtltheadgt
ltbodygt
lth1gtSuccessful data connectionlth1gt
4 Abaixo da tag lth1gt adicione ltlogicnotPresentgt tag como mostrado abaixo
ltlogicnotPresent name = allMyCustomersgtlth2gtData source not in scopelth2gt
ltlogicnotPresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
5 Diretamente abaixo da tag ltlogicnotPresentgt adicione a tag do Strutsltlogicpresentgt with a tag do Struts ltlogicemptygt como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltlogicempty name = allMyCustomersgt
lth2gtData source in scope but no data foundlth2gtltlogicemptygt
ltlogicpresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
6 Diretamente abaixo das Tag precedentes adicionar a tag do strutsltlogicpresentgt Esta vez entretanto vocecirc estaacute indo dizer ao Struts o quefazer quando a origem dos dados dos suportes natildeo estaacute vazia Arrastar do HTMLPalette uma tabela para a paacutegina de JSP Utilize a tag do Strutsltlogiciterategt para iterar os dados e usar a tag do Struts ltbeanwritegtpara rendeizar os resultados como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltpgtThese are our usersltpgtlttable border=1gt
lttheadgtlttrgt
ltthgtNameltthgtltthgtCityltthgt
lttrgtlttheadgtlttbodygt
ltlogiciterate id=customer name=allMyCustomersgtlttrgt
lttdgtlttdgtlttdgtlttdgt
lttrgtlttrgt
lttdgtltbeanwrite name=customerproperty=name gtlttdgt
lttdgtltbeanwrite name=customerproperty=city gtlttdgt
lttrgtltlogiciterategt
lttbodygtlttablegt
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
Manter os valores de defeito e clique em Do Refactoring
3 Preencher o contrutor como mostrado abaixo (o coacutedigo destacado abaixo eacute a uacutenicaparte que foi mudada)
package commyappstruts
public class row
private String nameprivate String city
Creates a new instance of Row public row(String name String city)
thisname = namethiscity = city
public String getName() return name
public void setName(String name) thisname = name
public String getCity() return city
public void setCity(String city) thiscity = city
4 Na janela dos projetos o clique com o botatildeo direito em commyappstrutsescolha New gt FileFolder Na categoria Web selecione Struts Action Nomear aclasse DataSourceConnectionActionjava da Action Struts
5 No editor da fonte preencher a classe de DataSourceConnectionActionjavacomo mostrado abaixo Onde relevante os comentaacuterios in-line foram adicionadosao coacutedigo abaixo para explicar sua finalidade
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession() Aqui o metodo de conecccedilatildeo ao Data Source eacute chamado customerList = getCustomers() Aqui adicionado o customerList no scope para utilizar no
jsp if(customerList = null)
sessionsetAttribute(allMyCustomers customerList)return (mappingfindForward(SUCCESS))
private ArrayList getCustomers()Connection conn = nullStatement stmt = nullPreparedStatement prpStmt = nullResultSet rs = nullStringBuffer resultString
try Aqui recuperamos o datasource atraves da chave
empTable mapeada em struts-configxml dataSource =
(DataSource)servletgetServletContext()getAttribute(empTable)
conn = dataSourcegetConnection()String sqlQuery = SELECT FROM CUSTOMERprpStmt = connprepareStatement(sqlQuery)rs = prpStmtexecuteQuery()
Aqui adicionameos o campo da posiccedilatildeo 4 do resultSet aoatributo name e o campo da posiccedilatildeo 7 ao atributo city
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
6 Na janela dos projetos expandir o Configuration Files e modificar a seccedilatildeo dosmappings no arquivo struts-configxml para registrar a nova Action Abaixoas partes destacadas de coacutedigo satildeo as uacutenicas partes de traccedilar da accedilatildeo que forammodificadas
ltaction-mappingsgt
ltaction input=loginFormjsp name=LoginActionForm path=loginscope=request
type=commyappstrutsDataSourceConnectionActiongt
ltforward name=success path=mydatasourceSuccessfuljspredirect=truegt
ltforward name=cancel path=loginCancelhtmlgtltactiongt
ltaction forward=loginOutjsp path=logoutgt
ltaction path=Welcome forward=welcomeStrutsjspgt
ltaction-mappingsgt
Usando Tag do Struts para rendenizar as informaccedilotildees
O Struts fornecem a tag library logic para paginas JSP O Tag da logic permite quevocecirc inclua a loacutegica de exposiccedilatildeo em uma paacutegina de JSP sem adicionar o coacutedigo Javacomo scriptlets Isto faz sua paacutegina de JSP mais legivel e permite um programador natildeo-Java trabalhar na vista de sua aplicaccedilatildeo O Strutus fornecem tambeacutem o bean tag librarypara recuperar e atribuir dados
1 Na pagina Web Pages criar uma nova JSP com o nomemydatasourceSuccessfuljsp para exibir os dados recuperados
2 Adicionar as seguintes taglib no alto da paacutegina
lt taglib uri=httpjakartaapacheorgstrutstags-logicprefix=logic gtlt taglib uri=httpjakartaapacheorgstrutstags-beanprefix=bean gt
Agora quando vocecirc pressiona o Ctrl-Espaccedilo em uma arquivo JSP todos as tagde logic tags e bean tags eacute indicados
3 Adicionar o texto ldquoSuccessful data connectionrdquo entre as tags lttitlegt elth1gtcomo mostrado abaixo
lthtmlgtltheadgt
ltmeta http-equiv=Content-Type content=texthtmlcharset=UTF-8gt
lttitlegtSuccessful data connectionlttitlegtltheadgt
ltbodygt
lth1gtSuccessful data connectionlth1gt
4 Abaixo da tag lth1gt adicione ltlogicnotPresentgt tag como mostrado abaixo
ltlogicnotPresent name = allMyCustomersgtlth2gtData source not in scopelth2gt
ltlogicnotPresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
5 Diretamente abaixo da tag ltlogicnotPresentgt adicione a tag do Strutsltlogicpresentgt with a tag do Struts ltlogicemptygt como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltlogicempty name = allMyCustomersgt
lth2gtData source in scope but no data foundlth2gtltlogicemptygt
ltlogicpresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
6 Diretamente abaixo das Tag precedentes adicionar a tag do strutsltlogicpresentgt Esta vez entretanto vocecirc estaacute indo dizer ao Struts o quefazer quando a origem dos dados dos suportes natildeo estaacute vazia Arrastar do HTMLPalette uma tabela para a paacutegina de JSP Utilize a tag do Strutsltlogiciterategt para iterar os dados e usar a tag do Struts ltbeanwritegtpara rendeizar os resultados como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltpgtThese are our usersltpgtlttable border=1gt
lttheadgtlttrgt
ltthgtNameltthgtltthgtCityltthgt
lttrgtlttheadgtlttbodygt
ltlogiciterate id=customer name=allMyCustomersgtlttrgt
lttdgtlttdgtlttdgtlttdgt
lttrgtlttrgt
lttdgtltbeanwrite name=customerproperty=name gtlttdgt
lttdgtltbeanwrite name=customerproperty=city gtlttdgt
lttrgtltlogiciterategt
lttbodygtlttablegt
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
4 Na janela dos projetos o clique com o botatildeo direito em commyappstrutsescolha New gt FileFolder Na categoria Web selecione Struts Action Nomear aclasse DataSourceConnectionActionjava da Action Struts
5 No editor da fonte preencher a classe de DataSourceConnectionActionjavacomo mostrado abaixo Onde relevante os comentaacuterios in-line foram adicionadosao coacutedigo abaixo para explicar sua finalidade
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession() Aqui o metodo de conecccedilatildeo ao Data Source eacute chamado customerList = getCustomers() Aqui adicionado o customerList no scope para utilizar no
jsp if(customerList = null)
sessionsetAttribute(allMyCustomers customerList)return (mappingfindForward(SUCCESS))
private ArrayList getCustomers()Connection conn = nullStatement stmt = nullPreparedStatement prpStmt = nullResultSet rs = nullStringBuffer resultString
try Aqui recuperamos o datasource atraves da chave
empTable mapeada em struts-configxml dataSource =
(DataSource)servletgetServletContext()getAttribute(empTable)
conn = dataSourcegetConnection()String sqlQuery = SELECT FROM CUSTOMERprpStmt = connprepareStatement(sqlQuery)rs = prpStmtexecuteQuery()
Aqui adicionameos o campo da posiccedilatildeo 4 do resultSet aoatributo name e o campo da posiccedilatildeo 7 ao atributo city
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
6 Na janela dos projetos expandir o Configuration Files e modificar a seccedilatildeo dosmappings no arquivo struts-configxml para registrar a nova Action Abaixoas partes destacadas de coacutedigo satildeo as uacutenicas partes de traccedilar da accedilatildeo que forammodificadas
ltaction-mappingsgt
ltaction input=loginFormjsp name=LoginActionForm path=loginscope=request
type=commyappstrutsDataSourceConnectionActiongt
ltforward name=success path=mydatasourceSuccessfuljspredirect=truegt
ltforward name=cancel path=loginCancelhtmlgtltactiongt
ltaction forward=loginOutjsp path=logoutgt
ltaction path=Welcome forward=welcomeStrutsjspgt
ltaction-mappingsgt
Usando Tag do Struts para rendenizar as informaccedilotildees
O Struts fornecem a tag library logic para paginas JSP O Tag da logic permite quevocecirc inclua a loacutegica de exposiccedilatildeo em uma paacutegina de JSP sem adicionar o coacutedigo Javacomo scriptlets Isto faz sua paacutegina de JSP mais legivel e permite um programador natildeo-Java trabalhar na vista de sua aplicaccedilatildeo O Strutus fornecem tambeacutem o bean tag librarypara recuperar e atribuir dados
1 Na pagina Web Pages criar uma nova JSP com o nomemydatasourceSuccessfuljsp para exibir os dados recuperados
2 Adicionar as seguintes taglib no alto da paacutegina
lt taglib uri=httpjakartaapacheorgstrutstags-logicprefix=logic gtlt taglib uri=httpjakartaapacheorgstrutstags-beanprefix=bean gt
Agora quando vocecirc pressiona o Ctrl-Espaccedilo em uma arquivo JSP todos as tagde logic tags e bean tags eacute indicados
3 Adicionar o texto ldquoSuccessful data connectionrdquo entre as tags lttitlegt elth1gtcomo mostrado abaixo
lthtmlgtltheadgt
ltmeta http-equiv=Content-Type content=texthtmlcharset=UTF-8gt
lttitlegtSuccessful data connectionlttitlegtltheadgt
ltbodygt
lth1gtSuccessful data connectionlth1gt
4 Abaixo da tag lth1gt adicione ltlogicnotPresentgt tag como mostrado abaixo
ltlogicnotPresent name = allMyCustomersgtlth2gtData source not in scopelth2gt
ltlogicnotPresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
5 Diretamente abaixo da tag ltlogicnotPresentgt adicione a tag do Strutsltlogicpresentgt with a tag do Struts ltlogicemptygt como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltlogicempty name = allMyCustomersgt
lth2gtData source in scope but no data foundlth2gtltlogicemptygt
ltlogicpresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
6 Diretamente abaixo das Tag precedentes adicionar a tag do strutsltlogicpresentgt Esta vez entretanto vocecirc estaacute indo dizer ao Struts o quefazer quando a origem dos dados dos suportes natildeo estaacute vazia Arrastar do HTMLPalette uma tabela para a paacutegina de JSP Utilize a tag do Strutsltlogiciterategt para iterar os dados e usar a tag do Struts ltbeanwritegtpara rendeizar os resultados como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltpgtThese are our usersltpgtlttable border=1gt
lttheadgtlttrgt
ltthgtNameltthgtltthgtCityltthgt
lttrgtlttheadgtlttbodygt
ltlogiciterate id=customer name=allMyCustomersgtlttrgt
lttdgtlttdgtlttdgtlttdgt
lttrgtlttrgt
lttdgtltbeanwrite name=customerproperty=name gtlttdgt
lttdgtltbeanwrite name=customerproperty=city gtlttdgt
lttrgtltlogiciterategt
lttbodygtlttablegt
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
Aqui adicionameos o campo da posiccedilatildeo 4 do resultSet aoatributo name e o campo da posiccedilatildeo 7 ao atributo city
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
6 Na janela dos projetos expandir o Configuration Files e modificar a seccedilatildeo dosmappings no arquivo struts-configxml para registrar a nova Action Abaixoas partes destacadas de coacutedigo satildeo as uacutenicas partes de traccedilar da accedilatildeo que forammodificadas
ltaction-mappingsgt
ltaction input=loginFormjsp name=LoginActionForm path=loginscope=request
type=commyappstrutsDataSourceConnectionActiongt
ltforward name=success path=mydatasourceSuccessfuljspredirect=truegt
ltforward name=cancel path=loginCancelhtmlgtltactiongt
ltaction forward=loginOutjsp path=logoutgt
ltaction path=Welcome forward=welcomeStrutsjspgt
ltaction-mappingsgt
Usando Tag do Struts para rendenizar as informaccedilotildees
O Struts fornecem a tag library logic para paginas JSP O Tag da logic permite quevocecirc inclua a loacutegica de exposiccedilatildeo em uma paacutegina de JSP sem adicionar o coacutedigo Javacomo scriptlets Isto faz sua paacutegina de JSP mais legivel e permite um programador natildeo-Java trabalhar na vista de sua aplicaccedilatildeo O Strutus fornecem tambeacutem o bean tag librarypara recuperar e atribuir dados
1 Na pagina Web Pages criar uma nova JSP com o nomemydatasourceSuccessfuljsp para exibir os dados recuperados
2 Adicionar as seguintes taglib no alto da paacutegina
lt taglib uri=httpjakartaapacheorgstrutstags-logicprefix=logic gtlt taglib uri=httpjakartaapacheorgstrutstags-beanprefix=bean gt
Agora quando vocecirc pressiona o Ctrl-Espaccedilo em uma arquivo JSP todos as tagde logic tags e bean tags eacute indicados
3 Adicionar o texto ldquoSuccessful data connectionrdquo entre as tags lttitlegt elth1gtcomo mostrado abaixo
lthtmlgtltheadgt
ltmeta http-equiv=Content-Type content=texthtmlcharset=UTF-8gt
lttitlegtSuccessful data connectionlttitlegtltheadgt
ltbodygt
lth1gtSuccessful data connectionlth1gt
4 Abaixo da tag lth1gt adicione ltlogicnotPresentgt tag como mostrado abaixo
ltlogicnotPresent name = allMyCustomersgtlth2gtData source not in scopelth2gt
ltlogicnotPresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
5 Diretamente abaixo da tag ltlogicnotPresentgt adicione a tag do Strutsltlogicpresentgt with a tag do Struts ltlogicemptygt como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltlogicempty name = allMyCustomersgt
lth2gtData source in scope but no data foundlth2gtltlogicemptygt
ltlogicpresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
6 Diretamente abaixo das Tag precedentes adicionar a tag do strutsltlogicpresentgt Esta vez entretanto vocecirc estaacute indo dizer ao Struts o quefazer quando a origem dos dados dos suportes natildeo estaacute vazia Arrastar do HTMLPalette uma tabela para a paacutegina de JSP Utilize a tag do Strutsltlogiciterategt para iterar os dados e usar a tag do Struts ltbeanwritegtpara rendeizar os resultados como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltpgtThese are our usersltpgtlttable border=1gt
lttheadgtlttrgt
ltthgtNameltthgtltthgtCityltthgt
lttrgtlttheadgtlttbodygt
ltlogiciterate id=customer name=allMyCustomersgtlttrgt
lttdgtlttdgtlttdgtlttdgt
lttrgtlttrgt
lttdgtltbeanwrite name=customerproperty=name gtlttdgt
lttdgtltbeanwrite name=customerproperty=city gtlttdgt
lttrgtltlogiciterategt
lttbodygtlttablegt
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
Usando Tag do Struts para rendenizar as informaccedilotildees
O Struts fornecem a tag library logic para paginas JSP O Tag da logic permite quevocecirc inclua a loacutegica de exposiccedilatildeo em uma paacutegina de JSP sem adicionar o coacutedigo Javacomo scriptlets Isto faz sua paacutegina de JSP mais legivel e permite um programador natildeo-Java trabalhar na vista de sua aplicaccedilatildeo O Strutus fornecem tambeacutem o bean tag librarypara recuperar e atribuir dados
1 Na pagina Web Pages criar uma nova JSP com o nomemydatasourceSuccessfuljsp para exibir os dados recuperados
2 Adicionar as seguintes taglib no alto da paacutegina
lt taglib uri=httpjakartaapacheorgstrutstags-logicprefix=logic gtlt taglib uri=httpjakartaapacheorgstrutstags-beanprefix=bean gt
Agora quando vocecirc pressiona o Ctrl-Espaccedilo em uma arquivo JSP todos as tagde logic tags e bean tags eacute indicados
3 Adicionar o texto ldquoSuccessful data connectionrdquo entre as tags lttitlegt elth1gtcomo mostrado abaixo
lthtmlgtltheadgt
ltmeta http-equiv=Content-Type content=texthtmlcharset=UTF-8gt
lttitlegtSuccessful data connectionlttitlegtltheadgt
ltbodygt
lth1gtSuccessful data connectionlth1gt
4 Abaixo da tag lth1gt adicione ltlogicnotPresentgt tag como mostrado abaixo
ltlogicnotPresent name = allMyCustomersgtlth2gtData source not in scopelth2gt
ltlogicnotPresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
5 Diretamente abaixo da tag ltlogicnotPresentgt adicione a tag do Strutsltlogicpresentgt with a tag do Struts ltlogicemptygt como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltlogicempty name = allMyCustomersgt
lth2gtData source in scope but no data foundlth2gtltlogicemptygt
ltlogicpresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
6 Diretamente abaixo das Tag precedentes adicionar a tag do strutsltlogicpresentgt Esta vez entretanto vocecirc estaacute indo dizer ao Struts o quefazer quando a origem dos dados dos suportes natildeo estaacute vazia Arrastar do HTMLPalette uma tabela para a paacutegina de JSP Utilize a tag do Strutsltlogiciterategt para iterar os dados e usar a tag do Struts ltbeanwritegtpara rendeizar os resultados como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltpgtThese are our usersltpgtlttable border=1gt
lttheadgtlttrgt
ltthgtNameltthgtltthgtCityltthgt
lttrgtlttheadgtlttbodygt
ltlogiciterate id=customer name=allMyCustomersgtlttrgt
lttdgtlttdgtlttdgtlttdgt
lttrgtlttrgt
lttdgtltbeanwrite name=customerproperty=name gtlttdgt
lttdgtltbeanwrite name=customerproperty=city gtlttdgt
lttrgtltlogiciterategt
lttbodygtlttablegt
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
ltbodygt
lth1gtSuccessful data connectionlth1gt
4 Abaixo da tag lth1gt adicione ltlogicnotPresentgt tag como mostrado abaixo
ltlogicnotPresent name = allMyCustomersgtlth2gtData source not in scopelth2gt
ltlogicnotPresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
5 Diretamente abaixo da tag ltlogicnotPresentgt adicione a tag do Strutsltlogicpresentgt with a tag do Struts ltlogicemptygt como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltlogicempty name = allMyCustomersgt
lth2gtData source in scope but no data foundlth2gtltlogicemptygt
ltlogicpresentgt
Pressionar o Ctrl-Espaccedilo dentro do Tag para ler o Javadoc relacionado
6 Diretamente abaixo das Tag precedentes adicionar a tag do strutsltlogicpresentgt Esta vez entretanto vocecirc estaacute indo dizer ao Struts o quefazer quando a origem dos dados dos suportes natildeo estaacute vazia Arrastar do HTMLPalette uma tabela para a paacutegina de JSP Utilize a tag do Strutsltlogiciterategt para iterar os dados e usar a tag do Struts ltbeanwritegtpara rendeizar os resultados como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltpgtThese are our usersltpgtlttable border=1gt
lttheadgtlttrgt
ltthgtNameltthgtltthgtCityltthgt
lttrgtlttheadgtlttbodygt
ltlogiciterate id=customer name=allMyCustomersgtlttrgt
lttdgtlttdgtlttdgtlttdgt
lttrgtlttrgt
lttdgtltbeanwrite name=customerproperty=name gtlttdgt
lttdgtltbeanwrite name=customerproperty=city gtlttdgt
lttrgtltlogiciterategt
lttbodygtlttablegt
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
6 Diretamente abaixo das Tag precedentes adicionar a tag do strutsltlogicpresentgt Esta vez entretanto vocecirc estaacute indo dizer ao Struts o quefazer quando a origem dos dados dos suportes natildeo estaacute vazia Arrastar do HTMLPalette uma tabela para a paacutegina de JSP Utilize a tag do Strutsltlogiciterategt para iterar os dados e usar a tag do Struts ltbeanwritegtpara rendeizar os resultados como mostrado abaixo
ltlogicpresent name = allMyCustomersgtltpgtThese are our usersltpgtlttable border=1gt
lttheadgtlttrgt
ltthgtNameltthgtltthgtCityltthgt
lttrgtlttheadgtlttbodygt
ltlogiciterate id=customer name=allMyCustomersgtlttrgt
lttdgtlttdgtlttdgtlttdgt
lttrgtlttrgt
lttdgtltbeanwrite name=customerproperty=name gtlttdgt
lttdgtltbeanwrite name=customerproperty=city gtlttdgt
lttrgtltlogiciterategt
lttbodygtlttablegt
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
ltlogicpresentgt
ltbodygt
Pressionar o Ctrl-Espaccedilo dentro dos Tag para ler o Javadoc relacionado
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
7 Certificar-se de que o corpo da paacutegina de JSP olhe agora como segue
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
Deploy e ExecutandoA IDE usa o ANT para realizar o depoly e a execuccedilatildeo da aplicaccedilatildeo WEB A IDE gerou ocertificado da configuraccedilatildeo quando vocecirc criou a aplicaccedilatildeo baseando o nas opccedilotildees quevocecirc incorporou ao wizard novo do projeto e agrave caixa de diaacutelogo das propriedades doprojeto do projeto Click no projeto e selecione Build and run
2 - Usando DAO para Encapsular o coacutedigo de acesso dabase de dadosAtualmente o coacutedigo que alcanccedila a base de dados eacute contido dentro da classe Action doStruts Mesmo que esta seja uma soluccedilatildeo trabalhando natildeo eacute oacutetima Todo o coacutedigo deacesso da base de dados deve ser encapsulado atraacutes das classes do API do negoacuteciousando o padratildeo do objeto do acesso dos dados (DAO) Para detalhes deste padratildeo verCore J2EE Patterns - Data Access Object
Realizar o refactoring da aplicaccedilatildeo de modo que o coacutedigo de acesso dos dados sejaencapsulado vocecirc necessita fazer o seguinte
bull Criar uma fabrica de DAObull Criar uma interface que define os metodos necessariosbull Criar o DAO implementando a interface e adicionando o acesso a base de dados bull Adicionar o acesso ao DAO na Action do Strutsbull
As instruccedilotildees detalhadas para cada uma das etapas acima satildeo fornecidas abaixo
1 Para criar a faacutebrica criar uma classe nova conforme o coacutedigo abaixo
package commyappstruts
import javasqlConnection
public class DAOFactory
Creates a new instance of DAOFactory public DAOFactory()
public static UserDAO createUserDAO(Connection connection)return new DerbyUserDAO(connection)
2 Para criar a interface criar uma interface nova conforme o coacutedigo abaixo
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
package commyappstruts
import javautilArrayList
public interface UserDAO public ArrayList getCustomers()
3 Para criar o DAO criacutear uma classe nova que implemente interface conforme ocoacutedigo abaixo
package commyappstruts
import javasqlConnectionimport javasqlPreparedStatementimport javasqlResultSetimport javasqlSQLExceptionimport javautilArrayListimport javaxsqlDataSource
public class DerbyUserDAO implements UserDAO
private Connection connectionprivate DataSource dataSource
Creates a new instance of DerbyUserDAO public DerbyUserDAO(Connection connection)
thisconnection = connection
public ArrayList getCustomers()ArrayList customerList = new ArrayList()try
String sqlQuery = SELECT FROM CUSTOMERPreparedStatement prpStmt =
connectionprepareStatement(sqlQuery)ResultSet rs = prpStmtexecuteQuery()
Here we put field 4 (the name) and field 7 (the city)in the customerList
while (rsnext()) customerListadd(new row(rsgetString(4)
rsgetString(7)))rsclose()
catch ( SQLException e ) Systemerrprintln(SQL Exception occured while accessing
the table )eprintStackTrace()
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
return null
catch ( Exception e ) eprintStackTrace()return null
return customerList
4 Em DataSourceConnectionActionjava vocecirc pode agora remover o meacutetodogetCustomers () porque agora seraacute fornecido pelo DAO
Em seguida vocecirc necessita reescrever esta linha
customerList = getCustomers ()
Substituir a linha com este snippet do coacutedigo
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
A classe inteira de DataSourceConnectionActionjava deve agora ser como ocoacutedigo abaixo
package commyappstruts
import javaxservlethttpimport orgapachestrutsactionimport javasqlimport javautilArrayListimport javaxsql
public class DataSourceConnectionAction extends Action private DataSource dataSourcepublic ArrayList customerList = new ArrayList()private final static String SUCCESS = success
public ActionForward execute(ActionMapping mapping ActionFormform
HttpServletRequest request HttpServletResponse response)throws Exception
HttpSession session = requestgetSession()
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes
Here the method that connects to the datasource is called
dataSource =(DataSource)servletgetServletContext()getAttribute(empTable)
Connection conn = dataSourcegetConnection()UserDAO dao = DAOFactorycreateUserDAO(conn)customerList = daogetCustomers()
Here we put the customerList in scope so that we can useit in the JSP page
if(customerList = null)sessionsetAttribute(allMyCustomers customerList)
return (mappingfindForward(SUCCESS))
5 Build e run O resultado deve ser o mesmo que antes