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);
}
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);
}
}
<%@ page import="java.util.*" %>
<html>
<body>
<h1 align="center">Beer Reconmendations JSP</h1>
<p>
<%
List<String> styles = (List<String>)request.getAttribute("styles");
Iterator<String> it = styles.iterator();
while(it.hasNext()){
out.print("<br />Try: " + it.next());
}
%>
</p>
</body>
</html>
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?
