Руководство по Servlets. Заполнение форм.

В данной статье мы рассмотрим заполнение форм при работе с сервлетами.

Часто, нам приходится сталкиваться с ситуацией, когда нам необходимо передать на сервер данные, введённые пользователем.

Для этого мы можем использовать специальные формы, либо передавать параметры в самой ссылке.

Например:


http:somesite.com/search?query=someQuery

В данном случае, мы используем метод GET для получения данных.
Но, чаще всего пользователю необходимо заполнить определённые формы.
Для этого используется метод POST.
Для чтения данных их форм мы можем использовать следующие методы класса HttpServletRequest:

  • getParameter()
    Мы запрашиваем значение определённого параметра формы.
  • getParameterValues()
    С помощью данного метода мы можем получить несколько параметров из формы (checkbox)
  • getParameterNames()
    С помощью этого метода мы можем получить список всех параметров запроса.

Для начала, рассмотрим простой пример получения данных с помощью метода GET.

В качестве основы возьмём проект, созданный в данной статье:

Класс PassingParametersUsingGetMethodDemo


package net.proselyte.servletstutorial;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Servlet that demonstrates passing parameters using method GET.
 *
 * @author Eugene Suleimanov
 */

public class PassingParametersUsingGetMethodDemo extends HttpServlet {

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

        PrintWriter writer = response.getWriter();
        String title = "Passing parameters using GET method";

        String docType = "<!DOCTYPE html>";

        writer.println("<html>" +
                "<head><title>" + title + "</title></head>\n" +
                "<body><h2>Specialty: </h2>" + request.getParameter("specialty") +
                "<h2>Experience: </h2>" + request.getParameter("experience")
                + "</body>" +
                "</html>");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

Файл web.xml


<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Servlets Tutorial</display-name>

    <servlet>
        <servlet-name>SimpleServlet</servlet-name>
        <servlet-class>net.proselyte.servletstutorial.SimpleServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>PassingParametersUsingGetMethodDemo</servlet-name>
        <servlet-class>net.proselyte.servletstutorial.PassingParametersUsingGetMethodDemo</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>SimpleServlet</servlet-name>
        <url-pattern>/SimpleServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>PassingParametersUsingGetMethodDemo</servlet-name>
        <url-pattern>/PassingParametersUsingGetMethodDemo</url-pattern>
    </servlet-mapping>
</web-app>

Выполним следующую команду в консоли:


mvn tomcat7:run

Открываем браузер и переходим по ссылке:


http://localhost:8088/PassingParametersUsingGetMethodDemo?specialty=Java_Developer&experience=5_years

В результате мы получим следующую страницу:

passingParametersUsingGetMethodDemo

Теперь рассмотрим передачу данных с помощью метода POST:

Класс PassingParametersUsingPostMethodDemo


package net.proselyte.servletstutorial;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Servlet that demonstrates passing parameters using method POST.
 *
 * @author Eugene Suleimanov
 */

public class PassingParametersUsingPostMethodDemo extends HttpServlet {

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

        PrintWriter writer = response.getWriter();
        String title = "Passing parameters using POST method";
        String docType = "<!DOCTYPE html>";

        writer.println("<html>" +
                "<head><title>" + title + "</title></head>\n" +
                "<body><h2>Specialty: </h2>" + request.getParameter("specialty") +
                "<h2>Experience: </h2>" + request.getParameter("experience")
                + "</body>" +
                "</html>");
    }

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

Файл web.xml


<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Servlets Tutorial</display-name>

    <servlet>
        <servlet-name>SimpleServlet</servlet-name>
        <servlet-class>net.proselyte.servletstutorial.SimpleServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>PassingParametersUsingGetMethodDemo</servlet-name>
        <servlet-class>net.proselyte.servletstutorial.PassingParametersUsingGetMethodDemo</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>PassingParametersUsingPostMethodDemo</servlet-name>
        <servlet-class>net.proselyte.servletstutorial.PassingParametersUsingPostMethodDemo</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>SimpleServlet</servlet-name>
        <url-pattern>/SimpleServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>PassingParametersUsingGetMethodDemo</servlet-name>
        <url-pattern>/PassingParametersUsingGetMethodDemo</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>PassingParametersUsingPostMethodDemo</servlet-name>
        <url-pattern>/PassingParametersUsingPostMethodDemo</url-pattern>
    </servlet-mapping>
</web-app>

В папке webapp создадим HTML документ:
PassingParametersUsingPostMethodDemo.html


<html>
<body>
<form action="PassingParametersUsingPostMethodDemo" method="POST">
    Specialty: <input type="text" name="specialty"/>
    <br/>
    Experience: <input type="text" name="experience"/>
    <input type="submit" value="Submit"/>
</form>
</body>
</html>

После этого выполним в консоли команду:


mvn tomcat7:run

Откроем браузер и перейдём по данной ссылке:


http://localhost:8088/PassingParametersUsingPostMethodDemo.html

В результате мы получим следующую страницу, в которой есть форма:

fillFormUsingPostMEthodDemoForm

Введя данные и нажав на кнопку Submit мы будем перенаправлены на следующую страницу:

fillFormUsingPostMEthodDemoResult

На этом мы заканчиваем изучение заполнения форм при работе с сервлетами.

В следующей статье мы рассмотрим исключения.