Out.print direto da class

12 respostas
M

Bom dia amigos. Estou com um probleminha aqui.
Tô criando um sistema, onde todo a montagem do HTML tem que estar dentro de uma class.
Teria que funcionar mais ou menos assim:

o JsP chama a função monta_tela() no class, e o class vai rodando out.print com o HTML e monta toda a estrutura HTML da tela.

Mas não estou conseguindo fazer o meu class executar o out.print, somente System.out.print o que não funciona.

Alguém poderia me postar um exemplo básico aqui que faça isso funcionar?
Obrigado

12 Respostas

A

Acho que isso pode te ajudar!!!

public void doGet(HttpServletRequest req, HttpServletResponse res) 
		throws ServletException, IOException {

		res.setContentType("text/html");
		PrintWriter out = res.getWriter();


		out.print("HTML");

		
		out.close();
	}
M

Mas como chamarei essa função do meu JSP?

A

vc tem que invocar a Servlet… ou através de um link, ou de um form…
depende do modo como vc for precisar.

M

mas o que eu precisava era o algo mais ou menos assim:

No JSP:

<%@page import="sistema.Html"%>

<%

monta_menu(); // o class imprime o HTML do menu superior
monta_frame();// o class imprime o HTML do frame

%>
A

dá um import no jsp da Servlet… daí chama um método da sua servlet que está fazendo a impressão.

M

Sou novato no java, poderia me exemplificar como eu chamaria o método do servlet?

M

Tô tentando assim, mas tá dando um erro. Alguém pode ajudar??

JSP

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html" language="java" import="java.sql.*"%>
<%@page import="outprintnoclass.classe"%>

<head>
<title>Teste</title>
<body>
<%
new classe().imprime();

%>
</body>
</head>

ServLet

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class classe extends HttpServlet{
	public void imprime(HttpServletRequest request, HttpServletResponse response)
    	throws IOException, ServletException {

        // vamos definir o tipo de conteúdo 
        // que será devolvido pelo response
	    response.setContentType("text/html");

        // pegamos o PrintWriter do response, através 
        // do qual escreveremos o conteúdo da pagina
        PrintWriter out = response.getWriter();

        // Agora vamos escrever o conteúdo da pagina
        out.println("<HTML>");
        out.println("<BODY>");
        out.println("<H1>TESTE</H1>");
        out.println("</BODY>");
        out.println("</HTML>");

        out.close();

    }
}

Erro

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 11 in the jsp file: /outprint no class/index.jsp
Generated servlet error:
The method imprime(HttpServletRequest, HttpServletResponse) in the type classe is not applicable for the arguments ()
S

Sugestão… use JSP para páginas HTML dinâmicas e use Servlets como controlers…

crie um JSP que monta o seu menu e inclua-o no cabeçalho de todas as suas páginas, assim o código fica muito mais legível e profissional.

M

“Samuel_Pessorrusso”:
Sugestão… use JSP para páginas HTML dinâmicas e use Servlets como controlers…

crie um JSP que monta o seu menu e inclua-o no cabeçalho de todas as suas páginas, assim o código fica muito mais legível e profissional.

Sim, é uma boa idéia, mas eu queria um jeito de criar o HTML dinâmicamente igual eu mencionei acima. Não só para menus e os frames, mas para o sistema geral em si. Por exemplo, quando o usuário acessa o menu vendas, o Class já monta todo o HTML deste módulo no meio do meu JSP como se fosse um include.

Trabalho assim com PHP e funciona muito bem. Pensei que tivesse jeito de fazer isso com o Java.

S

E tem…

tudo o que você faz com JSP você faz com Servlets e vice-versa. No final tudo é um Servlet.

Mas os dois tem propósitos diferentes. Use JSP para montar a sua página e Servlets para carregar dados ou fazer o processamento deles.

o que vc quer fazer:
um JSP chama um Servlet que monta um menu.
o que eu sugiro
um JSP da um include em outro JSP que monta o menu.

[]s

M

Não éra bem o que eu queria.
Eu queria que essa “Montagem do HTML” ficasse codificada dentro de uma Class e não aberta no JSP.

Será que tem jeito? :sad:

Só lembrando o que eu quero…

é mais ou menos isso abaixo

No Class

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class classe extends HttpServlet{
   public void imprime(HttpServletRequest request, HttpServletResponse response)
       throws IOException, ServletException {

        // vamos definir o tipo de conteúdo
        // que será devolvido pelo response
       response.setContentType("text/html");

        // pegamos o PrintWriter do response, através
        // do qual escreveremos o conteúdo da pagina
        PrintWriter out = response.getWriter();

        // Agora vamos escrever o conteúdo da pagina
        out.println("<HTML>");
        out.println("<BODY>");
        out.println("<H1>TESTE</H1>");
        out.println("</BODY>");
        out.println("</HTML>");

        out.close();

    }
}

no JSP:

Código:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html" language="java" import="java.sql.*"%>
<%@page import="outprintnoclass.classe"%>

<head>
<title>Teste</title>
<body>
<%
new classe().imprime();

%>
</body>
</head>
M

Pessoal, até que enfim isso funcionou.
Já postei a resposta no outro tópico e estou postando aqui também para servir de ajuda a outras pessoas que tem o mesmo problema. lá vai…

Arquivo index.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html" language="java" import="java.sql.*"%>
<%@page import="teste.Foo"%>
<%@page import="teste.Fonte"%>
<head>
<title>Imprimindo no class</title>
<body>
<%
new Foo( response.getWriter() );  
out.print("<br>");
new Foo( response.getWriter() );  

%>
</body>
</head>

Arquivo Foo.class

package teste;
import java.io.PrintWriter;

public class Foo {
    public PrintWriter out;

    public Foo(PrintWriter out) {
        out.print("<table border='0' cellpadding='0' cellspacing='0' width='100%' bgcolor='#F7F3EF' id='table1'>");
        out.print("<tr>");
        out.print("<td>");
        out.print("<p align='center'><b><font face='Tahoma'>Teste do marcos</font></b></td>");
        out.print("</tr>");
        out.print("<tr>");
        out.print("<td bgcolor='#FFFF00'>");
        out.print("<p align='center'><b><font face='Verdana' color='#FF0000'>Funcionou!!!!</font></b></td>");
        out.print("</tr>");
        out.print("</table>");
   } 
}

Lembrando que vc no meu caso eu coloquei o arquvo Foo.class dentro da pasta teste que está dentro de classes, porquê estou usando um package.

Se alguém tiver alguma dúvida nessa montagem que eu postei acima me avise.

Criado 18 de maio de 2005
Ultima resposta 13 de jun. de 2005
Respostas 12
Participantes 3