Visualizzazione dei risultati da 1 a 8 su 8

Discussione: accedere file da jsp

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230

    accedere file da jsp

    Ciao

    Sto sviluppando un'applicazione da usare in Tomcat 5.5.23 che ha la seguente struttura:
    pool
    |---WEB-INF
    | l---web.xml
    | |--lib
    | |--PoolClass.jar
    |--data.txt
    |--auth.jsp
    |--Login.html

    Io voglio accedere al file data.txt dalla pagina auth.jsp, a tal fine ho scritto una classe DataFile che gestisce le operazioni sui i file (lettura, scrittura e altre cose) il cui costruttore è

    codice:
     	
    public DataFile(String inputFile) throws IOException{
    			this.file=new File(inputFile);
    			file.createNewFile();
    	}
    Per accedere da auth.jsp a data.txt ho scritto nella pagina jsp:

    codice:
    ....
    ServletConfig cfg = getServletConfig(); 
    String path = cfg.getInitParameter("path");
    DataFile df = new DataFile(path); 
    ....
    e nel web.xml

    codice:
    - <servlet>
      <servlet-name>auth</servlet-name> 
      <jsp-file>/auth.jsp</jsp-file> 
    - <init-param>
      <param-name>path</param-name> 
      <param-value>/data.txt</param-value> 
      </init-param>
      </servlet>
    Quindi nel caso fossi stato poco chiaro la concatenazione per accedere a data.txt è la seguente
    auth.jsp-->DataFile--->data.txt

    Quando tento di usare l'applicazione mi viene visualizzatto il seguente errore (next post)

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    l'errore è sollevato in corrispondenza della riga

    DataFile df = new DataFile(path);
    dellla pagina auth.jsp

    e la "root cause"

    java.lang.NullPointerException
    java.io.File.<init>(Unknown Source)
    PoolClass.DataFile.<init>(DataFile.java:10)
    org.apache.jsp.auth_jsp._jspService(auth_jsp.java: 57)
    org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:98)
    .....

    Non credo che servono le altre righe

    L'errore penso che sia dovuto al fatto che il costruttore DataFile ha bisogno di un path assoluto come C:/data.txt che usavo prima e tutto funzionava(prima mettevo il file data,txt per comodità in C), ora invece si ritrova solo il path realtivo.
    Ho provato anche a modificare il costruttore di DataFile nella seguente maniera ma ho avuto altri tipi di errori

    codice:
    //ho messo URI anzichè String  	
    public DataFile(URI inputFile) throws IOException{
    			this.file=new File(inputFile);
    			file.createNewFile();
    	}
    Ciao e grazie

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Metti qualche stampa di prova, nella jsp stampa il valore del parametro che leggi per vedere se e' giusto, in DataFile, stampa il path assoluto del file dopo che l'hai aperto per vedere se e' corretto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    Per il momento almeno la auth.jsp è sistemata, ho dovuto cambiare il codice come segue:
    (rispetto a prima ho portato il file data.txt nella WEB-INF)

    codice:
    ServletConfig cfg = getServletConfig(); 
    String pathUser = cfg.getInitParameter("pathUser");
    DataFile df = new DataFile(getServletConfig().getServletContext().getRealPath("/")+pathUser);
    e il web.xml come:
    codice:
    <servlet>
          <servlet-name>auth</servlet-name>
          <jsp-file>/auth.jsp</jsp-file>
          <init-param>
             <param-name>pathUser</param-name>
             <param-value>/WEB-INF/data.txt</param-value>
          </init-param>
    </servlet>
    <servlet-mapping>
      <servlet-name>auth</servlet-name>
      <url-pattern>/auth.jsp</url-pattern>
    </servlet-mapping>
    <servlet>
      <servlet-name>StateRedirect</servlet-name>
      <servlet-class>StateRedirect</servlet-class>
      <init-param> 
        <param-name>pathUser</param-name> 
        <param-value>/WEB-INF/data.txt</param-value>
        <param-name>pathUrl</param-name> 
        <param-value>/WEB-INF/URL.txt</param-value>    	 
       </init-param>  
    </servlet>
    <servlet-mapping>
      <servlet-name>StateRedirect</servlet-name>
      <url-pattern>/poolServlet/StateRedirect</url-pattern>
    </servlet-mapping>
    Ora però ho un problema nella servlet StateRedirect per la quale non riesco a richiamare i parametri di inizializzazione pathUser e pathUrl come avrai visto dal web.xml sopra.
    Per estrarre i parametri di inizializzazione sovrascrivo il metodo init nella seguente maniera:

    codice:
    public void init() throws ServletException { 
    		try{
    			ServletConfig cfg = getServletConfig(); 
    			String pathUser = cfg.getInitParameter("pathUser");
    			String pathUrl = cfg.getInitParameter("pathUrl");
    			df = new DataFile(getServletConfig().getServletContext().getRealPath("/")+pathUser);
    			URL = new URLTable(getServletConfig().getServletContext().getRealPath("/")+pathUrl);
    	   }catch(IOException e){
    	   }
    Per certo ti posso dire che la variabile pathUser =null ma non ho capito perchè!
    Ciao e grazie per il tuo aiuto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Non so se e' questo che ti da problema, cmq per ogni parametro ci vuole un tag <init-param> quindi devi correggere il tuo web.xml
    codice:
    <init-param> 
        <param-name>pathUser</param-name> 
        <param-value>/WEB-INF/data.txt</param-value>
    </init-param>  
    <init-param> 
        <param-name>pathUrl</param-name> 
        <param-value>/WEB-INF/URL.txt</param-value>    	 
    </init-param>

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    Simo mi hai battuto sul tempo avevo proprio fatto quella modifica che mi hai indicato !
    Scusami se ti ho fatto perdere tempo...
    Si possono evitare delle "ripetizioni" di codice nel file web.xml ad esempio nel file che segue ambedue le servlet (StateRedirect e Answer hanno bisogno degli setti parametri di inizializzazione dagli stessi file, non si può scrivere questa cosa una volta per tutte e poi la si usa senza scrivere per due volte le stesse righe?
    Ciao
    codice:
    - <servlet>
      <servlet-name>StateRedirect</servlet-name> 
      <servlet-class>StateRedirect</servlet-class> 
    - <init-param>
      <param-name>pathUser</param-name> 
      <param-value>/WEB-INF/userFile.txt</param-value> 
      </init-param>
    - <init-param>
      <param-name>pathUrl</param-name> 
      <param-value>/WEB-INF/URL.txt</param-value> 
      </init-param>
      </servlet>
    - <servlet-mapping>
      <servlet-name>StateRedirect</servlet-name> 
      <url-pattern>/poolServlet/StateRedirect</url-pattern> 
      </servlet-mapping>
    - <servlet>
      <servlet-name>Answer</servlet-name> 
      <servlet-class>Answer</servlet-class> 
    - <init-param>
      <param-name>pathUser</param-name> 
      <param-value>/WEB-INF/userFile.txt</param-value> 
      </init-param>
    - <init-param>
      <param-name>pathUrl</param-name> 
      <param-value>/WEB-INF/URL.txt</param-value> 
      </init-param>
      </servlet>
    - <servlet-mapping>
      <servlet-name>Answer</servlet-name> 
      <url-pattern>/poolServlet/Answer</url-pattern> 
      </servlet-mapping>

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Prova con
    codice:
    <web-app eccetra,eccetra...>
        <context-param>
            <param-name>param1</param-name>
            <param-value>val1</param-value>
        </context-param>
        <context-param>
            <param-name>param2</param-name>
            <param-value>val2</param-value>
        </context-param>
        servlet e altro
    </web-app>

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    Grazie mille Simo come al solito efficiente e preciso.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.