2008-08-29 19 views
37

Qualcuno sa come eseguire il debug di JSP in IntelliJ IDEA?Debug JSP in IntelliJ IDEA

Quando si imposta il punto di interruzione nei file JSP, tali punti di interruzione non sembrano mai avere effetto. Il debugger non li colpisce mai. IDEA sembra pensare che i punti di interruzione siano validi. Vedo un punto rosso posizionato a sinistra della linea in cui posiziono il mio punto di interruzione.

Ho letto nel forum IntelliJ in this post che i file JSP devono essere in Web-inf per il debug al lavoro.

Ma poi ho anche letto che i file JSP inseriti in web-inf non saranno direttamente accessibili dall'utente.

Non sono sicuro di chi abbia davvero ragione.

+0

Appena controllato, funziona per me. IntelliJ 6.0.5 con Tomcat 5. JSP nella cartella delle risorse, niente di speciale. Devi dare maggiori informazioni sulla tua configurazione. Prova a creare un progetto semplice e provalo con diverse versioni di Tomcat/qualunque. – itsadok

+0

Se eclissi: http: //codeinventions.blogspot.com/2014/08/how-to-debug-jsp-with-help-of-compiled.html –

risposta

0

Per la seconda parte della domanda ("i file jsp inseriti in web-inf non saranno direttamente accessibili dall'utente") è corretto. Per consentire agli utenti di accedere ai file JSP nella cartella WEB-INF servlet e le voci di mappatura servlet devono essere eseguite nel file web.xml per ogni pagina JSP.

29

Per il debug JSP in Intellij ci sono alcune configurazioni che devono essere in ordine. Il fatto che Intellij ti consente sempre di aggiungere un breakpoint su una linea JSP non implica necessariamente che hai configurato il debug JSP. Di seguito mi riferisco alla configurazione di Intellij 8, w.r.t. versioni precedenti avrete bisogno di fare operazioni simili in quanto i concetti sono gli stessi.

Per abilitare il debug JSP è necessario eseguire due passaggi: impostare una configurazione dell'applicazione Web nel progetto e aggiungere una configurazione del server di applicazioni Web.

Configurazione applicazione Web: per avere il debug JSP, è necessario disporre di un aspetto "Web" nella struttura del progetto, che punta al file web.xml corretto. A seconda del tipo di struttura dell'applicazione Web che si sta utilizzando, il facet potrebbe essere rilevato automaticamente da Intellij (andare comunque a verificare cosa ha fatto) o potrebbe essere necessario aggiungerlo manualmente. Ricordare nella scheda "Impostazioni di build Java EE" per impostare come "Crea directory esplosa sfaccettatura web"; se non vuoi duplicazioni, un trucco è solo abilitarlo e puntare alla tua directory già esistente.

(Web) Server applicazioni: Andare su "modifica configurazioni", è necessario aggiungere alle configurazioni un server applicazioni, non avviare il server Web come un'applicazione come qualsiasi altra. In questo modo, Intellij sarà in grado di intercettare le chiamate JSP. Nell'elenco dei server delle applicazioni, dovresti avere quello predefinito, Tomcat. Assicurarsi di disporre di un'installazione locale di Tomcat prima di eseguire questa operazione e puntare a ciò quando si aggiunge il server di applicazioni Web. L'ultimo trucco è andare alla scheda "Distribuzione" e selezionare come "Origine distribuzione" lo stesso aspetto che hai configurato nel passaggio precedente.

La stessa configurazione funziona se si desidera utilizzare un altro server di applicazioni Web, l'ho testato con le ultime versioni di Caucho Resin e il debug funziona correttamente (non con le combinazioni precedenti di Intellij e Resin).

Se Tomcat non viene visualizzato nell'elenco dei server applicazioni disponibili da aggiungere, controllare i plug-in nel riquadro delle impostazioni generali di Intellij: nelle versioni più recenti, sempre più funzionalità sono diventate "collegabili" e anche molto di base le funzioni possono essere disabilitate; questo plugin è chiamato "integrazione di Tomcat".

Infine, non è sicuramente vero che i file JSP devono essere sottoposti a debug in WEB-INF.

4

In ogni caso, è necessario avviare Tomcat in IDEA, non da un Tomcat remoto.

+1

Grazie per questo suggerimento! Non è stato possibile eseguire il debug durante l'esecuzione di un mvn tomcat: run. Quando ho usato un tomcat locale, sono riuscito a eseguire il debug di jsps. – Jay

18

Per il debug JSP remoto (che si applica anche a localhost), è necessario installare JSR45support plugin.

  1. Vai a Preferenze>Plugin, ricerca del JSR45 plug-in, e abilitarlo.
  2. Creare una configurazione di esecuzione: Run>Esegui Configurazione> fare clic sul pulsante +, e raccogliere JSR45 Compatibile Server, e quindi nella finestra di dialogo che si apre, selezionare Remote e impostare l'host e la porta del server. Impostazione Server applicazioni:Generico dovrebbe funzionare correttamente.
  3. assicurarsi di impostare la porta corretta nel Avvio/Configurazione>Debug.

  4. Aprire le impostazioni del modulo (F3 sulla cartella del progetto) e aggiungere un aspetto Web sotto Sfaccettature, e sotto Elenchi di risorse Web specificare la cartella principale JSP.

  5. Fare clic sul configurazione ... tasto, e selezionare le cartelle con i fagioli, le classi e le librerie che JSP dipendono.

punti di interruzione Ora JSP dovrebbero funzionare, a condizione che hai iniziato la tua server con il proper debug arguments quando si avvia il server.

+0

Riavvia l'idea dopo il passaggio 1. Questa funzione è disponibile solo in Idea Ultimate. –

0

Si prega di assicurarsi che in vi Tomcat conf/web.xmlsuppressSmap è non abilitato il supporto di JSR45 è richiesto dal debugger di IntelliJ.

Esso dovrebbe essere simile a questo:

<init-param> 
    <param-name>suppressSmap</param-name> 
    <param-value>false</param-value> 
</init-param> 

Da https://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html

suppressSmap - deve essere soppressa la generazione di SMAP informazioni per JSR45 il debug? vero o falso, predefinito falso.

0

Se si utilizza il debugger Intellij è possibile ottenere il valore di un singolo attributo inserendo un punto di interruzione all'interno JSP e valutazione dell'espressione this.jspContext.request.getAttribute("attributeName").

Si noti che questo potrebbe restituire un tipo di oggetto Java e potrebbe essere necessario eseguire il cast nel tipo corretto. Inoltre, se lanci un Tomcat remoto, l'IDEA non colpirà alcun punto di interruzione, quindi dovrai avviare Tomcat in modalità di debug dall'interno dell'IDEA.