Java para Web
231 pág.

Java para Web


DisciplinaOrientação A Objetos184 materiais1.094 seguidores
Pré-visualização45 páginas
Teste a url http://localhost:8080/jspteste/qualquer_coisa.jsp
10.29 - Outro erro comum
Mesmo depois que você mapeou suas páginas de erro parece que o web.xml não existe, não houve redire-
cionamento nenhum?
Solução: Reinicie o Tomcat.
Capítulo 10 - Servlets - Exercício opcional - Página 94
Material do Treinamento Java para Desenvolvimento Web
10.30 - Servlet para adicionar contatos no banco
Imagine um método service que recebe três parâmetros: nome, email e endereço.
Sendo extremamente lógicos basta:
\u2022 Ler os parâmetros e preencher um objeto do tipo Contato;
\u2022 Instanciar ContatoDAO e adicionar tal objeto no banco;
\u2022 Mostrar uma mensagem de ok para o cliente.
Portanto vamos ao exercício...
10.31 - Exercício
1) Crie uma servlet chamada AdicionaContatoServlet no pacote br.com.caelum.servlet
2) Não se esqueça de estender a classe HttpServlet.
public class AdicionaContatoServlet extends HttpServlet {
3) Coloque o método service.
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
4) Use CTRL+SHIFT+O para fazer os imports necessários.
5) Crie um objeto do tipo Contato, chame-o de contato.
Contato contato = new Contato();
6) Através da variável request leia o parâmetro nome e use seu valor para chamar o setter do contato. Faça o
mesmo para os campos email e endereco.
String nome = request.getParameter("nome");
String endereco = request.getParameter("endereco");
String email = request.getParameter("email");
contato.setNome(nome);
contato.setEndereco(endereco);
contato.setEmail(email);
7) Crie um objeto do tipo ContatoDAO, chame-o de dao e utilize as variáveis contato e dao para adicionar o
contato ao banco de dados.
try{
ContatoDAO dao = new ContatoDAO();
dao.adiciona(contato);
} catch (SQLException e) {
Capítulo 10 - Servlets - Servlet para adicionar contatos no banco - Página 95
Material do Treinamento Java para Desenvolvimento Web
throw new ServletException(e);
}
8) Através do response.getWriter() mostre uma mensagem de ok para o cliente.
PrintWriter writer = response.getWriter();
writer.println(&quot;<html>&quot;);
writer.println(&quot;Contato Adicionado&quot;);
writer.println(&quot;</html>&quot;);
9) Mapeie a classe AdicionaContatoServlet no web.xml.
<servlet>
<servlet-name>adicionaContato</servlet-name>
<servlet-class>br.com.caelum.servlet.AdicionaContatoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>adicionaContato</servlet-name>
<url-pattern>/testa-adiciona</url-pattern>
</servlet-mapping>
10) Faça um arquivo WebContent/testa-adiciona-contato.jsp.
<html>
<body>
Digite seus dados e pressione o botão:<br/>
<form action=&quot;testa-adiciona&quot; method=&quot;POST&quot;>
Nome: <input type=&quot;text&quot; name=&quot;nome&quot;/><br/>
E-mail: <input type=&quot;text&quot; name=&quot;email&quot;/><br/>
Endereço: <input type=&quot;text&quot; name=&quot;endereco&quot;/><br/>
<input type=&quot;submit&quot; value=&quot;Enviar&quot;/>
</form>
</body>
</html>
11) Teste a URL http://localhost:8080/jspteste/testa-adiciona-contato.jsp
Capítulo 10 - Servlets - Exercício - Página 96
Material do Treinamento Java para Desenvolvimento Web
10.32 - Exercícios Opcionais
1) Faça agora uma Servlet para mostrar todos os contatos do banco e uma para remover os contatos do banco.
Capítulo 10 - Servlets - Exercícios Opcionais - Página 97
CAPÍTULO 11
Servlet e JSP API
\u201cVivemos todos sob o mesmo céu, mas nem todos temos o mesmo horizonte.\u201d
\u2013 Konrad Adenauer
Neste capítulo, você aprenderá a utilizar outros recursos avançados da API de servlets.
11.1 - Propriedades de páginas JSP
Como dizer qual o encoding de nossos arquivos jsp de uma maneira global? Como nos proteger de progra-
madores iniciantes em nossa equipe e desabilitar o código scriptlet? Como adicionar um arquivo antes e/ou
depois de todos os arquivos JSPs? Ou de todos os JSPs dentro de determinado diretório?
Para responder essas e outras perguntas, a API de jsp resolveu possibilitar definir algumas tags no nosso
arquivo web.xml.
Por exemplo, para desativar scripting (os scriptlets):
true
Ativar expression language (que já vem ativado):
<el-ignored>false</el-ignored>
Determinar o encoding dos arquivos de uma maneira genérica:
<page-encoding>UTF-8</page-encoding>
Incluir arquivos estaticamente antes e depois de seus JSPs:
<include-prelude>/antes.jspf</include-prelude>
<include-coda>/depois.jspf</include-coda>
O código a seguir mostra como aplicar tais características para todos os JSPs, repare que a tag url-pattern
determina o grupo de arquivos cujos atributos serão alterados:
<jsp-config>
<jsp-property-group>
<display-name>todos os jsps</display-name>
<description>configuracoes de todos os jsps</description>
<url-pattern>*.jsp</url-pattern>
true
<el-ignored>false</el-ignored>
<page-encoding>UTF-8</page-encoding>
<include-prelude>/antes.jspf</include-prelude>
98
Material do Treinamento Java para Desenvolvimento Web
<include-coda>/depois.jspf</include-coda>
</jsp-property-group>
</jsp-config>
11.2 - Exercícios
1) Configure o seu arquivo web.xml para que todos os JSPs não aceitem scriptlet, por exemplo:
<jsp-config>
<jsp-property-group>
<display-name>jsps sem script</display-name>
<url-pattern>*.jsp</url-pattern>
true
</jsp-property-group>
</jsp-config>
Além das tags usadas nesse exemplo, você pode adicionar qualquer uma das comentadas anteriormente.
2) Para que os jsp-config tenham efeito, precisamos reiniciar o Tomcat e limpar a pasta work do servidor.
Essa pasta é onde o Tomcat coloca os arquivos JSP compilados para melhor performance; apagá-la força o
servidor a recompilar tudo e aplicar as novas configurações.
Para limpar essa pasta, basta clicar com botão direito no Tomcat na aba Servers e escolher Clean Tomcat
work directory....
11.3 - Filtros
Um dos conceitos mais interessantes que existem na API de servlets é um design pattern que permite
executar tarefas independentemente do que aconteceu e do que vai acontecer, um filtro.
A idéia consiste em em um método de interceptação chamado doFilter. Esse método é responsável por
executar o que desejar e, a qualquer instante, pedir para a execução continuar, algo como:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws ServletException, IOException {
// executa o que desejar antes de continuar
// continua
chain.doFilter(request, response);
// executa o que desejar depois de continuar
}
Note que o código acima não sabe o que será executado ao chamar o método doFilter do FilterChain.
Pode ser que exista outro filtro para ser executado, pode ser que uma servlet seja executada, ou até mesmo um
Capítulo 11 - Servlet e JSP API - Exercícios - Página 99
Material do Treinamento Java para Desenvolvimento Web
JSP. Mas esse filtro não tem conhecimento e - acima de tudo - não está interessado no que vai acontecer ao
chamar esse método.
O uso clássico utilizado para filtros, e mostrado em exemplos de Java no mundo todo, é para logar informa-
ções referentes a requisição, abrir (antes) e fechar (depois) transações, descriptografar informações que foram
enviadas (antes) e criptografar informações antes de enviar (depois), ou ainda compactar os dados a serem
enviados ao cliente (depois).
No nosso exercício, utilizaremos o filtro para mostrar uma mensagem de log no sistema.
11.4 - Configuração de filtros
A configuração de filtros é feita de maneira semelhante a das servlets, com a principal diferença sendo que
eles vão ser executados antes daquilo que foi mapeado.
O exemplo a seguir mostra um filtro mapeado para todas as imagens de formato gif, isto é, sempre que uma
URL terminando em .gif for acessada, o filtro será executado antes.
<filter>
<filter-name>FiltraGif</filter-name>