[RESOLVIDO]Dúvida JSP e Servlets

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:

[code]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
");
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() );  
    }

}[/code]

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

[code]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);       

}[/code]

O livro solicita que o servlet acima seja alterado da seguinte maneira:

[code]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);		
}

}[/code]

E solicita que seja criado um JSP da seguinte forma:

[code]<%@ page import=“java.util.*” %>

<html>
<body>
<h1 align=“center”>Beer Reconmendations JSP</h1>


<%
List<String> styles = (List<String>)request.getAttribute(“styles”);
Iterator<String> it = styles.iterator();
while(it.hasNext()){
out.print("
Try: " + it.next());
}
%>


</body>
</html>[/code]

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?

out é fornecido por padrão pelo servidor JEE.

É da especificação mesmo ter esse cara.

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

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