[RESOLVIDO]Dúvida JSP e Servlets

3 respostas
DouglasJavaK
Estou utilizando o exemplo de exercício do Livro "Use a Cabeça JSP e Servlets" e no primeiro exercício sobre JSP o código da classe BeerSelect (Controller no padrão MVC) é a seguinte:
package com.example.web;
import com.example.model.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  
import java.io.*;  
import java.util.*;  
public class BeerSelect extends HttpServlet  
{  
       public void doPost(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException  
       {  
              response.setContentType("text/html");  
              PrintWriter out = response.getWriter();  
              out.println("Beer Selection Advice <br>");  
              String c = request.getParameter("color");  
  
          BeerExpert be = new BeerExpert();  
          List result = be.getBrands(c);  
              out.println("<br> Got beer color " + c);  
  
  
        Iterator it = result.iterator();  
        while(it.hasNext())  
        {  
            out.println("<br> try: " + it.next() );  
        }
}

O Model é a classe BeerExpert (Model no padrão MVC) segue abaixo:

package com.example.model;  
import java.util.*;  
  
public class BeerExpert  
{  
         
    public List getBrands(String color)  
    {  
  
        List brands = new ArrayList();  
  
        if(color.equals("amber"))  
        {  
            brands.add("jack amber");  
            brands.add("Red Moose");  
      
        }else {  
            brands.add ("JAIL PALE ALE");  
            brands.add("Gout Stout");  
          
        }  
            return(brands);       
}
O livro solicita que o servlet acima seja alterado da seguinte maneira:
package com.example.web;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.example.model.*;

public class BeerSelect extends HttpServlet{
	
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
		
		BeerExpert model = new BeerExpert();
		String c = request.getParameter("color");
		List&lt;String&gt; result = model.getBrands(c);
		
		request.setAttribute("styles",result);
		RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp");
		
		dispatcher.forward(request,response);		
	}
}
E solicita que seja criado um JSP da seguinte forma:
&lt;%@ page import="java.util.*" %&gt;

&lt;html&gt;
	&lt;body&gt;
		&lt;h1 align="center"&gt;Beer Reconmendations JSP&lt;/h1&gt;
		<p>
			&lt;% 
				List&lt;String&gt; styles = (List&lt;String&gt;)request.getAttribute("styles");
				Iterator&lt;String&gt; it = styles.iterator();
				while(it.hasNext()){
					out.print("<br />Try: &quot; + it.next());
				}
			%&gt;
		</p>
	&lt;/body&gt;
&lt;/html&gt;

A minha dúvida é a seguinte:

Antes da implementação, no servlet é instanciado um objeto do tipo PrintWriter. Depois da modificação, o JSP fica encarregado de formar o html.
Só que nem no JSP, nem no Servlet há mais a instância do PrintWriter.
No JSP há um referência "out" (sem nenhum objeto criado anteriormente com essa referência), não havendo mais a instância do PrintWriter.
Mesmo assim o sistema funciona. Mesmo sem o objeto Writer instanciado, alguém sabe me dizer o por quê do sistema ainda funcionar?

3 Respostas

Hebert_Coelho

out é fornecido por padrão pelo servidor JEE.

É da especificação mesmo ter esse cara.

Hebert_Coelho

Funciona do mesmo modo se você escrever o request ou session apenas. Não precisa instanciar em algum lugar para usar. [=

DouglasJavaK

Hebert Coelho, obrigado por esclarecer minha dúvida. :smiley:

Criado 4 de março de 2013
Ultima resposta 4 de mar. de 2013
Respostas 3
Participantes 2