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<String> 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?