Вызов сервлета из кода Java

В настоящее время я пытаюсь завершить систему входа в систему, используя jsp и сервлеты. У меня работает регистрация и проверка входа.

Я хочу сделать ссылку на страницу приветствия после входа в систему, чтобы отобразить информацию о профиле пользователя. У меня был, только для целей тестирования, response.sendRedirect(welcome.jsp), который перенаправлялся после успешного входа в систему с помощью сервлета входа.

Теперь, чтобы отобразить информацию о профиле на этой странице приветствия, я собирался использовать сервлет для сбора информации из базы данных и отображения ее в браузере с помощью принтера. Как мне успешно вызвать этот сервлет из сервлета входа в систему, чтобы запустить метод 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>");

}
}

person SteveK    schedule 02.05.2014    source источник


Ответы (2)


Вы не можете перенаправить с помощью POST, только с помощью GET. Поскольку вы просто отображаете HTML в WelcomeServlet, переместите код из doPost в doGet или сделайте так, чтобы один вызывал другой, что просто заставляет их обоих делать одно и то же.

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 {
   doPost(request, response);
 }

Кроме того, было бы лучше использовать JSP, чем out.print кучу HTML внутри сервлета. См. информационную страницу для сервлетов.

Кроме того, очевидно, что ваша страница приветствия должна прочитать атрибут currentSessionUser из сеанса и убедиться, что это не null, чтобы увидеть, действительно ли пользователь вошел в систему или нет. В противном случае, если пользователь знает адрес страницы приветствия, он может просто обойти проверку входа, как сейчас.

person developerwjk    schedule 02.05.2014

Ваша проблема в том, что вы в настоящее время реализовали свой сервлет для ответа на неправильный HTTP-глагол.

Вы заметите, что сервлет имеет методы as doPost и doGet. Как и следовало ожидать, они сопоставляются с запросами HTTP GET и HTTP POST. Ваша текущая проблема связана с тем, что вы внедрили метод doPost в свой WelcomeServlet, поэтому ожидаете запрос POST, когда он фактически будет обслуживать запрос GET.

Говоря очень грубо, вы можете думать о GET-запросах как о операциях чтения, а о POST-запросах — как о операциях записи. Поэтому, когда вы отправляете форму для сохранения некоторых данных, это обычно обрабатывается запросом POST. Вы в основном просите записать данные в базу данных или сеанс. Когда вы загружаете веб-страницу, это обычно обрабатывается как запрос GET. Вы просто просите прочитать данные.

Опять же упрощение, но перенаправления, как правило, GET-запросы. Поэтому ваш сервлет должен будет реализовать метод doGet() для ответа на запрос GET браузера после его перенаправления.

person Rob Blake    schedule 02.05.2014