我如何传递隐藏参数?我想调用一个页面(test.jsp),但也传递2个隐藏参数,如帖子。
response.sendRedirect("/content/test.jsp");
答案 0 :(得分:44)
TheNewIdiot's answer成功解释了问题以及无法通过重定向在请求中发送属性的原因。可能的解决方案:
使用转发。这样,我们就可以将请求属性传递给视图,您可以ServletRequest#getAttribute
的形式使用它们,也可以使用Expression Language和JSTL。简短的例子(重用TheNewIdiot的答案)代码。)
控制器(您的servlet)
request.setAttribute("message", "Hello world");
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
查看(您的JSP)
使用scriptlet:
<%
out.println(request.getAttribute("message"));
%>
这仅用于信息目的。必须避免使用的Scriptlet :How to avoid Java code in JSP files?。下面是使用EL和JSTL的示例。
<c:out value="${message}" />
如果您不能使用转发(因为您不喜欢它或者您不这么认为或者您必须使用重定向),那么选项会将消息保存为会话属性,然后重定向到您的视图,恢复视图中的会话属性,并从会话中将其删除。请记住始终只使用相关数据进行用户会话。代码示例
<强>控制器强>
//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");
查看强>
再次,使用scriptlet然后使用EL + JSTL显示:
<%
out.println(session.getAttribute("message"));
session.removeAttribute("message");
%>
<c:out value="${sessionScope.message}" />
<c:remove var="message" scope="session" />
答案 1 :(得分:4)
通常,您无法使用sendRedirect()方法发送POST请求。您可以在同一个Web应用程序中使用RequestDispatcher forward()个{{3}}个请求,相同的上下文。
RequestDispatcher dispatcher = servletContext().getRequestDispatcher("test.jsp");
dispatcher.forward(request, response);
HTTP规范声明所有重定向必须采用GET(或HEAD)的形式。 如果安全性存在问题,您可以考虑加密查询字符串参数。 另一种方法是你可以通过方法POST隐藏表单并在加载页面时使用javascript提交它来POST到目标。
答案 2 :(得分:0)
使用session
,我使用servlet#1中的name
成功地将参数(response.sendRedirect
)从servlet#1传递到servlet#2。 Servlet#1代码:
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");
在Servlet#2中,您无需返回name
。它已经连接到会话。你可以做String name = (String) request.getSession().getAttribute("name");
---但你不需要这个。
如果Servlet#2调用JSP,您可以在JSP网页上以这种方式显示name
:
<h1>Welcome ${name}</h1>
答案 3 :(得分:-1)
通过URL在response.sendRedirect()中发送变量值。我已经将其用于一个变量,也可以通过适当的串联将其用于两个变量。
String value =“ xyz”;
response.sendRedirect(“ / content / test.jsp?var =” + value);