Olá pessoal!
Estou desenvolvendo um sistema de menu dinâmico, baseado em algumas tabelas de segurança. O objetivo é montar o menu de acordo com o perfil do usuário.
Não estou usando nenhuma framework, pois a modelagem do banco não favorece o uso de hibernate ou outras framewors. Estou fazendo tudo na mão. JDBC puro e Servlet.
Meu problema está na exibição do menu. Para isso utilizo um servlet que "gospe" o html pra mim.
O problema é. Minha página é exibida corretamente, mas gera uma java.lang.IllegalStateException: que não impede a exibição da minha página.
Como tenho pouca experiência em servlet. Gostaria de alguma ajuda.
aqui vai os principais trechos de código:
Meu Servlet:
public class MenuHorizontalHierarquico extends javax.servlet.http.HttpServlet
implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
private boolean filhos;
RequestDispatcher dispatcher;
private PrintWriter out;
/*
* (non-Java-doc)
*
* @see javax.servlet.http.HttpServlet#HttpServlet()
*/
public MenuHorizontalHierarquico() {
super();
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response){
try {
dispatcher = request.getRequestDispatcher("index.jsp");
String login = request.getParameter("login");
int projeto = Integer.parseInt(request.getParameter("projeto"));
response.setContentType("text/html;charset=UTF-8");
out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>MenuJDBC</title>");
out.println("</head>");
out.println("<body>");
Menu menu = new Menu();
List<Menu> menusPai = new ArrayList<Menu>();
Set<Menu> menusDoUsuario = new HashSet<Menu>();
menu.setCodProjeto(projeto);
menu.criaMenusDoUsuarioAtivo(projeto, login);
menusPai = menu.getMenusPai();
menusDoUsuario = menu.getMenusDoUsuarioAtivo();
out.println("<ul>");
for (Menu pai : menusPai) {
menu.setMenusFilhos(menusDoUsuario, pai.getNumMenuProjeto());
out.println(imprimiLabelLink(pai.getDesLink(), pai.getNomLabelMenu()));
if (menu.getMenusFilho().size() > 0) {
imprimeMenus(menu.getMenusFilho(), "filhos");
setFilhos(true);
filhosDosFilhos(menu.getMenusFilho(), menusDoUsuario);
}
}
out.println("</ul>");
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
try {
dispatcher.forward(request, response);
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Minha jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>LoginJDBC</title>
</head>
<body>
<h1>Teste de Login</h1>
<form name="login" action="MenuHorizontalHierarquico" method="get">
Usuário: <input type="text" name="login" value="SCOTES" /> <br />
Projeto: <input type="text" name="projeto" value="2" /> <input
type=submit name="Envia"></form>
<a >Servlet</a>
</body>
</html>
Meu WEB.xml
<description></description>
<display-name>MenuHorizontalHierarquico</display-name>
<servlet-name>MenuHorizontalHierarquico</servlet-name>
<servlet-class>br.com.folha.login.servlet.MenuHorizontalHierarquico</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MenuHorizontalHierarquico</servlet-name>
<url-pattern>/MenuHorizontalHierarquico</url-pattern>
</servlet-mapping>
A exeption
2:10:10,670 ERROR [[MenuHorizontalHierarquico]] Servlet.service() for servlet MenuHorizontalHierarquico threw exception java.lang.IllegalStateException: Cannot forward after response has been committed at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:313) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at br.com.folha.login.servlet.MenuHorizontalHierarquico.processRequest(MenuHorizontalHierarquico.java:89) at br.com.folha.login.servlet.MenuHorizontalHierarquico.doGet(MenuHorizontalHierarquico.java:169)
Pelo que entendi estou usando "dispatcher = request.getRequestDispatcher("index.jsp");" e o PrintWriter out;
em ordem errada.
Já inverti isso já usei response.sendRedirect e não resolveu.
O que devo fazer?