Envio de dados de jsp para o servlet ?!?!

8 respostas
Ticianne

Olá!!

Gostaria de saber: como ocorre o envio de dados de um jsp para o servlet que este chama??

A aplicação é a seguinte: uma página de busca em jsp possui os campos de busca e tal, dá chama um servlet que, com os dados que o usuario digitou no jsp, vai realizar uma busca no bd.

onde exatamente é feita essa “passagem” de dados do jsp para o servlet poder realizar a busca??

Obrigada!!! :smiley: :smiley:

8 Respostas

StriderMGBR

O servlet pode receber os parametros atraves do metodo get e post ou ate mesmo por sessão!!
Trate o seu servlet como se ele fosse uma paginas JSP normal!!

Para recuperar valores passado por get e post, basta vc utilizar o comando
request.getParameter(“nomeDoCampoHTML”);

Abraços!!

Ticianne

ah ok…

mas

como entao eu posso utilizar esses dados recebidos atraves do getParameter pra fazer uma busca??

Roger75

Vamos supor que você tenha uma jsp :

<html><body>
<form method="POST" action="SelectBeer.do">
    Color:
    <select name="color">
       <option>light
       <option>amber
    </select>

O SelectBeer.do significa que ao submeter o form irá chamar esta action

No Deployment Descriptor você associa este nome ao do Servlet que irá chamar:

<servlet>
   <servlet-name>Ch3 Beer</servlet-name>
   <servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Ch3 Beer</servlet-name>
    <url-mapping>/SelectBeer.do</url-pattern>
</servlet-mapping>

Aí na classe Servlet você pega o campo "color" que vem como parâmetro:

package com.example.web;

public class BeerSelect extends HttpServlet{

     public void doPost(...)

         String c=request.getParameter("color");
     }
}
StriderMGBR

Assim:
a jsp

...
<body>
<form name="teste" method="post" action"meuServlet">
<input type="text" name="nome">
...
</form>
</body>

o servlet

...
protected void doPost(HttpServletRequest request, HttpServletResponse response)
	throws ServletException{

    String nome = request.getParameter("nome");
    String sql = "SELECT * FROM Cadastro WHERE nome = '"+nome+"';";
    ...
}

Espero ter ajudado!!

Abraços!!

J
Complementando a resposta do Roger75, se você não estiver usando um framework como o JAKARTA Struts (o que, creio, tenha sido a idéia de Roger75, visto que ele falou sobre "actions"), existem alguns caminhos que você pode trilhar para solucionar esse problema:

O mais "elegante", em minha opinião, é construir uma user taglib que tome os parâmetros da página e os processe.

No código da tagclass, você poderá colocar algo como:
String atributoString = pageContext.getRequest().getParameter("nome_do_atributo_String");

int atributoInt = pageContext.getRequest().getParameter("nome_do_atributo_int");

e assim por diante...
Se não estiver familiarizada com a criação de user taglibs, pode acessar os dois (excelentes) artigos de Sue Spielman no ONJava:

Designing JSP Custom Tag Libraries (leia primeiro)
http://www.onjava.com/pub/a/onjava/2000/12/15/jsp_custom_tags.html

e

Advanced Features of JSP Custom Tag Libraries (não deixe de ler) http://www.onjava.com/pub/a/onjava/2001/01/18/jsptags.html

Claro, existem outras formas, como o uso da tag <jsp:usebean>, que você poderá usar em conjunto com um Java Bean para capturar os dados da página, mas eu, particularmente, prefiro "colocar a mão na massa" com uma custom tag (acho que gosto de estar no controle das coisas ;) ).

Espero ter sido de ajuda.
Ticianne

Sei.

Entendi oq vc propos para a busca, muito obrigada.

Mas, se permitem, ainda tenho outra pergunta:

se encaixam os dados recebidos dessa forma em uma busca como esta:

final String consultaBasica = "SELECT id, generaltitle, generalaggregationlevel, generalinstitution, generalresponsible, " + "lifecyclecontributedate, technicalmediatype, educationallearningobjecttype from lominvente WHERE generallanguage LIKE ? " + "&& generalaggregationlevel LIKE ? && generalinstitution LIKE ? " + "&& technicalmediatype LIKE ? && technicaldeliverymode LIKE ? " + "&& educationallearningobjecttype LIKE ?"

ainda não consegui entender essa busca…

:slight_smile:

Pedrosa

Nesse caso se aplica da seguite forma, essas interrogações são equivalentes aos parametros, pois nesse caso esta sendo usado PreparedStatement.

Ex:

PreparedStatement stmt = this.connection.prepareStatement(sql);
stmt.setString(1, par1);
stmt.setInt(2, par2);
stmt.setString(3, par3);
stmt.setString(4, par4);

Npte que vc seta o tipo, e o driver se vira não tendo que se preocupar com as aspas na query.

Pedrosa

Entendeu?

Criado 11 de agosto de 2006
Ultima resposta 11 de ago. de 2006
Respostas 8
Participantes 5