我正在尝试做一些看起来很小但却失败的事情.我正在尝试在登录失败时将响应消息发送回jsp但不能.截至目前,我只能重定向回jsp,但无法显示来自servlet的消息.这是重定向的servlet部分:
if (count > 0) {
res.sendRedirect("adminHome.jsp");
} else {
res.sendRedirect("index.jsp");
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用PrintWriter和重定向打印消息但失败了,因为我无法获得如何在JSP中接收消息.我还读到我不应该重定向,而是应该从servlet转发.我怎样才能做到这一点?请帮助从servlet转发代码补丁以及在JSP中接收的代码补丁.谢谢
Bal*_*usC 34
如果你坚持使用重定向而不是前进,那么你有2个选择:
将消息作为请求参数传递
String message = "hello";
res.sendRedirect("adminHome.jsp?message=" + URLEncoder.encode(message, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)
以便您可以在JSP中显示它,如下所示
<p>Message: ${param.message}</p>
Run Code Online (Sandbox Code Playgroud)
它只在浏览器地址栏中可见,并且您无法以这种方式传递非标准Java对象.
将其存储在会话中
String message = "hello";
req.getSession().setAttribute("message", message);
res.sendRedirect("adminHome.jsp");
Run Code Online (Sandbox Code Playgroud)
这样你就可以在JSP中显示(和删除)它,如下所示:
<p>Message: ${message}</p>
<c:remove var="message" scope="session" />
Run Code Online (Sandbox Code Playgroud)
删除很重要,否则它会在整个会话期间坚持下去.
但是,如果您愿意使用forward而不是重定向,那么它会更优雅:
String message = "hello";
req.setAttribute("message", message);
req.getRequestDispatcher("/adminHome.jsp").forward(req, res);
Run Code Online (Sandbox Code Playgroud)
并在JSP中显示如下
<p>Message: ${message}</p>
Run Code Online (Sandbox Code Playgroud)
${}
事情.