从Java代码调用servlet
我目前正在尝试使用jsp和servlet完成一个登录系统。我的注册和登录验证正在工作 我希望在登录后链接到欢迎页面,以显示用户配置文件信息。 出于测试目的,我有一个response.sendRedirect(welcome.jsp),它在登录servlet成功登录后重定向 现在,为了在这个欢迎页面上显示概要信息,我将使用servlet从数据库收集信息,并使用printwriter将其呈现给浏览器。 如何从loginservlet成功调用此servlet以运行doPost()方法? 还是有更好的方法 谢谢你抽出时间 (为了简单起见,我只是想让一个基本的网页先出现,以确保这是工作我将不会有任何问题与数据库方面的事情,一旦我得到了这一点) 登录SERVLET:从Java代码调用servlet,java,jsp,servlets,Java,Jsp,Servlets,我目前正在尝试使用jsp和servlet完成一个登录系统。我的注册和登录验证正在工作 我希望在登录后链接到欢迎页面,以显示用户配置文件信息。 出于测试目的,我有一个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>");
}
}
包登录;
导入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有asdoPost
和doGet
方法。正如您可能期望的那样,这些映射到HTTPGET和HTTPPOST请求上。您当前的问题源于这样一个事实:您已经在WelcomeServlet
中实现了doPost
方法,因此需要POST请求,而实际上它将为GET请求提供服务
简而言之,您可以将GET请求视为读取操作,将POST请求视为写入操作。因此,当您提交表单以保存一些数据时,这通常是通过POST请求来处理的。您基本上要求将数据写入数据库或会话。加载网页时,这通常作为GET请求处理。您只是要求读取数据
再次简化,但重定向通常是GET请求。因此,Servlet需要实现doGet()
方法,以便在重新定向后响应浏览器GET请求