Como fazer meu Servlet retornar dados a uma página

Olá a todos. Pela pergunta, vocês já devem ter percebido que sou novato na area de desenvolvimento Web.

Criei um projetinho simples de cadastro de notícias, só para brincar um pouco. Tenho uma página JSP na qual o usuário cadastra o autor e a notícia. A idéia era ter um Servlet que receba a requisição do cadastro da notícia, valide e responda para a mesma página, em alguns campos mais abaixo de onde foi preenchido os dados. O problema é que não estou conseguindo fazer com que o servlet responda a mesma página da requisição.

Código do Servlet:

[code]package br.com.Servlets;

import br.com.JavaBeans.Noticia;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class ServletCadNews extends HttpServlet{

@Override
public void init() throws ServletException{
    super.init();
}

@Override
public void destroy(){
    super.destroy();
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{

    resp.setContentType("text/html; charset=ISO-8859-1");

    String autor = req.getParameter("autor");
    String noticia = req.getParameter("noticia");
    Noticia n = new Noticia();
    n.setAutor(autor);
    n.setNoticia(noticia);

   //Aqui que não sei o que colocar para que este servlet responda à página...
    
    resp.sendRedirect("Home.jsp");

}

}[/code]

… e o código da página JSP:

[code]<%@page contentType=“text/html”
pageEncoding=“UTF-8”
import=“br.com.JavaBeans.Noticia”%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
http://www.w3.org/TR/html4/loose.dtd”>
<jsp:useBean id=“noticia” class=“br.com.JavaBeans.Noticia” />
<jsp:setProperty name=“noticia” property="*" />

<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>
<title>Notícias - Página Inicial</title>
</head>
<body>
<div id=“cabecalho” style=“position:absolute; width:800px; top:20px; background-color:green”>-</div>
<h3 style=“position:absolute; left:830px; top:1px”>Cadastro de notícias</h3>
<form name=“formCadastroNews” action=“ServletCadNews” method=“POST”>
<h4 style=“position:absolute; top:35px; left:20px”>Autor: </h4> <input type=“text” name=“autor” value="" style=“position:absolute; top:55px; left:100px; width:180px” />
<h4 style=“position:absolute; top:75px; left:20px”>Notícia</h4> <textarea name=“noticia” rows=“4” cols=“20” style=“position: absolute; left:100px; top:95px”></textarea>
<input type=“submit” value=“Cadastrar” name=“btCadastroNew” style=“position:absolute; top:200px”/>
<input type=“reset” value=“Limpar” name=“btLimpar” style=“position:absolute; top:200px; left:100px; width:80px”/>
</form>

    &lt;div id="cabecalho" style="position:absolute; width:800px; top:270px; background-color:green"&gt;-&lt;/div&gt;
    &lt;h3 style="position:absolute; left:830px; top:251px"&gt;Notícias Cadastradas&lt;/h3&gt;
    &lt;h4 style="font-size:18px ;position:absolute; top:290px; left:20px"&gt;Autor:&lt;/h4&gt;&lt;%= noticia.getAutor() %&gt;

&lt;/body&gt;

</html>[/code]

Obrigado pela atenção dos colegas.

Boa tarde.

hummmm…
Primeiro acho q todo mundo aqui deve recomendar um forward no lugar dum redirect.
Segundo, basta você adicionar as variáveis num lugar donde vc possa enxergar na outra página.

No seu caso usando o redirect, vc poderia usar a session.
Bastaria vc adicionar os “dados” na session dentro do servlet e resgatar os dados na session dentro da página.

=]
Simples assim.

Conceitualmente vc vai fazer isso:

HttpSession session = request.getSession(true); session.setAttribute("noticia",n);
E, na página vc usar

<% Noticia n = (Noticia)session.getAttribute("noticia"); %>

Na prática… existem formas melhores de se trabalhar com o MVC…
Por hora a parte teórica já te ajuda… rsrs**

Fiz o que você me sugeriu, mas ainda não obtive sucesso. Na hora de executar a página, o seguinte erro me é exibido no browser:

java.lang.NullPointerException org.apache.jsp.Home_jsp._jspService(Home_jsp.java:91) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

Meu metodo doPost do Servlet:

[code] protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{

    resp.setContentType("text/html; charset=ISO-8859-1");
    HttpSession sessao = req.getSession(true);

    String autor = req.getParameter("autor");
    String noticia = req.getParameter("noticia");
    Noticia n = new Noticia();
    n.setAutor(autor);
    n.setNoticia(noticia);

    sessao.setAttribute("CadastroNoticias", n);
     
    resp.sendRedirect("Home.jsp");

}[/code]

E minha página JSP:

[code]<jsp:useBean id=“n” class=“br.com.JavaBeans.Noticia” />
<jsp:setProperty name=“n” property="*" />
<% n = (Noticia)session.getAttribute(“CadastroNoticias”); %>

<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>
<title>Notícias - Página Inicial</title>
</head>
<body>
<div id=“cabecalho” style=“position:absolute; width:800px; top:20px; background-color:green”>-</div>
<h3 style=“position:absolute; left:830px; top:1px”>Cadastro de notícias</h3>
<form name=“formCadastroNews” action=“ServletCadNews” method=“POST”>
<h4 style=“position:absolute; top:35px; left:20px”>Autor: </h4> <input type=“text” name=“autor” value="" style=“position:absolute; top:55px; left:100px; width:180px” />
<h4 style=“position:absolute; top:75px; left:20px”>Notícia</h4> <textarea name=“noticia” rows=“4” cols=“20” style=“position: absolute; left:100px; top:95px”></textarea>
<input type=“submit” value=“Cadastrar” name=“btCadastroNew” style=“position:absolute; top:200px”/>
<input type=“reset” value=“Limpar” name=“btLimpar” style=“position:absolute; top:200px; left:100px; width:80px”/>
</form>

    &lt;div id="cabecalho" style="position:absolute; width:800px; top:270px; background-color:green"&gt;-&lt;/div&gt;
    &lt;h3 style="position:absolute; left:830px; top:251px"&gt;Notícias Cadastradas&lt;/h3&gt;
    &lt;h4 style="font-size:18px ;position:absolute; top:290px; left:20px"&gt;Autor:&lt;/h4&gt;&lt;%= n.getAutor() %&gt;

&lt;/body&gt;

</html>[/code]

O compilador me informa que o erro ocorre na página JSP, no seguinte trecho: <%= n.getAutor() %>

Se você ou mais alguém tiver outras sugestões, eu agradeço.

Bom,
Usando “Beans” é uma das formas práticas melhores pra vc fazer isso.
Tah avançado, hem?!

Mas, não era pra ter o <jsp:useBean id="n" class="br.com.JavaBeans.Noticia" /> <jsp:setProperty name="n" property="*" />
Crie a classe. Conceitualmente vc vai entender melhor. DEPOIS passe para o jsp:useBean.

que, no caso, criaria uma classe Notícia e preencheria suas propriedades de acordo com os parâmetros de requisição da página.

Uma coisa que eu esqueci [ que deve tar gerando a excessão ], é habilitar a sessão na página…

<%@ page session="true" %>

Com isso deve funcionar.

Outra coisa…
Use

RequestDispatcher dispatcher = request.getRequestDispatcher("/Home.jsp"); dispatcher.forward(request, response); no lugar de resp.sendRedirect("/Home.jsp");
é bem melhor pras próximas tarefas que virão depois dessa ai…
:wink: