Java para Web
231 pág.

Java para Web


DisciplinaOrientação A Objetos184 materiais1.094 seguidores
Pré-visualização45 páginas
através
do writer, o cabeçalho é enviado ao cliente e impede o redirecionamento, enquanto que se você chamar o
método getWriter e depois o getOutputStream ocorrerá uma exception pois não se deve enviar bytes depois
de ter aberto um fluxo de caracteres (o encoding já foi definido, não faz mais sentido enviar bytes que não
representem caracteres).
Para mais informações sobre bytes e caracteres, Writers e OutputStreams, confira a nossa apostila de Java
e Orientação a Objetos.
10.9 - Parâmetros
Toda requisição pode vir acompanhada de parâmetros que costumam ser de extrema importância no de-
senvolvimento para a web.
No método GET é comum ter uma URL que termine com \u201c?parametro=valor\u201d enquanto no método POST
podemos enviar todos os parâmetros através de um formulário ou simplesmente escondidos da URL.
Independente do método chamado, os valores dos parâmetros podem ser lidos com o seguinte código, que
lê o valor da \u201cidade":
request.getParameter("idade");
Sendo assim, a servlet a seguir recebe um parâmetro chamado idade e o imprime como resposta:
Capítulo 10 - Servlets - OutputStream x PrintWriter - Página 77
Material do Treinamento Java para Desenvolvimento Web
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// recebe o writer
PrintWriter writer = response.getWriter();
// escreve o texto
writer.println(&quot;<html>&quot;);
writer.println(&quot;Caelum explica o parametro: &quot; + request.getParameter(&quot;idade&quot;));
writer.println(&quot;</html>&quot;);
}
O método getParameter retorna uma String, portanto todo tipo de tratamento deve ser feito manualmente.
Caso o parâmetro não tenha sido passado pela requisição esse método retorna null.
Para enviar tais dados podemos utilizar um link com parâmetro através de uma requisição do tipo get, ou
um formulário com campos de texto (método get ou post).
Repare que em um arquivo jsp, as variáveis request e response também existem, portanto você pode
escrever o mesmo código do request.getParameter dentro de um jsp. Faz sentido fazer isso? Scriptlet? Ler
parâmetro em jsp? Código java no meio do código html?
10.10 - Exercícios: TestaParametros
1) Crie a servlet TestaParametros no pacote br.com.caelum.servlet.
2) Estenda HttpServlet. Utilize o CTRL+SHIFT+O para importar HttpServlet.
3) Escreva o código do método service. Lembre de usar o truque do Ctrl+espaço para gerar a assinatura do
método.
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// recebe o writer
PrintWriter writer = response.getWriter();
// escreve o texto
writer.println(&quot;<html>&quot;);
writer.println(&quot;Caelum explica o parametro: &quot; + request.getParameter(&quot;idade&quot;));
writer.println(&quot;</html>&quot;);
}
4) Abra o arquivo web.xml e mapeie a servlet TestaParametros para a URL /testa-idade. Acrescente o mape-
amento abaixo logo após o mapeamento da outra servlet que fizémos.
<servlet>
<servlet-name>idade</servlet-name>
<servlet-class>br.com.caelum.servlet.TestaParametros</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>idade</servlet-name>
Capítulo 10 - Servlets - Exercícios: TestaParametros - Página 78
Material do Treinamento Java para Desenvolvimento Web
<url-pattern>/testa-idade</url-pattern>
</servlet-mapping>
5) Crie um arquivo chamado testa-get.jsp:
<html>
<body>
<a href=&quot;/jspteste/testa-idade?idade=24&quot;>Testa Parâmetros</a>
</body>
</html>
6) Crie um arquivo chamado testa-post.jsp:
<html>
<body>
<form action=&quot;/jspteste/testa-idade&quot; method=&quot;POST&quot;>
<input type=&quot;text&quot; name=&quot;idade&quot; value=&quot;24&quot;/>
<input type=&quot;submit&quot; value=&quot;Enviar&quot;/>
</form>
</body>
</html>
7) Teste a URL http://localhost:8080/jspteste/testa-get.jsp
8) Teste a URL http://localhost:8080/jspteste/testa-post.jsp
Capítulo 10 - Servlets - Exercícios: TestaParametros - Página 79
Material do Treinamento Java para Desenvolvimento Web
Para saber mais: new Servlet
Na perspectiva Java EE, é possível criar uma nova servlet usando um wizard. É só clicar com o
botão direito na pasta src, e então em New -> Servlet. Depois de escolher o nome da classe e o
pacote, podemos clicar em Next e configurar o nome e o mapeamento da servlet (o equivalente
ao servlet mapping do xml), e ao clicar em Next de novo podemos escolher quais métodos do
HttpServlet serão sobrescritos. Ao clicar em Finish a classe da Servlet já vai estar criada, com os
métodos selecionados em branco, e a servlet já vai estar configurada no web.xml.
10.11 - Exercício opcional
1) Crie uma nova servlet que utiliza o método getParameterNames para mostrar todos os parâmetros que foram
enviados.
Todos os parâmetros
O método request.getParameterNames() retorna uma Enumeration com todos os nomes de parâ-
metros enviados.
10.12 - doGet, doPost e outros
Por causa da arquitetura da API das servlets, o método service é o ponto inicial de uma nova requisição e
delega o processo para o representante adequado, de acordo com a requisição.
A implementação de nenhum dos métodos abaixo é obrigatória se a sua servlet estender a classe
HttpServlet.
Outros dois métodos comuns na API de servlets e no protocolo HTTP são os que tratam requisiões especi-
fícas de um método como o GET ou o POST:
\u2022 doGet \u2013 responsável pelos métodos GET
protected void doGet(HttpServletRequest, HttpServletResponse)
throws ServletException, IOException {
}
\u2022 doPost \u2013 responsável pelo POST
protected void doPost(HttpServletRequest,HttpServletResponse)
throws ServletException, IOException{
}
10.13 - Conversão de parâmetros
A maior complicação (e chatice) dos parâmetros enviados através do protocolo HTTP é que eles estão
limitados a Strings, portanto devem ser convertidos para o tipo desejado.
Capítulo 10 - Servlets - Exercício opcional - Página 80
Material do Treinamento Java para Desenvolvimento Web
Essa tarefa fica repetitiva e chata se feita manualmente conforme mostramos no código a seguir. Utilizando
bibliotecas famosas como Struts, Webwork etc essa tradução fica transparente (ou separada), mais simples e
menos perigosa.
package br.com.caelum.servlet;
//imports aqui
public class TestaConversaoParametros extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// recebe o writer
PrintWriter writer = response.getWriter();
// escreve o texto
writer.println(&quot;<html>&quot;);
int idade = Integer.parseInt(request.getParameter(&quot;idade&quot;));
writer.println(&quot;Caelum explica o parametro: &quot; + idade);
writer.println(&quot;</html>&quot;);
}
}
10.14 - Exercícios opcionais
1) Crie a classe TestaConversaoParametros no pacote br.com.caelum.servlet.
2) Escreva o código que vimos anteriormente:
package br.com.caelum.servlet;
//faça imports aqui, use CTRL+SHIFT+O
public class TestaConversaoParametros extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// recebe o writer
PrintWriter writer = response.getWriter();
// escreve o texto
writer.println(&quot;<html>&quot;);
int idade = Integer.parseInt(request.getParameter(&quot;idade&quot;));
writer.println(&quot;Caelum explica o parametro: &quot; + idade);
writer.println(&quot;</html>&quot;);
}
}
3) Abra o arquivo web.xml e mapeie a servlet TestaConversaoParametros para a URL conversor-idade.
<servlet>
<servlet-name>conversor</servlet-name>
Capítulo 10 - Servlets - Exercícios opcionais - Página 81
Material do Treinamento Java para Desenvolvimento Web
<servlet-class>br.com.caelum.servlet.TestaConversaoParametros
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>conversor</servlet-name>
<url-pattern>/conversor-idade</url-pattern>
</servlet-mapping>
4) Crie um arquivo chamado converte-idade.jsp
<html>
<body>
<form action=&quot;/jspteste/conversor-idade&quot;