Come passarei i parametri nascosti? Voglio chiamare una pagina (test.jsp) ma anche passare 2 parametri nascosti come un post.Passare parametri nascosti utilizzando response.sendRedirect()
response.sendRedirect("/content/test.jsp");
Come passarei i parametri nascosti? Voglio chiamare una pagina (test.jsp) ma anche passare 2 parametri nascosti come un post.Passare parametri nascosti utilizzando response.sendRedirect()
response.sendRedirect("/content/test.jsp");
TheNewIdiot's answer spiega correttamente il problema e il motivo per cui non è possibile inviare attributi in richiesta tramite un reindirizzamento. Possibili soluzioni:
Utilizzo di inoltro. Ciò consentirà che gli attributi di richiesta possano essere passati alla vista e che sia possibile utilizzarli in forma di ServletRequest#getAttribute
o utilizzando Expression Language e JSTL. Breve esempio (riutilizzo del codice di risposta di TheNewIdiot)).
Controller (il vostro servlet)
request.setAttribute("message", "Hello world");
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
View (JSP)
Uso scriptlet:
<%
out.println(request.getAttribute("message"));
%>
Questo è solo per scopi informativi . L'utilizzo degli scriptlet deve essere evitato: How to avoid Java code in JSP files?. Sotto c'è l'esempio usando EL e JSTL.
<c:out value="${message}" />
Se non è possibile utilizzare l'inoltro (perché non ti piace o non ti senti in questo modo, o perché è necessario utilizzare un redirect), allora l'opzione sarebbe il salvataggio di un messaggio come attributo di sessione, quindi reindirizzare alla vista, ripristinare l'attributo di sessione nella vista e rimuoverlo dalla sessione. dalla sessione. Ricorda di avere sempre la tua sessione utente con solo i dati rilevanti. Esempio di codice
controller
//if request is not from HttpServletRequest, you should do a typecast before
HttpSession session = request.getSession(false);
//save message in session
session.setAttribute("helloWorld", "Hello world");
response.sendRedirect("/content/test.jsp");
View
Anche in questo caso, che mostra questo utilizzando scriptlet e quindi EL + JSTL:
<%
out.println(session.getAttribute("message"));
session.removeAttribute("message");
%>
<c:out value="${sessionScope.message}" />
<c:remove var="message" scope="session" />
In genere, non è possibile inviare una richiesta POST utilizzando sendRedirect() metodo. È possibile utilizzare RequestDispatcher a forward() richieste con parametri all'interno della stessa applicazione Web, stesso contesto.
RequestDispatcher dispatcher = servletContext().getRequestDispatcher("test.jsp");
dispatcher.forward(request, response);
La specifica HTTP indica che tutti i reindirizzamenti devono essere sotto forma di GET (o HEAD). È possibile prendere in considerazione la crittografia dei parametri della stringa di query se la sicurezza è un problema. Un altro modo è POSSIBILIZZARE il bersaglio avendo un modulo nascosto con il metodo POST e inviandolo con javascript quando la pagina viene caricata.
Cosa posso usare invece, qualsiasi altra funzione ??? –
@AshishAnand Vedere la mia risposta modificata, è possibile utilizzare 'RequestDispatcher' nella stessa app Web. – NINCOMPOOP
Utilizzando session
, ho superato con successo un parametro (name
) dal servlet # 1 al servlet # 2, usando response.sendRedirect
nel servlet # 1.Servlet # 1 Codice:
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String name = request.getParameter("name");
String password = request.getParameter("password");
...
request.getSession().setAttribute("name", name);
response.sendRedirect("/todo.do");
In Servlet # 2, non è necessario per ottenere name
indietro. È già connesso alla sessione. Potresti fare String name = (String) request.getSession().getAttribute("name");
--- ma non ne hai bisogno.
Se Servlet # 2 chiama una JSP, è possibile mostrare name
in questo modo sulla pagina web JSP:
<h1>Welcome ${name}</h1>
@ informatik01 mia risposta copre quello coperto nella vostra eccezione del fatto che la mia aggiunge la vista parte di rimozione attributo di sessione usando JSTL. –
@LuiggiMendoza Scusa amico, eliminerò il mio commento per assicurarmi che tu stia bene. A proposito, questa risposta è stata pubblicata circa 5 mesi fa) – informatik01
@ informatik01 non sapeva del tuo post, ma sembra che entrambi sappiamo (tra le altre persone in tutto il mondo) come gestire questo problema. –