How would I pass hidden parameters? I want to call a page (test.jsp) but also pass 2 hidden parameters like a post.
response.sendRedirect("/content/test.jsp");
Advertisement
Answer
TheNewIdiot’s answer successfully explains the problem and the reason why you can’t send attributes in request through a redirect. Possible solutions:
Using forwarding. This will enable that request attributes could be passed to the view and you can use them in form of
ServletRequest#getAttribute
or by using Expression Language and JSTL. Short example (reusing TheNewIdiot’s answer] code).Controller (your servlet)
request.setAttribute("message", "Hello world"); RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url); dispatcher.forward(request, response);
View (your JSP)
Using scriptlets:
<% out.println(request.getAttribute("message")); %>
This is just for information purposes. Scriptlets usage must be avoided: How to avoid Java code in JSP files?. Below there is the example using EL and JSTL.
<c:out value="${message}" />
If you can’t use forwarding (because you don’t like it or you don’t feel it that way or because you must use a redirect) then an option would be saving a message as a session attribute, then redirect to your view, recover the session attribute in your view and remove it from session. Remember to always have your user session with only relevant data. Code example
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
Again, showing this using scriptlets and then EL + JSTL:
<% out.println(session.getAttribute("message")); session.removeAttribute("message"); %> <c:out value="${sessionScope.message}" /> <c:remove var="message" scope="session" />