2010-04-04 10 views
8

Sto sviluppando un'applicazione web JSP/Servlet (senza framework). Voglio utilizzare il modello MVC. Ho intenzione di progettare il mio progetto come questo:Come sviluppare l'app Web JSP/Servlets utilizzando il pattern MVC?

  1. controller: una servlet che legge una richiesta, estrae i valori, comunica con gli oggetti del modello e fornisce informazioni ad una pagina JSP.
  2. Visualizza: pagine JSP.
  3. Modello: classi Java/Java Beans .. ecc

Il problema:Index.jsp è il punto di partenza (pagina di default) nel mio sito web. Pertanto, lo Index.jsp diventa il controller per analizzare la richiesta. Ad esempio, la seguente richiesta:

index.jsp?section=article&id=10 

viene analizzata in index.jsp come segue:

<div class="midcol"> 
<!-- Which section? --> 
<%String fileName = request.getParameter("section"); 
if (fileName == null) { 
fileName = "WEB-INF/jspf/frontpage.jsp"; 
} else { 
fileName = "WEB-INF/jspf/" + fileName + ".jsp"; 
} 
%> 
<jsp:include page='<%= fileName%>' /> 
</div> 

Qui, non posso forzare il servlet per essere un controller, perché il index.jsp è il controllore qui poiché è il punto di partenza.

Esiste una soluzione per inoltrare la richiesta da index.jsp al servlet e quindi tornare a index.jsp? O qualsiasi soluzione che raggiunge l'obiettivo MVC - il servlet dovrebbe essere il controller?

sto pensando di fare un servlet FrontPageController come pagina di default al posto di index.jsp, ma non so se è un'idea perfetta?

risposta

11

Sbarazzarsi di index.jsp e lasciare che il servlet del controller ascolti su uno specifico url-pattern di interesse. Il controller stesso deve inoltrare la richiesta alla pagina JSP di interesse utilizzando RequestDispatcher.

request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response); 

In alternativa si può lasciare che index.jsp avanti o reindirizzare a un URL che è coperto dalla servlet di controllo che a sua volta mostra la pagina "default" (che sembra essere frontpage.jsp).

Detto questo, in un corretto approccio MVC, si dovrebbe avere nonscriptlet nel file JSP. Ogni volta che hai bisogno di scrivere del codice Java grezzo all'interno di un file JSP che non può essere sostituito ragionevolmente da taglibs (JSTL e così via) o EL, allora il particolare codice Java appartiene in qualche modo in una vera classe Java, come un Servlet, Filtro, Javabean, eccetera.

Per quanto riguarda l'approccio MVC homegrown, è possibile trovare anche this answer e this article.

+0

Grazie a @BalusC. Intendevi dal primo paragrafo che la prima pagina del mio sito web dovrebbe essere una servlet come:/default-servlet? Devo fare qualcosa per rendere "default-servlet" la pagina predefinita quando qualcuno visita il mio sito web e inserisce solo il dominio xyz.com/? – Abdullah

+1

Se si desidera un vero 'file di benvenuto', è possibile mantenere l'indice'.jsp', ma invece lasciarlo in avanti o reindirizzare alla pagina predefinita desiderata. Il 'welcome-file' purtroppo non può essere un servlet. Questo punto dovrebbe essere almeno chiaro: la logica del controller come hai scritto nel JSP non appartiene al JSP. Appartiene al servlet. – BalusC

Problemi correlati