2010-03-01 47 views
18

Ho una classe java che esegue alcune operazioni sui file. Dato che il codice java è enorme, non voglio scrivere questo codice in jsp. Voglio chiamare i metodi in jsp quando richiesto.Chiamare un metodo java in jsp

Per favore dimmi il percorso in cui ho bisogno di mantenere questo file. Sarebbe utile anche qualche codice di esempio su come usarlo.

risposta

9

Penso che la domanda sia: come si rende disponibile il codice Java a un JSP? Lo renderebbe disponibile come qualsiasi altro codice Java, il che significa che deve essere compilato in un file .class e inserito nel classpath.

Nelle applicazioni Web, ciò significa che il file di classe deve esistere in WEB-INF/classi nel file .war o nella directory dell'applicazione, nella normale struttura di directory corrispondente al relativo pacchetto. Quindi, compila e distribuisci questo codice insieme a tutto il tuo altro codice Java dell'applicazione, e dovrebbe essere nel posto giusto.

Nota è necessario importare la classe in JSP o utilizzare il nome classe completo, ma in caso contrario è possibile scrivere qualsiasi codice Java desiderato utilizzando la sintassi <%%>.

Si potrebbe anche dichiarare un metodo in qualche altro programma di utilità JSP, utilizzando <%! %> sintassi (notare il!), importare il JSP e quindi chiamare il metodo dichiarato in tale blocco. Questo è uno stile cattivo però.

+0

Grazie per la tua risposta, ho fatto come hai detto importare classe java e usarlo .... grazie ancora a tutti coloro che hanno risposto ... –

24

Nella servlet (che corre davanti al JSP):

Person p = new Person(); // instantiate business object 
p.init(...); // init it or something 
request.setAttribute("person", p); // make it available to the template as 'person' 

Nel modello è possibile utilizzare questo:

your age is: ${person.age} <%-- calls person.getAge() --%> 
+1

Non è * necessario * eseguire un servlet separato prima del JSP, sebbene il file JSP stesso venga compilato su un servlet al volo. – Rob

+2

sì, non è obbligatorio, solo buone pratiche – cherouvim

4

Anche se io non ti consiglio di fare tutte le chiamate in Java JSP, è possibile fare questo all'interno del vostro JSP:

<% 
    //Your java code here (like you do in normal java class file. 
%> 

<!-- HTML/JSP tags here --> 

Nel caso in cui vi state chiedendo, la sezione <% ... %> si chiama scriptlet :-)

1

In realtà, jsp non è il posto giusto per "eseguire alcune operazioni sui file". Hai sentito del pattern MVC?

Se ancora interessato a una chiamata al metodo Java da jsp si può fare, per esempio:
1. <% MyUtils.performOperation("delete") %> (scriptlet)
2. <my-utils:perform operation="delete"/> (tag personalizzato)

Comunque Raccomando a google su scriptlets, tag personalizzati jsp e pattern MVC.
I migliori saluti, Gedevan

+0

Il pattern MVC ha bisogno a volte di così difficile modi anche, soprattutto se la struttura dei dati da mostrare è complessa. – peterh

7

A seconda del tipo di azione che si desidera chiamare, normalmente si usano tagli, funzioni EL o servlet per. Il codice Java in realtà non appartiene ai file JSP, ma nelle classi Java.

Se si desidera eseguire il preprocesso di una richiesta, utilizzare il metodo Servlet doGet(). Per esempio.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // Preprocess request here. 
    doYourThingHere(); 
    // And forward to JSP to display data. 
    request.getRequestDispatcher("page.jsp").forward(request, response); 
} 

Se si desidera post elaborazione di una richiesta dopo una qualche forma di invio, utilizzare il metodo Servlet doPost() invece.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // Postprocess request here. 
    doYourThingHere(); 
    // And forward to JSP to display results. 
    request.getRequestDispatcher("page.jsp").forward(request, response); 
} 

Se si desidera controllare il flusso di pagina e/o output HTML, utilizzare un taglib come JSTL core taglib o creare custom tags.

Se si desidera eseguire funzioni statiche/di supporto, utilizzare le funzioni EL come JSTL fn taglib o creare custom functions.

Problemi correlati