[color=red]( Não consegui pesquisar no forum, ta dando erro "java.lang.NullPointerException" ) ;[/color]
Seguinte eu comecei um projeto pequeno em web, manual mesmo, to usando o netbeans pra faze as classes, conexão etc, mas bem no braço mesmo.
Montei a seguinte estrutura pra ter apenas uma unica pagina e incluir o conteudo que for necessario
/*Verificar pagina a ser aberta*/
int pagina = -1;//ID ('c') da pagina a ser aberta
try {
/*Obtem o ID('c') da pagina a ser aberta*/
pagina = Integer.parseInt(request.getParameter("c"));
} catch (Exception e) {
}
if (pagina == -2 || pagina == -1 || permissao.verificaPermissao()) {
try {
//O '*' (asteristico) mostra que a pagina é acessada atravéz do menu
switch (pagina) {
//Acesso Negado
case -2:
%>
<center class="acessoNegado">usuário sem permissão!</center>
<%
break;
//*Setor
case 1:
%>
<%@include file="/jsp/regional/regional.jsp" %>
<%
break;
//Inserir Novo Setor
case 2:
%>
<%@ include file="/jsp/regional/inserir.jsp" %>
<%
break;
//Pagina não encontrada
default:
%>
<center>Pagina não encontrada</center>
<%
}
} catch (ClassNotFoundException e) {
out.println("<center><font color=\"red\">Class Not Found: " + e.getMessage() + " </font></center>");
} catch (SQLException e) {
out.println("<center><font color=\"red\">SQL: " + e.getMessage() + " </font></center>");
} catch (Exception e) {
out.println("<center><font color=\"red\">Exception: " + e.getMessage() + " </font></center>");
} catch (Throwable e) {
out.println("<center><font color=\"red\">Throwable: " + e.getMessage() + " </font></center>");
}
}
Desta forma eu uso o include estático e as paginas que eu incluo conseguem ver as variaveis globais. Então dentro do include eu tenho somente o codigo do “conteudo” do bloco.
Por exemplo em: <%@ include file="/jsp/regional/inserir.jsp" %> eu tenho apenas o FORM de inclusao, sem todo o codigo JSP, variaveis, HTML, HEAD, session, etc… fica tudo como uma unica pagina.
OK, funciona perfeitamente, fiz varias paginas e tudo correto, até que surgiu a necessidade de criar outros sistemas, que foram incluidos tambem, até que me deparei com o seguinte erro do tomcat
“The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit”
pesquisando vi que daria pra trocar por um “jsp:include page” no lugar de <%@ include file%>, so que este outro include não ve as variaveis globais. Sim eu vi que da pra passar parametros por este include, so que:
<jsp:include page="included.jsp" flush="true" >
<jsp:param name="myvar" value="<%= myvar %>" />
</jsp:include>
não permite passar objetos, como por exemplo minha conexão com banco entre outras classes que eu importo pra pagina.
Cheguei a alterar meu banco, colocando o endereço das paginas em uma tabelas mas descobri que o <% include file=""%> não aceita variaveis, somente se usar o “jsp:include” então isso não funciona
try {
acess1.initSysMenu();
acess1.sysMenu.pesquisaMenuCodigo(pagina);
if (acess1.sysMenu.proximoResultado()) {
String arquivo = acess1.sysMenu.getString("mnu_arquivo");
%>
<%@ include file=arquivo %>//Gambiarra dinamico que não funciona, pois <%@ include file=""%> não aceita variaveis, é processado antes da pagina, até onde eu vi ele é estatico.
<% } else {
%>
<center>Pagina não encontrada</center>
<% }
} catch (ClassNotFoundException e) {
out.println("<center><font color=\"red\">Class Not Found: " + e.getMessage() + " </font></center>");
} catch (SQLException e) {
out.println("<center><font color=\"red\">SQL: " + e.getMessage() + " </font></center>");
} catch (Exception e) {
out.println("<center><font color=\"red\">Exception: " + e.getMessage() + " </font></center>");
} catch (Throwable e) {
out.println("<center><font color=\"red\">Throwable: " + e.getMessage() + " </font></center>");
}
O problema é que meu switch ja está na casa dos 250, e 90% da paginas tem processamento utilizando as variavies globais da pagina,.
Por isso eu queria uma solução "parecida" com esta acima, que não iria influenciar nas demais paginas. So que não to conseguindo achar alguma coisa do genero, as possiveis soluções que vi, teria que alterar praticamente tudo, ja que seria pra alterar tudo, é melhor refazer com uma outra estrutura, so que isso demanda muito tempo.