Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf ·...

15
Tutorial de NetBeans IDE Acessando banco de dados com Struts Data Source Configuraçãoes e Software Antes de começar a escrita do código, você tem que certificar-se que tem todo o software necessário e que seu projeto está ajustado corretamente. Instalando o software Antes que você comece, você necessita instalar o seguinte software em seu computador: NetBeans IDE 5.x (download ). Versão padrão 1.4.2 (download ) ou 5.0 Java (JDK™) (download ) Neste tutorial, você usa uma base de dados do Derby de exemplo que vem com o Sun Java System Application Server 8.2 Para começar origens de dados dos suportes trabalhar corretamente, você necessita fazer exame de uma etapa adicional. Você necessita commons- pooling.jar, commons-dbcp.jar,e common-collections.jar. 1. Ir à página do Apache Commons Download 2. Download commons-pooling.jar, commons-dbcp.jar,e common- collections.jar 3. Adicionar os JAR´s no diretório common/lib do Tomcat

Transcript of Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf ·...

Page 1: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 2: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 3: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 4: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 5: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 6: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 7: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 8: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 9: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 10: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 11: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 12: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 13: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 14: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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

Page 15: Tutorial de NetBeans IDEAcessando banco de dados com ...bacala/TEC4/struts_aula1-StrutsDAO.pdf · Tutorial de NetBeans IDEAcessando banco de dados com Struts Data Source ... Adicionar

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