Domanda

Ho bisogno di alcune idee su come posso risolvere al meglio questo problema.

Ho un'applicazione JBoss Seam in esecuzione su JBoss 4.3.3 Quello che fa una piccola parte di questa applicazione è generare un html e un documento pdf basato su un modello Open Office.

I file che ho generato li ho inseriti in / tmp / sul filesystem. Ho provato con System.getProperties (& Quot; tmp.dir & Quot;) e alcune altre opzioni e restituiscono sempre $ JBOSS_HOME / bin Vorrei scegliere il percorso $ JBOSS_HOME / $ DEPLOY / myEAR.ear / myWAR.war / qualunqueLocationHere /

Tuttavia, non so come posso scegliere programmaticamente il percorso senza fornire un percorso assoluto o impostare $ JBOSS_HOME e $ DEPLOY.

Anybody know how I can do this?

La seconda domanda; Voglio facilmente visualizzare in anteprima questi file generati. O tramite JavaScript, o qualunque sia il modo più semplice. Tuttavia, JavaScript non può accedere al filesystem sul server, quindi non posso aprire il file tramite JavaScript.

Any easy solutions out there?
È stato utile?

Soluzione

Non sono sicuro di come stai generando i tuoi PDF, ma se possibile, salta il disco IO tutti insieme, metti da parte il contenuto PDF in byte[] e scaricalo all'utente in un servlet impostando il tipo mime su application/pdf * che risponde a un URL specificato da un collegamento nel client o impostato dinamicamente in <div> da javascript. Probabilmente stai comunque prendendo il colpo di memoria e, oltre a saltare l'IO, non devi preoccuparti di eliminare i file tmp quando hai finito con l'anteprima.

***** Penso che sia giusto. Ho bisogno di cercarlo.

Altri suggerimenti

Non sono sicuro di avere una completa comprensione di ciò che stai cercando di ottenere, ma lo proverò comunque:

La mia ipotesi è che il tuo obiettivo finale sia rendere alcuni file (PDF, HTML) disponibili per gli utenti finali tramite un'applicazione web.

In tal caso, perché non fare in modo che Apache offra questi file agli utenti finali, quindi è sufficiente che l'applicazione JBOSS conosca il percorso di una directory mappata su un host virtuale Apache.

Quindi, in pratica, crea un file e salvalo come /var/www/html/myappfiles/tempfile.pdf (la cartella che la tua applicazione conosce), quindi fornisci http://mydomain.com/myappfiles (un host virtuale Apache) per i tuoi utenti. Il resto verrà eseguito dal server Web.

Dovrai impostare una variabile di ambiente o una proprietà di sistema per far sapere alla tua applicazione dove si trova la tua cartella (/ var / www / html / myappfiles / in questo esempio).

Spero di non essere lontano :)

  1. Sono d'accordo con Peter (yo Pete!). Metti la directory fuori dal tuo WAR e imposta una variabile d'ambiente che punta a questo. Leggi questo post di Jacob Orshalick su come configurare le variabili di ambiente in Seam:

  2. Per quanto riguarda l'anteprima dei PDF, dai un'occhiata a come Google Documenti gestisce l'anteprima dei PDF: li visualizza come un'immagine. Per fare ciò con Java, controlla Sun PDF Renderer .

Non sono sicuro che funzioni in JBoss, dato che vuoi un percorso all'interno di un archivio WAR, ma potresti provare a usare ServletContext.getRealPath (String) .

Tuttavia, personalmente non vorrei che i file generati fossero all'interno della mia applicazione distribuita; invece configurerei una directory di dati esterna da qualche parte come $JBOSS_HOME/server/default/data/myapp

  • Innanzitutto, la maggior parte delle piattaforme utilizza java.io.tmpdir per impostare una directory temporanea. Alcuni contenitori servlet ridefiniscono questa proprietà per essere qualcosa sotto il loro albero. Perché ti importa dove viene scritto il file?
  • In secondo luogo, sono d'accordo con Nicholas: dopo aver generato il PDF sul lato server, è possibile generare un URL che, quando si fa clic, invia il file al browser. Se usi il tipo MIME application/pdf, il browser dovrebbe fare la cosa giusta con esso.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top