2009-05-03 4 views
5

Dato il seguente servlet Hello World, come è possibile trasferire l'output di Hello World dal codice servlet e inserirlo in una sorta di formato di modello HTML? Vorrei semplicemente chiamare il template dal servlet e renderlo renderizzato le variabili Java a cui mi riferisco nel template - magari facendo riferimento alla stringa "Hello World" come una variabile di classe nella classe SprogzServlet?Quali opzioni di templating HTML sono presenti in Java come alternativa all'output HTML dal codice del servlet?

package boochy; 

import java.io.IOException; 
import javax.servlet.http.*; 

@SuppressWarnings("serial") 
public class SprogzServlet extends HttpServlet 
{ 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException 
    { 
     resp.setContentType("text/plain"); 
     resp.getWriter().println("Hello, world"); 
    } 
} 

risposta

5

E 'piuttosto raro di fare sviluppo Java Web senza usare un qualche tipo di framework MVC che ti delegare tutte le visualizzazioni a JSP (a parte output PDF e altri casi d'angolo) in modo da avere:

Alcuni framework web come Tapestry e JSF ("Faces Server Java") sono un po 'più simile a vista HTML con i tag in più.

I JSP sono in definitiva solo compilati per servlet in ogni caso e tendono ad essere una forma più conveniente per l'output di HTML. In generale, li userei come minimo piuttosto che scrivere un mucchio di istruzioni out.println() direttamente in un servlet.

+0

Ottima risposta. Grazie per tutte le informazioni. Mi piace l'aspetto di Apache Velocity. Questo sembra vicino alle opzioni di template Ruby che stavo cercando di approssimare (erb, haml). JSF è un po 'come CFML. Freemarker non ne sono sicuro - il sito web non sembra così professionale, mi rende nervoso. Tapestry sembra coinvolto - devo studiare su questo. Potrei finire per attaccare con JSP come hai suggerito. Grazie. – Yen

0

cletus è abbastanza corretto nelle sue raccomandazioni.

Freemarker (o velocità) sono le soluzioni da utilizzare se "semplicemente" richiedono il rendering basato su modelli. Sono abbastanza efficaci. Puoi aumentare la scala della complessità e utilizzare i JSP.

Non sono d'accordo sul fatto che questo è specificamente limitato al modello MVC. Nella sua forma più semplice (e chiaramente questo non si ridimensionerà per i sistemi di grandi dimensioni) è possibile avere lo stesso servizio di servlet per tutte le richieste e scegliere un modello Velocity/Freemarker e popolare il contesto richiesto e renderizzare il modello.

1

Divertente, ho appena visto una domanda leggermente simile prima. È inoltre possibile utilizzare le pagine PHP tramite Quercus per il rendering della pagina in Java.

2

Ho utilizzato con successo Velocity per un certo numero di anni su un sito interno di dimensioni molto ridotte.

È facile da usare e ha una bella API pulita. Gestisce lo scoppio di attività estremamente bene.

Problemi correlati