JSP + Classe Java + AJAX

13 respostas
E

Olá…

Tenho um problema e queria ajuda para resolver…

Eu tenho um arquivo HTML com AJAX que faz requisição para uma página JSP. Quando eu envio a resposta da JSP à HTML, aparece todo o código html da resposta, com , e a resposta…Mas eu queria somente a resposta e não um arquivo html com ela.

Eu pensei em fazer uma classe que gera o resultado e a retorna à HTML, mas não sei fazer isso! Alguém me ajuda?

AplicaçãoAjax.html

<html>
	<head>
		<title></title>
		
		<script language = "javascript">

			var objetoAjax;

			function FuncaoCriaObjetoAjax()
			{
				if(window.ActiveXObject)
				{
					ajax = new ActiveXObject("Microsoft.XMLHTTP");
					alert("Internet Explorer");
				}

				else if(window.XMLHttpRequest)
				{
					ajax = new XMLHttpRequest();
					alert("Firefox");
				}
				
				else
				{
					alert("Navegador não suporta Ajax");
				}

			}

			function Atualizar()
			{
				if(ajax.readyState == 4)
				{
					document.getElementById('nome').value = ajax.responseText;
				}
			}

			function Abre_Documento_Passa_Parametro_Envia_Dados()
			{
				url = "GeradoraDados.jsp?nome="+document.getElementById('nome').value;
				ajax.open("GET", url, true);
				ajax.onreadystatechange = Atualizar;
				ajax.send();
			}
			
			function Condicao()
			{
				var primeironome = document.formulario.nome.value;

				if(primeironome == "")
				{
					window.alert("Valor não digitado!");
					return document.formulario.nome.focus();
				}

				else
				{
					Abre_Documento_Passa_Parametro_Envia_Dados();
				}				

				
			}			

		</script>
	</head> 

	<body onload = "FuncaoCriaObjetoAjax();">
		<form name = "formulario">
			<div>
				<input type = "text" id = "nome" />
				<input type = "button" id = "button1" value = "Botao" onClick = "javascript:Condicao();"/>
			</div>
		</form>
	</body>
</html>

GeradoraDados.jsp

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
	
</head>
<body>
	<%
		try
		{

			String numero = request.getParameter("nome"); 
			out.println(numero);
		}
			  


		catch(Exception e)
		{
			try
			{
				String valor = request.getParameter("nome");
			}

			catch(Exception ex)
			{
				ex.printStackTrace();			
			}

		}
		
	%>			
</body>
</html>

13 Respostas

J

Cara,
Tente em vez de retornar o html inteiro retornar JSON, dá uma olhada no jQuery.

E

Mas eu quero usar classe, que nem uma aplicação simples asp, onde se faz “Response.Write(argumentos)”, usando c#.

F
Deixe só isto na sua GeradoraDados.jsp. Apague todo o resto.
&lt;%  
         try  
         {  
   
             String numero = request.getParameter("nome");   
             out.println(numero);  
         }  
         catch(Exception e)  
         {  
             try  
             {  
                 String valor = request.getParameter("nome");  
             }  
   
             catch(Exception ex)  
             {  
                 ex.printStackTrace();             
             }  
   
         }  
           
     %&gt;
E

Primeiramente, obrigado…

Duas perguntas:

Por que não precisa do cabeçalho, dizendo que é uma página JSP?

Segunda: Como eu faria isso usando classe? Eu quero fazer uma classe realize o processamento e envie a resposta ao HTML, ou à página JSP que depois transfere a resposta ao HTML.

F
  1. O que vc queria era uma mensagem apenas. Vc num precisava de todo o texto html já que iria usá-lo (com a chamada AJAX) dentro de uma outra página que já contém o cabeçalho e tal.

  2. Use servlets
    Servlets são bons para fazer a ligação entre o JSP e as camadas de negócio.
    Faça com que o servlet receba a requisição, processe (chamando as camadas de negócio) e retorne o resultado.
    http://www.caelum.com.br/apostilas/

E
public class Servlet1 extends HttpServlet
{
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
          {
               ...
          }
}

Com essa classe eu consigo pegar as minha requisições e passar a outras funções ou classes para processamento…

Isso que você quis dizer?

Mas aí eu terei que mexer com arquivos xml, né?

F

Com essa classe eu consigo pegar as minha requisições e passar a outras funções ou classes para processamento…
Isso que você quis dizer?

Sim

Vai ter de mexer com o web.xml. Só ele. É um arquivo de configuração. Fácil de usar.

No ajax vc está fazendo:

O “nome” está dentro do objeto request.
no seu servlet vc vai pegar o nome assim:

String numero = request.getParameter("nome"); da mesma forma que fez no jsp.

e para imprimir o valor:

Vê aí se vai funcionar que eu não testei :slight_smile:

E

Tem diferença entre o método acima e PrintWriter out = response.getWriter() ?
Porque na JSP eu usei o objeto out e ele retornou à HTML a requisição!

F

response.getWriter() vai te retornar uma referência para um objeto do tipo PrintWriter

Então,

// fazer PrintWriter out = response.getWriter(); out.print("qualquer coisa"); // é igual a response.getWriter().print("qualquer coisa");

E

Então, a dúvida é da diferença entre:

e o response.getWriter();

Você usa o método getOutputStream() do objeto response e eu usei o método getWriter() do mesmo objeto!

F

Entendi.
No nosso caso tanto faz. A difereça entre um e o outro está no encoding utilizado.
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html

Só ão pode utilizar os dois alternadamente.
Escolha ou um ou outro.

E

Uma coisa…

A página HTML/AJAX é View na minha aplicação. A View assiste à Model e quando e última muda, a View muda também. A JSP é o Model nesse caso[1]? Quem faz o papel de controller[2] e se tivesse um banco de dados, esse[BD] seria o Model e a JSP o controller[3]?

Obrigado!

F

JSP/AJAX = VIEW = apresentação
Servlet = Controller = cria a interface entre a camada view e a model
Classes em java = Model = regras de negócio

Este é o esquema básico que eu sugiro.
Cada uma destas camadas pode ser dividida em tantas outras. Model pode ter uma camada de persistência em separado.
Podem existir cadeias de servlets…

O banco em si não entra neste esquema, mas aquelas classes que acessam o banco ficam dentro da camada de negócios ou na camada de persistência.

Basicamente Faça:

  • o JSP trocar dados com o usuário
  • o controller receber os dados do jsp, realiza algumas conversões e repassa para o model
  • o model processa e retorna para respostas para o controller
  • o controller realiza algumas conversões na resposta e as envia para a JSP adequada que pode ser a mesma q iniciou o processo ou outra.
Criado 26 de maio de 2010
Ultima resposta 28 de mai. de 2010
Respostas 13
Participantes 3