Java para Web
231 pág.

Java para Web


DisciplinaOrientação A Objetos184 materiais1.094 seguidores
Pré-visualização45 páginas
JDBC (DAO etc), driver do MySQL, JSTL etc. Enfim, tudo que fizémos até agora mais as configurações do
Struts.
a) No Eclipse, clique com o botão direito em cima do nome do projeto struts e vá em Import;
b) Selecione General/Archive File e clique em Next;
c) Selecione o arquivo projeto-struts.zip na pasta Desktop/caelum/21;
d) Clique em Finish e confirme qualquer overwrite de arquivo.
Dê uma navegada nas pastas e veja as configurações que foram feitas. Em especial, veja os XMLs na pasta
WEB-INF.
O web.xml já foi configurado para nós com a servlet controladora do struts. Repare que isso é muito parecido
com nosso framework do capítulo anterior. Como antes, não vamos precisar ficar configurando mais nada
nesse XML.
<web-app>
<servlet>
<servlet-name>testeDeStruts</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
Capítulo 14 - Struts Framework - Exercícios - Página 119
Material do Treinamento Java para Desenvolvimento Web
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>testeDeStruts</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
Perceba também que há outro XML, o struts-config.xml. Esse arquivo é um arquivo específico do Struts e
é lá que colocaremos as configurações do framework. Por enquanto, ele está apenas com o esqueleto:
<struts-config>
</struts-config>
3) Clique da direita no nome do seu projeto, escolha Run As > Run on Server.
Escolha o servidor que você já tem configurado no seu Eclipse e clique em Finish
4) O Web Browser do Eclipse irá aparecer. Teste a URL http://localhost:8080/struts/ e você verá uma men-
sagem de teste.
Para saber mais: Configurando o projeto no Tomcat sem o plugin do Eclipse
Se você não usa o plugin do WTP, não se esqueça de configurar o Projeto no Tomcat da mesma forma que
vimos no capítulo de JSP! Para isso, crie um arquivo:
<diretorio_do_tomcat>/conf/Catalina/localhost/struts.xml
Coloque nele o seguinte conteúdo:
<Context path=&quot;/struts&quot; docBase=&quot;/home/usuario/workspace/struts/web/&quot; reloadable=&quot;true&quot;>
</Context>
Você obteve a tela seguinte?
Capítulo 14 - Struts Framework - Exercícios - Página 120
Material do Treinamento Java para Desenvolvimento Web
Isso pode ter ocorrido porque algum de seus arquivos XML foi digitado errado ou porque no seu sistema
não está configurado para que liste os arquivos dos diretórios. Se no seu caso foi porque não está configurado
a listagem é um bom sinal, a listagem de arquivos dos diretórios pode trazer riscos ao seu sistemas em caso de
usuários maliciosos.
Mas onde configurar para listar ou não meus arquivos? No arquivo web.xml do Tomcat que está na pasta
$CATALINA_HOME/conf/. Mude o seguinte trecho do arquivo:
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
Deixe <param-value>false</param-value> caso não queira a listagem e
<param-value>true</param-value>, caso contrário.
14.4 - Uma ação Struts
No nosso exemplo anterior de MVC utilizávamos uma interface comum a todas as nossas lógicas de negócio.
Com o Struts temos uma classe chamada Action que iremos estender para implementar nossas lógicas.
Muitos programadores recomendam como boa prática não colocar a lógica de negócio na Action, e sim em
uma nova classe que é chamada por ela.
Você deve reescrever o método execute, como no exemplo abaixo:
package br.com.caelum.struts.action;
// imports....
public class TesteSimplesAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// ...
}
}
Capítulo 14 - Struts Framework - Uma ação Struts - Página 121
Material do Treinamento Java para Desenvolvimento Web
Por enquanto, temos quatro parâmetros, dois que já conhecemos, e um retorno. Esses três itens serão
explicados em breve, passo a passo para evitar complicações uma vez que é nesse ponto que os programadores
sentem uma certa dificuldade inicial com o Struts.
Primeiro, precisamos devolver um objeto do tipo ActionForward, que indica para onde o usuário deve ser
redirecionado ao término da execução daquela ação. Pode ser para outra ação, ou, normalmente, para um .jsp.
Poderíamos retornar algo do tipo:
return new ActionForward(&quot;/exemplo.jsp&quot;);
Mas isso não é recomendado. Por quê? Uma vez que colocamos o nome do arquivo jsp na nossa camada
de lógica de negócios, estamos criando uma ligação muito forte entre as mesmas. Qualquer alteração no nome
do arquivo resulta em um grande esforço para encontrar todos os pontos que se referenciam a tal lugar.
Portanto, essa não será a solução que utilizaremos. Partimos para algo que o Struts facilita desde o início
de seu projeto: desejamos retornar \u201cok&quot;! Lembre-se disso.
É muito importante ressaltar que o Struts pode instanciar apenas uma Action de cada tipo, fazendo com que
você ainda tenha de se preocupar com problemas de sincronismo, já que existe a possibilidade de existir mais
de uma Thread acessando o mesmo objeto Action ao mesmo tempo.
O nosso JSP final será algo bem simples para esse exemplo:
<html>
Minha primeira página usando o Struts!
</html>
14.5 - Configurando a ação no struts-config.xml
Voltamos ao arquivo struts-config.xml: esse arquivo irá mapear as URLs que os usuários acessarem
(chamados de path) e as classes (chamadas de type). Sendo assim, nada mais natural e elegante do que
mapearmos o path /teste para a classe TesteSimples.
Atenção: o nome do path não precisa ser igual ao nome da classe! Isto é um mapeamento!
<struts-config>
<action-mappings>
<action path=&quot;/teste&quot; type=&quot;br.com.caelum.struts.action.TesteSimples&quot;>
<forward name=&quot;ok&quot; path=&quot;/exemplo.jsp&quot;/>
</action>
</action-mappings>
</struts-config>
Dentro da tag action, colocamos uma tag forward. Essa tag define um redirecionamento com um apelido
(atributo name) e o caminho (path). No código, quando fazemos mapping.findForward(\u201cok\u201d), o Struts procura
um forward com apelido \u201cok\u201d e devolve o objeto ActionForward correspondente (no caso, redirecionando para
exemplo.jsp). Desta forma, podemos trabalhar com nossas lógicas sem nos atrelarmos muito à camada de
visualização.
O parâmetro path de action indica qual URL vai acionar essa ação, no caso será o /teste.do, pois para
acessar o struts precisamos da terminação .do no nosso caso.
Capítulo 14 - Struts Framework - Configurando a ação no struts-config.xml - Página 122
Material do Treinamento Java para Desenvolvimento Web
14.6 - Exercícios: TesteSimplesAction
1) Crie sua primeira ação do Struts.
a) Crie uma classe chamada TesteSimplesAction no pacote br.com.caelum.struts.action.
b) Faça sua classe estender Action (do Struts!).
c) Utilize CTRL+SHIFT+O para importar a classe.
d) Escreva o método execute e implemente o conteúdo do mesmo, retornando o resultado exemplo
Você pode fazer o Eclipse gerar para você a assinatura do método. Basta escrever execute dentro da
classe e apertar Ctrl+espaço. Cuidado para gerar o método que recebe exatamente os parâmetros
como mostrados abaixo.
Agora implemente o conteúdo do método como abaixo:
public class TesteSimplesAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println(&quot;Executando o código da lógica de negócios...&quot;);
return mapping.findForward(&quot;ok&quot;);
}
}
2) Crie seu arquivo exemplo.jsp dentro do diretório WebContent.
<html>
Minha primeira página usando o Struts!
</html>
3) Abra o seu arquivo struts-config.xml e configure sua ação dentro da tag action-mappings, que vem antes
do message-resources.
<struts-config>
<action-mappings>
<action path=&quot;/teste&quot; type=&quot;br.com.caelum.struts.action.TesteSimplesAction&quot;>