Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java代码调用servlet_Java_Jsp_Servlets - Fatal编程技术网

从Java代码调用servlet

从Java代码调用servlet,java,jsp,servlets,Java,Jsp,Servlets,我目前正在尝试使用jsp和servlet完成一个登录系统。我的注册和登录验证正在工作 我希望在登录后链接到欢迎页面,以显示用户配置文件信息。 出于测试目的,我有一个response.sendRedirect(welcome.jsp),它在登录servlet成功登录后重定向 现在,为了在这个欢迎页面上显示概要信息,我将使用servlet从数据库收集信息,并使用printwriter将其呈现给浏览器。 如何从loginservlet成功调用此servlet以运行doPost()方法? 还是有更好的方

我目前正在尝试使用jsp和servlet完成一个登录系统。我的注册和登录验证正在工作

我希望在登录后链接到欢迎页面,以显示用户配置文件信息。 出于测试目的,我有一个response.sendRedirect(welcome.jsp),它在登录servlet成功登录后重定向

现在,为了在这个欢迎页面上显示概要信息,我将使用servlet从数据库收集信息,并使用printwriter将其呈现给浏览器。 如何从loginservlet成功调用此servlet以运行doPost()方法? 还是有更好的方法

谢谢你抽出时间

(为了简单起见,我只是想让一个基本的网页先出现,以确保这是工作我将不会有任何问题与数据库方面的事情,一旦我得到了这一点)

登录SERVLET:

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>");

}
}
包登录;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
@WebServlet(“/WelcomeServlet”)
公共类WelcomeServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
公共福利{
超级();
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
}
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
打印(“+”+);
打印(“欢迎”);
输出。打印(“+”);
打印(“欢迎来到欢迎页面!!!”;
输出。打印(“+”);
}
}

不能使用POST重定向,只能使用GET。因为您只是在WelcomeServlet中显示HTML,所以将代码从doPost移动到doGet,或者让一个调用另一个,这只会使它们都做相同的事情

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 {
   doPost(request, response);
 }
此外,使用JSP比在servlet中打印一堆HTML要好。看


另外,显然您的欢迎页面需要从会话中读取属性
currentSessionUser
,并确保其不是
null
,以查看用户是否真正登录。否则,如果用户知道欢迎页面的地址,他们可以跳过您现在的登录检查。

您的问题是,您当前实现的Servlet响应了错误的HTTP谓词

您会注意到servlet有as
doPost
doGet
方法。正如您可能期望的那样,这些映射到HTTPGET和HTTPPOST请求上。您当前的问题源于这样一个事实:您已经在
WelcomeServlet
中实现了
doPost
方法,因此需要POST请求,而实际上它将为GET请求提供服务

简而言之,您可以将GET请求视为读取操作,将POST请求视为写入操作。因此,当您提交表单以保存一些数据时,这通常是通过POST请求来处理的。您基本上要求将数据写入数据库或会话。加载网页时,这通常作为GET请求处理。您只是要求读取数据

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