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.
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
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. –
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