Как получить параметр формы в сервлете? request.getAttribute не работает - PullRequest
3 голосов
/ 19 февраля 2010

Возможно ли, чтобы один и тот же сервлет выполнял проверку? Кажется, что здесь, возможно, придется использовать какую-то рекурсию, но когда я что-то набираю в почтовом ящике и нажимаю «отправить», параметр электронной почты остается пустым. После того как я нажму на кнопку отправить, URL изменится на: http://localhost/servlet/EmailServlet?Email=test

На странице отображается Email: null и текстовое поле, но я ожидал, что оно пройдет через функцию проверки (т. Е. Не будет нулевым). Возможно ли достичь такого типа рекурсивного поведения?

public class EmailServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, 
            HttpServletResponse response) throws ServletException, IOException 
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        String theForm =
            "<FORM METHOD=\"GET\" ACTION=\"EmailServlet\">\n<INPUT TYPE=\"TEXT\" NAME=\"Email\"><P>\n" 
            + "<INPUT TYPE=\"SUBMIT\">\n</FORM>";
        String email = (String) request.getAttribute("Email");

        // Bogus email validation...
        if( email == null )
        {
            out.println("Email: " + email + "\n" + theForm);
        }
        else if(emailAddressNotBogous(email))
        {
            out.println("Thank you!");
        }
        else
        {
            out.println("“Invalid input. Please try again:\n" + theForm);
        }
        out.flush();        
    }
}

Обновление: как указано в принятом ответе, в коде произошла ошибка. Изменение getAttribute для getParameter устраняет «проблему» :).

String email = (String) request. getAttribute getParameter ("Email");

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

Чтобы получить параметр формы в сервлете, вы используете:

  request.getParameter("Email");

И да, вы можете использовать один и тот же сервлет, но для этого было бы проще использовать два разных сервлета.

1 голос
/ 19 февраля 2010

вы можете установить метод формы в POST, а затем реализовать метод doPost () в вашем сервлете.doGet () будет вызван для отображения формы, а doPost () будет вызван для обработки отправки формы.

в качестве альтернативы вы можете проверить метод doGet () на наличие каких-либо параметров.если их нет, просто отобразите форму.если есть, то обработать представление ...

...