2011-01-03 15 views
5

Ho sviluppato un'applicazione Web molto grande. Se c'è qualche cambiamento che devo apportare in una pagina JSP, ci vuole troppo tempo per trovare quella pagina JSP, collegamento, azione, ecc.sul codice sorgente jsp

Quindi, ci sono strumenti o ci sono tecniche attraverso le quali posso accedi direttamente al codice di quella particolare pagina JSP?

Penso che "Visualizza origini" sia diverso. mostra solo la fonte di quel JSP?

+0

Esattamente quale è il problema che stai cercando di risolvere? Se hai sviluppato l'applicazione web, hai il codice sorgente dell'app. Se stai cercando le pagine generate dall'app, puoi visualizzare l'origine o utilizzare un server proxy (l'equivalente di visualizzare la fonte). Se riesci a fornire un esempio del problema che stai cercando di risolvere, sarà più facile dare una buona risposta. – atk

+0

Questa domanda mi ricorda un problema che spesso ho. Uso molti frammenti '.jspf' e quando guardo la pagina completamente generata in un browser è difficile sapere in quale file è stato definito un particolare elemento HTML. Alcuni suggerimenti sono gli attributi 'id' e' class', ma questo è tutto ciò che di solito ho. Si potrebbe aggiungere un'intestazione comune a tutti quei file '.jspf' che stampano il loro nome come un commento HTML (ma solo se viene fornito un parametro URL speciale, ad esempio). Non penso che di solito questo sia fatto. –

+0

Prima di tutto grazie .. Ho sviluppato un'applicazione web che ha migliaia di pagine .jsp .. e anche io posso trovare qualsiasi pagina .jsp con l'aiuto di azioni ma ci vuole del tempo .. La mia domanda c'è qualche modo o strumenti attraverso posso trovare qualsiasi pagina jsp direttamente .. Per Ex ...... Se c'è la pagina list.jsp nel lato admin e voglio andare su questa pagina soruce codice direttamente senza riferire alcuna azione .. quindi io può cambiare facilmente questa pagina list.jsp .... – water

risposta

0

Generare un commento HTML che identifica l'origine di ogni sezione di codice nell'output finale, possibilmente in risposta a un parametro di query di tipo "debug". Quindi eyeball il codice con "view source" e dovresti essere in grado di capire da dove proviene abbastanza facilmente.

Ci vorrà del tempo per aggiungere questi commenti al codice, ma è possibile farlo nel corso del tempo in modo frammentario mentre si modificano le cose.

4

Hai provato NetBeans o Eclipse o MyEclipse o qualsiasi altro IDE? È possibile utilizzare i collegamenti di questi strumenti per trovare il codice appropriato nell'applicazione. Possono aiutarti a trovare la tua pagina JSP nella tua applicazione più velocemente.

+0

sì .. ho usato MyEclispe .. Non ho intenzione di dirlo ..? – water

+0

@water: usa CTRL + MAIUSC + R per trovare la pagina JSP desiderata. –

+0

oh .... caro .. ho già capito che ... voglio trovarlo dalla parte dell'interfaccia utente ... Vai ... ma comunque .. grazie mille. posso risolvere .. – water

3

tecniche: si potrebbe probabilmente utilizzare un modello di progettazione appropriato per frammentare il codice in modo tale che ogni pagina jsp rappresenti "azioni" ad es. addFriendAction.jsp. il vantaggio qui è che trovare il nome della pagina appropriato sarebbe più semplice, in quanto basta fare riferimento all'azione corrispondente. confronta questo con le pagine JSP in cui incorpori più azioni nella stessa pagina. ecco un esempio (suppongo che tu stia usando servlet insieme alle pagine jsp secondo lo schema MVC). per esempio. utilizzando lo schema di comando per strutturare la tua app Web in azioni (consultare Esempio di codice 4.8- http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html)

aggiungendo sopra, vorrei condividere un progetto recente che ho fatto utilizzando questo modello. qui di seguito è la mia classe servlet

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package servlets; 

import beans.SeekerCustomer; 
import java.io.*; 
import java.util.HashMap; 
import javax.servlet.*; 
import javax.servlet.http.*; 
/** 
* 
* @author Dhruv 
*/ 

//servlet class acts as controller by delegating 
//operations to the respective Action concrete subclass 
public class ControllerServlet extends HttpServlet { 

    //stores all the possible operation names 
    //and operation objects for quick access 
    private HashMap actions; 

    @Override 
    public void init() throws ServletException { 
     actions = new HashMap(); 

     //all the various operations are stored in the hashmap 
     CreateUserAction cua = new CreateUserAction(new SeekerCustomer()); 
     actions.put(cua.getName(), cua); 
     ValidateUserAction vua = new ValidateUserAction(new SeekerCustomer()); 
     actions.put(vua.getName(), vua); 
     ListNonFriendsAction lnfa = new ListNonFriendsAction(new SeekerCustomer()); 
     actions.put(lnfa.getName(), lnfa); 
     AddFriendAction afa = new AddFriendAction(new SeekerCustomer()); 
     actions.put(afa.getName(), afa); 
     ConfirmFriendReqAction cfra = new ConfirmFriendReqAction(new SeekerCustomer()); 
     actions.put(cfra.getName(),cfra); 
     DeclineFriendReqAction dfra = new DeclineFriendReqAction(new SeekerCustomer()); 
     actions.put(dfra.getName(),dfra); 
     AddImageAction aia = new AddImageAction(new SeekerCustomer()); 
     actions.put(aia.getName(),aia); 
     ViewImageAction via = new ViewImageAction(new SeekerCustomer()); 
     actions.put(via.getName(),via); 
     ViewAllImagesAction vaia = new ViewAllImagesAction(new SeekerCustomer()); 
     actions.put(vaia.getName(),vaia); 
     AddTagAction ata = new AddTagAction(new SeekerCustomer()); 
     actions.put(ata.getName(),ata); 
     ViewTagAction vta = new ViewTagAction(new SeekerCustomer()); 
     actions.put(vta.getName(),vta); 
     ViewAllTagsAction vata = new ViewAllTagsAction(new SeekerCustomer()); 
     actions.put(vata.getName(),vata); 
     ViewProfileAction vpa = new ViewProfileAction(new SeekerCustomer()); 
     actions.put(vpa.getName(),vpa); 
     EditAccountAction epa = new EditAccountAction(new SeekerCustomer()); 
     actions.put(epa.getName(),epa); 
     ViewOthersImageAction voia = new ViewOthersImageAction(new SeekerCustomer()); 
     actions.put(voia.getName(), voia); 
     AddOthersTagAction aota = new AddOthersTagAction(new SeekerCustomer()); 
     actions.put(aota.getName(),aota); 
     LogoutAction loa = new LogoutAction(new SeekerCustomer()); 
     actions.put(loa.getName(), loa); 
     ToptagsAction tts = new ToptagsAction(new SeekerCustomer()); 
     actions.put(tts.getName(), tts); 
     UpdateAccountAction uaa = new UpdateAccountAction(new SeekerCustomer()); 
     actions.put(uaa.getName(), uaa); 
     ViewAllFriendsAction vafa = new ViewAllFriendsAction(new SeekerCustomer()); 
     actions.put(vafa.getName(), vafa); 
     ReturnHomeAction rha = new ReturnHomeAction(new SeekerCustomer()); 
     actions.put(rha.getName(),rha); 
    } 

    public void processRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { 

     //identify the operation from the URL 
     String op = getOperation(req.getRequestURL()); 
     //find and execute corresponding Action 
     Action action = (Action)actions.get(op); 
     Object result = null; 
     try { 
      //maintain the session between requests 
      result = action.perform(req, resp); 
      HttpSession session = req.getSession(); 
      session.setAttribute("session1", result); 
     } catch (NullPointerException npx) { 
      //nothing to handle 
     } 
    } 

    //both GET and POST operations are directed to "processRequest" method 
    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    //uses the URL to identify the operation 
    private String getOperation(StringBuffer requestURL) { 

     String op=""; 
     //identifies the last index of "/" before ".do" and 
     //uses that to put each character after the "/" into "op" 
     for(int i= requestURL.lastIndexOf("/",requestURL.indexOf(".do"))+1; i<requestURL.indexOf(".do"); i++) 
     { 
      op= op+requestURL.charAt(i); 
     } 
     return op; 
    } 
} 

si può vedere che ogni azione viene gestita nel servlet principale con l'invio al servlet più piccoli. quindi, se si fa clic su CreateUserAction, questa azione viene gestita da un servlet CreateUserAction.java, che quindi reindirizza l'output a CreateUserAction.jsp. in questo modo, l'utilizzo di un modello appropriato frammenta il codice in modo tale da trovare facilmente la rispettiva pagina JSP. questo è il punto che sto cercando di fare qui modelli d'uso!

templates-- si potrebbe fare uso di maschere JSP attraverso pagine in modo che avete solo bisogno di modificare il modello di apportare modifiche comuni attraverso le pagine JSP (riferi- http://java.sun.com/developer/technicalArticles/javaserverpages/jsp_templates/)

un modo piuttosto ingenuo sarebbe l'uso Scorciatoie IDE.

+0

Grazie ...! grazie mille ... – water

+0

no probs! e spero davvero che tu non stia semplicemente usando le pagine JSP per la tua applicazione web, piuttosto, usando JSP con servlet e java bean (almeno) come parte del pattern MVC. solo l'utilizzo di JSP potrebbe essere parte della ragione per cui si verificano problemi (ed è una cattiva pratica). –

+0

no no .. Ho seguito rigorosamente il pattern MVC Caro .... ma ci sono un sacco di pagine jsp e tutte sono pagine jsp dinamiche .. .... – water

0

Penso che questo sia più rivolto agli standard di codifica e alle migliori pratiche qui.

  1. Organizza correttamente la tua struttura di applicazione web, meglio usare Mindmap per visualizzare le pagine e l'organizzazione in modo da poter avere sempre un'immagine chiara di dove si trovavano le cose.
  2. Utilizzare un buon strumento IDE per organizzare le attività in base alla pratica di MVC in cui Visualizza per mantenere tutte le pagine JSP. Entro organizzarli con la loro famiglia di componenti e mantenere le pagine JSP comuni utilizzando la cartella comune.
  3. Utilizzare la funzione di ricerca integrata di Eclipse che consente di cercare i contenuti sorgente.
  4. Qualcosa potrebbe essere utile per la manutenzione a lungo termine è quello di mantenere tutto il codice sorgente utilizzando Subversion in modo da poter confrontare varie versioni del codice sorgente dal passato al futuro.
0
  1. Creare coerente convenzione di denominazione per le classi, JSP, quali che siano.
  2. Refactor il codice bease alla convenzione.
  3. Mantenerlo. Nessuna eccezione (se ne hai bisogno, pensa a ridisegnare la convenzione).
  4. Per la transizione, provare a intercettare la fase di rendering e inserire il nome del file JSP in uscita come commento. (forse questo può essere d'aiuto Exec. JSP directly...)