我目前正在尝试使用jsp和servlets完成登录系统。我的注册和登录验证工作正常。
我希望在登录后链接到欢迎页面以显示用户个人资料信息。 出于测试目的,我有一个response.sendRedirect(welcome.jsp),它在登录servlet成功登录后重定向。
现在,要在此欢迎页面上显示配置文件信息,我将使用servlet从数据库中收集信息并使用printwriter将其呈现给浏览器。 如何从loginservlet成功调用此servlet以运行doPost()方法? 或者有更好的方法吗?
感谢您的时间。
(为了简单起见,我只是试图让一个基本的网页首先出现以确保它正常工作,一旦我开始这样做,我将对数据库方面没有任何问题)
登录服务器:
package logon;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try
{
System.out.println("In the Login Servlet");
User user = new User();
user.setEmail(request.getParameter("email"));
user.setPassword(request.getParameter("password"));
LoginDAO.login(user);
if(user.isValid())
{
HttpSession session = request.getSession(true);
session.setAttribute("currentSessionUser",user);
session.setAttribute("currentSessionUserEmail", user.getEmail());
response.sendRedirect("WelcomeServlet");
}else
response.sendRedirect("LoginFailure.html");
} catch (Throwable exc)
{
System.out.println(exc);
}
}
}
欢迎服务:
package logon;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/WelcomeServlet")
public class WelcomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public WelcomeServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.print("<html>"+"<head>"+"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">");
out.print("<title>Welcome</title>");
out.print("</head>"+"<body>");
out.print("Welcome to the welcome page!!!");
out.print("</body>"+"</html>");
}
}
答案 0 :(得分:1)
您无法使用POST重定向,只能使用GET。因为你只是在WelcomeServlet中显示HTML,所以将代码从doPost移动到doGet,或者让一个调用另一个,这只会使它们都做同样的事情。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
此外,使用JSP比在servlet中使用一堆HTML更好out.print
。请参阅info page for servlets。
另外,显然您的欢迎页面需要从会话中读取属性currentSessionUser
并确保其不是null
以查看用户是否确实已登录。否则,如果用户知道欢迎页面的地址,他们现在就可以绕过您的登录检查。
答案 1 :(得分:1)
您的问题是您当前已实施Servlet以响应错误的HTTP动词。
您会注意到servlet具有doPost
和doGet
方法。正如您可能希望这些映射到HTTP GET和HTTP POST请求。您当前的问题源于这样一个事实:您已经在doPost
中实现了WelcomeServlet
方法因此期望POST请求,当它实际上将提供GET请求时。
非常粗略地说,您可以将GET请求视为读取操作,将POST请求视为写入操作。因此,当您提交表单以保存某些数据时,通常会处理POST请求。您基本上要求将数据写入数据库或会话。加载网页时,通常将其作为GET请求处理。您只是要求阅读数据。
再次简化,但重定向通常是GET请求。因此,您的Servlet需要实现doGet()
方法,以便在重定向后响应浏览器GET请求。