从Java代码调用servlet

时间:2014-05-02 21:08:22

标签: java jsp servlets

我目前正在尝试使用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>");

}
}

2 个答案:

答案 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具有doPostdoGet方法。正如您可能希望这些映射到HTTP GET和HTTP POST请求。您当前的问题源于这样一个事实:您已经在doPost中实现了WelcomeServlet方法因此期望POST请求,当它实际上将提供GET请求时。

非常粗略地说,您可以将GET请求视为读取操作,将POST请求视为写入操作。因此,当您提交表单以保存某些数据时,通常会处理POST请求。您基本上要求将数据写入数据库或会话。加载网页时,通常将其作为GET请求处理。您只是要求阅读数据。

再次简化,但重定向通常是GET请求。因此,您的Servlet需要实现doGet()方法,以便在重定向后响应浏览器GET请求。