我正在尝试做一些看起来很小但却失败的事情。我正在尝试在登录失败时将响应消息发送回jsp但不能。截至目前,我只能重定向回jsp,但无法显示来自servlet的消息。这是重定向的servlet部分:
if (count > 0) {
res.sendRedirect("adminHome.jsp");
} else {
res.sendRedirect("index.jsp");
}
我尝试使用PrintWriter和重定向打印消息但失败了,因为我无法获得如何在JSP中接收消息。我还读到我不应该重定向,而是应该从servlet转发。我怎样才能做到这一点?请帮助从servlet转发代码补丁以及在JSP中接收的代码补丁。感谢
答案 0 :(得分:33)
如果你坚持使用重定向而不是前进,那么你有两个选择:
将消息作为请求参数传递
String message = "hello";
res.sendRedirect("adminHome.jsp?message=" + URLEncoder.encode(message, "UTF-8"));
以便您可以在JSP中显示它,如下所示
<p>Message: ${param.message}</p>
它仅在浏览器地址栏中可见,并且您无法以这种方式传递非标准Java对象。
将其存储在会话中
String message = "hello";
req.getSession().setAttribute("message", message);
res.sendRedirect("adminHome.jsp");
以便您可以在JSP中显示(并删除),如下所示:
<p>Message: ${message}</p>
<c:remove var="message" scope="session" />
删除非常重要,否则会在整个会话期间进行删除。
但是,如果你愿意使用forward而不是重定向,那就更优雅了:
String message = "hello";
req.setAttribute("message", message);
req.getRequestDispatcher("/adminHome.jsp").forward(req, res);
并在JSP
中显示如下 <p>Message: ${message}</p>
${}
事物的内容。答案 1 :(得分:3)
将您的消息设置为请求对象的属性:
request.setAttribute("message", messageString);
使用RequestDispatcher将请求和响应对象分派给jsp:
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("urlString");
dispatcher.forward(request, response);
使用表达式语言语法在JSP中访问它:
${message}
答案 2 :(得分:2)
您可以将消息保存在请求中,然后转发到jsp而不是重定向。
request.setAttribute("msg", "The actual error message to be displayed");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/yourpage.jsp");
rd.forward(request, response);
然后在jsp页面上,您可以通过请求访问该消息。