English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Во многих случаях необходимо передавать информацию от браузера к веб-серверу, а затем к фоновому процессу. Браузер использует два метода для передачи этой информации на веб-сервер: методы GET и POST.
Метод GET отправляет закодированные данные пользователя на страницу. Параметры и закодированные данные разделены символом ?, например:
http://www.test.com/hello?key1=value1&key2=value2
Метод GET является стандартным способом передачи информации от браузера к веб-серверу, он создает очень длинную строку,出现的浏览器的 адресной строке. Если вы хотите передать на сервер пароль или другие конфиденциальные данные, не используйте метод GET. Метод GET имеет ограничение по размеру: в строке запроса может быть максимум 1024 символов.
Эти данные передаются через заголовок QUERY_STRING и могут быть получены через переменную окружения QUERY_STRING, Servlet использует doGet() обрабатывает такие запросы.
Одна из более надежных методов передачи информации в фоновый процесс - это метод POST. Метод POST打包信息 аналогично методу GET, но информация не отправляется в виде текстовой строки после знака вопроса в URL, а как отдельное сообщение. Сообщение передается в фоновый процесс в виде стандартного вывода, и вы можете анализировать и использовать эти стандартные выводы. Servlet обрабатывает такие запросы с помощью метода doPost().
Servlet обрабатывает данные формы, которые автоматически анализируются различными методами в зависимости от ситуации:
getParameter()Вы можете вызвать метод request.getParameter() для получения значения параметра формы.
getParameterValues():Если параметр встречается более одного раза, вызовите этот метод и верните несколько значений, например, флажки.
getParameterNames():Если вы хотите получить полный список всех параметров текущего запроса, вызовите этот метод.
Вот простая URL, которая будет использовать метод GET для передачи двух значений в программу HelloForm.
http://localhost:8080/TomcatTest/HelloForm?name=Основной учебник сети&url=ru.oldtoolbag.com
Вот пример обработки ввода веб-браузера: HelloForm.java Программа Servlet. Мы будем использовать getParameter() Метод, который позволяет легко получить переданные данные:
package com.w3codebox.test; 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; /** * Класс реализации Servlet HelloForm */ @WebServlet("/HelloForm") public class HelloForm extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloForm() { super(); // TODO Автоматически сгенерированный конструктор шаблона } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "Использование метода GET для чтения данных формы"; // Обработка китайского языка String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8"); String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<ul>\n" + "<li><b>Имя сайта</b> :" + name + "\n" + "<li><b>Адрес</b> :" + request.getParameter("url") + "\n" + "</ul>\n" + "</body></html> } // Обработка метода запроса POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Затем мы в web.xml Создайте следующие записи в файле:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>HelloForm</servlet-name> <servlet-class>com.w3codebox.test.HelloForm</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloForm</servlet-name> <url-pattern>/TomcatTest/HelloForm</url-pattern> </servlet-mapping> </web-app>
Теперь введите адрес в строке адреса браузера: http://localhost:8080/TomcatTest/HelloForm?name=Основной учебник сети&url=ru.oldtoolbag.com Убедитесь, что Tomcat сервер уже запущен перед выполнением вышеуказанных команд. Если все идет хорошо, вы получите следующий результат:
Вот простой пример, который использует HTML-форму и кнопку отправки для передачи двух значений. Мы будем использовать один и тот же Servlet HelloForm для обработки ввода.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Основной учебник сайта (oldtoolbag.com)</title> </head> <body> <form action="HelloForm" method="GET"> Имя сайта: <input type="text" name="name"> <br /> Адрес сайта: <input type="text" name="url" /> <input type="submit" value="Подтвердить" /> </form> </body> </html>
Сохраните этот HTML в файл hello.html, структура каталога приведена ниже:
Попробуйте ввести имя веб-сайта и адрес, а затем нажмите кнопку "Подтвердить", как показано ниже:
Давайте внесем небольшие изменения в приведенный выше Servlet, чтобы он мог обрабатывать методы GET и POST. Ниже приведен пример использования метода POST формы: HelloForm.java Servlet-программа использует методы GET и POST для обработки ввода, предоставляемого веб-браузером.
Примечание: если данные формы содержат китайские данные,则需要 кодировать:
String name = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
package com.w3codebox.test; 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; /** * Класс реализации Servlet HelloForm */ @WebServlet("/HelloForm") public class HelloForm extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloForm() { super(); // TODO Автоматически сгенерированный конструктор шаблона } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "Чтение данных формы с помощью метода POST"; // Обработка китайского языка String name = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8"); String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<ul>\n" + "<li><b>Имя сайта</b> :" + name + "\n" + "<li><b>Адрес</b> :" + request.getParameter("url") + "\n" + "</ul>\n" + "</body></html> } // Обработка метода запроса POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Теперь скомпилируйте и разверните приведенный выше Servlet и проверьте его с помощью hello.html, который использует метод POST, как показано ниже:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Основной учебник сайта (oldtoolbag.com)</title> </head> <body> <form action="HelloForm" method="POST"> Имя сайта: <input type="text" name="name"> <br /> Адрес сайта: <input type="text" name="url" /> <input type="submit" value="Подтвердить" /> </form> </body> </html>
Ниже приведен реальный вывод上面 приведенной формы. Введите имя сайта и адрес сайта, затем нажмите кнопку "Подтвердить", как показано ниже:
Флажки используются для выбора одной или нескольких опций.
Ниже приведен пример HTML-кода checkbox.html, форма с двумя флажками.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Основной учебник сайта (oldtoolbag.com)</title> </head> <body> <form action="CheckBox" method="POST" target="_blank"> <input type="checkbox" name="w3codebox" checked="checked" /> Основной учебный ресурс <input type="checkbox" name="google" /> Google <input type="checkbox" name="taobao" checked="checked" /> Таobao <input type="submit" value="Выбрать сайт" /> </form> </body> </html>
Ниже приведен класс Servlet CheckBox.java, который обрабатывает ввод флажков, предоставленный веб-браузером.
package com.w3codebox.test; 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; /** * Класс реализации сервлета CheckBox */ @WebServlet("/CheckBox") public class CheckBox extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "Чтение данных флажков"; String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<ul>\n" + " <li><b>Цзиньъяо по учебнику идентификатор:</b>: " + request.getParameter("w3codebox") + "\n" + " <li><b>Google идентификатор:</b>: " + request.getParameter("google") + "\n" + " <li><b>Таobao идентификатор:</b>: " + request.getParameter("taobao") + "\n" + "</ul>\n" + "</body></html> } // Обработка метода запроса POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Установите соответствующий web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>CheckBox</servlet-name> <servlet-class>com.w3codebox.test.CheckBox</servlet-class> </servlet> <servlet-mapping> <servlet-name>CheckBox</servlet-name> <url-pattern>/TomcatTest/CheckBox</url-pattern> </servlet-mapping> </web-app>
Адрес доступа к примеру: http://localhost:8080/TomcatTest/checkbox.html , посмотрите на результат.
Ниже приведен общепринятый пример, использующий HttpServletRequest getParameterNames() метод для чтения всех доступных формальных параметров. Этот метод возвращает энумерацию, которая содержит имена параметров без указанного порядка.
Как только у нас есть энумерация, мы можем циклически перебирать энумерацию стандартным образом, используя hasMoreElements() метод для определения момента остановки, используя nextElement() метод для получения имен каждого параметра.
import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Класс реализации сервлета ReadParams */ @WebServlet("/ReadParams") public class ReadParams extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ReadParams() { super(); // TODO Автоматически сгенерированный конструктор шаблона } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = \ String docType = ; "<!doctype html public \ "transitional//en\">\n" out.println(docType + "<html>\n" + "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<table width=\"100%\" border=\"1\" align=\"center\">\n" + "<tr bgcolor=\"#949494\">\n" + "<th>参数名称</th><th>参数值</th>\n"+ "</tr>\n"); Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String[] paramValues = ; request.getParameterValues(paramName); // Чтение данных одного значения if (paramValues.length == 1) { String paramValue = paramValues[0]; if (paramValue.length() == 0) out.println("<td><i>Нет значений</i></td>"); else out.println("<td>" + paramValue + "</td>"); } // Чтение данных нескольких значений out.println("<td><ul>"); for(int i=0; i < paramValues.length; i++) { out.println("<li>" + paramValues[i]); } out.println("</ul></td>"); } out.print("</tr>"); } out.println("\n</table>\n</body></html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Автоматически сгенерированный метод doGet(request, response); } }
Теперь попробуйте上面的 Servlet через следующую форму:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Основной учебник сайта (oldtoolbag.com)</title> </head> <body> <form action="ReadParams" method="POST" target="_blank"> <input type="checkbox" name="maths" checked="checked" /> Математика <input type="checkbox" name="physics" /> Физика <input type="checkbox" name="chemistry" checked="checked" /> Химия <input type="submit" value="Выберите предмет" /> </form> </body> </html>
Установите соответствующий web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>ReadParams</servlet-name> <servlet-class>com.w3codebox.test.ReadParams</servlet-class> </servlet> <servlet-mapping> <servlet-name>ReadParams</servlet-name> <url-pattern>/TomcatTest/ReadParams</url-pattern> </servlet-mapping> </web-app>
Теперь вызовите Servlet из вышеуказанной формы, адрес доступа: http://localhost:8080/TomcatTest/test.html, чтобы увидеть результат.
Вы можете попробовать использовать上面的 Servlet для чтения других данных форм, например текстовых полей, флажков или выпадающих списков и т.д.