Gerar arquivo dinamico

4 respostas
gilmaslima

Estou com a seguinte situação:

preciso criar um arquivo no servidor e após criar esse arquivo preciso dar include dele no jsp, antes de chegar no include eu verifico se o arquivo existe, senão existe ele fica num loop recarregando a pagina até conseguir gerar o arquivo. Só que ele nunca entra no loop while (!file.exists()) e quando chega no include ele da FileNotFoundException (não acha o arquivo que eu criei).
Quando atualizo o navegador ele consegue dar o include.

Preciso que esse arquivo seja criado em disco.

segue código:

<%@ page language="java" contentType="text/html"   pageEncoding="ISO-8859-1" import="form.*,  java.io.*, java.io.FileOutputStream, java.io.PrintWriter "%> 

<%
            String filename = "C:\\Documents and Settings\\Gilmar\\My Documents\\NetBeansProjects\\zkframework\\web\\File.html";
            File file = new File(filename);
            try {


                PrintWriter writer = new PrintWriter(new FileOutputStream(file, false), true);


                writer.println("<html><body><font colot=\"red\">Teste HTML");
                writer.println("</font></body></html>");
                writer.flush();
                writer.close();


            } catch (Exception ex) {
                //ex.printStackTrace();
                out.println("<script>alert(\"Exceprion \"); </script>");
            }

            while (!file.exists()) {
                out.println("<script>window.location(window.zul); </script>");
            }




%>

<html>
    <body>
        <center>
            <jsp:include page="File.html"  />
            
            
</center> </body> </html>

nesse exemplo estou usando HTML, mas eu vou precisar criar arquivos .zul (zk framework) dessa forma e o erro é o mesmo.

Eu estava pensando em tentar capturar a Exception e dentro da exception dar o refresh novamente, mas também não consegui.

Alguém tem alguma dica?

4 Respostas

marciocamurati

O ideal no seu caso seria que a sua verificação de existe ou não o arquivo fosse feita com uma requisição Ajax, para evitar que o processo fique preso, nesse caso a página pode ser inteira renderizada e uma verificação exibe ou não o link assim que o arquivo for localizado, acho que é um bom caminho pra resolver isso.

[]c

gilmaslima

e como eu faço essa requisição usando Ajax?

gilmaslima

Tentei fazer a requisição usando Ajax, mas não deu muito certo, como o arquivo demora um pouco para ser criado ele não exibe nada. Não sei se está faltando algo.

<%@ page language="java" contentType="text/html" pageEncoding="ISO-8859-1" import="java.io.* "%> 


<html>
    <body>
        <center>
            
            
            <%

            String path = "C:\\Documents and Settings\\Gilmar\\My Documents\\NetBeansProjects\\zkframework\\web\\";


            String filename = "teste.html";
            String html = "<html><body>Teste</body></html>";
            File dir = new File(path);
            File file = new File(path, filename);
            try {

                if (!file.exists()) {

                    FileWriter fw = new FileWriter(file);
                    BufferedWriter bw = new BufferedWriter(fw);
                    bw.write(html);
                    bw.flush();
                    bw.close();


                }


            } catch (Exception ex) {
            }



            %> 
            
            <script>
                //variavel ajax
                var ajax = null;
                
                
                //função que faz a requisição ajax
                function requisicaoAjax(){
                    //utilizado para requisições no browser Internet Explorer
                    if (window.ActiveXObject) ajax = new ActiveXObject('Microsoft.XMLHTTP');
                    //utilizado como o padrão javascript para requisições AJAX.
                    else if (window.XMLHttpRequest) ajax = new XMLHttpRequest();
                    //se a variável ajax for nula, logo o browser não suporta tal tecnologia
                    if(ajax != null){
                        //abre a requisição ajax, passando o método de acesso, a url solicitada e o parâmetro sobre sincronia
                        ajax.open('POST','teste.html',true);
                        //seta a funcao que sera chamada quando o ajax for retornado
                        ajax.onreadystatechange = statusAjax;
                        //inicia o tranporte
                        ajax.send(null);
                    }
                }

                //função que trata o retorno ajax
                function statusAjax(){
                    //caso o status do ajax esteja ok, então chama a função retornoAjax enviando o retorno da requisição como parâmetro
                    if(ajax.readyState == 4 && ajax.status == 200){
                        retornoAjax(ajax.responseText);
                    }else{
                        document.write('Aguarde...');
                        
                    }
                }

                //função que é chamada quando o ajax for retornado
                function retornoAjax(response){
                    //dá um alerta no texto de retorno
                    
                    document.write(response);
                    
                    
                }
               
                requisicaoAjax();
            </script>
            
            
            
            
</center> </body> </html>
gilmaslima

RESOLVIDO:

O problema estava no netbeans, estou rodando o glassfish por ele e quando cria o arquivo o netbeans demora pra dsponibilizar o arquiovo para a aplicação.

Rodei a aplicação direto no glassfish e funcionou.

O código ficou assim:

<%@ page language="java" contentType="text/html" pageEncoding="ISO-8859-1" import="java.io.* "%> 


<html>
    <body>
        <center>
            <div id="center">
                
                
                <%

            String path = "C:\\Apache Tomcat 6.0.16\\webapps\\zkframework\\";

            String filename = "teste.html";
            String html = "<html><body>Teste</body></html>";
            File dir = new File(path);
            File file = new File(dir, filename);
            try {

                if (!file.exists()) {

                    FileWriter fw = new FileWriter(file);
                    BufferedWriter bw = new BufferedWriter(fw);
                    bw.write(html);
                    bw.flush();
                    bw.close();


                }


            } catch (Exception ex) {
            }

                %> 
                
                <jsp:include page="teste.html"/>
                
            </div>
            
            
</center> </body> </html>

E nem foi preciso usar Ajax

Criado 3 de outubro de 2008
Ultima resposta 6 de out. de 2008
Respostas 4
Participantes 2