JSP Обработка форм
Когда мы просматриваем веб-страницы, нам часто нужно отправить информацию на сервер и позволить серверной программе обработать её. В браузере для отправки данных на сервер используются методы GET и POST.
Метод GET
Метод GET добавляет закодированную информацию запроса после URL, отделяя URL и закодированную информацию знаком "?". Как показано ниже:
http://www.example.com/hello?key1=value1&key2=value2
Метод GET — это метод браузера по умолчанию для передачи параметров. Для конфиденциальной информации, такой как пароли, не рекомендуется использовать метод GET.
При использовании GET существует ограничение на размер передаваемых данных (обратите внимание, что это не ограничение на количество параметров), максимум 1024 bytes.
Метод POST
Некоторую конфиденциальную информацию, например пароли, можно передавать через метод POST; отправка данных методом POST является неявной.
Данные, отправленные методом POST, не видны, тогда как GET передаёт данные через URL (можно посмотреть в адресной строке браузера).
JSP использует getParameter() для получения переданных параметров, а метод getInputStream() используется для обработки запросов из двоичного потока данных клиента.
Чтение данных формы в JSP
getParameter():Используйте метод request.getParameter() для получения значений параметров формы.
getParameterValues():Получение данных таких типов, как checkbox (одно имя, но несколько значений). Принимает переменные-массивы, например, типа checkbox.
getParameterNames():Этот метод позволяет получить имена всех переменных и возвращает Enumeration.
getInputStream():Вызовите этот метод, чтобы прочитать потоки двоичных данных от клиента.
Пример использования метода GET с URL
Ниже приведён простой URL, который использует метод GET для передачи параметров в URL:
http://localhost:8080/testjsp/main.jsp?name=Example&url=http://ww.example.com
testjsp — адрес проекта.
Ниже приведена JSP-программа в файле main.jsp, используемая для обработки данных формы, отправленных клиентом. Мы используем метод getParameter() для получения отправленных данных:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h1>使用 GET 方法读取数据</h1>
<ul>
<li><p><b>站点名:</b>
<%= request.getParameter("name")%>
</p></li>
<li><p><b>网址:</b>
<%= request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>
Затем мы обращаемся к нему через браузерhttp://localhost:8080/testjsp/main.jsp?name=Example&url=http://ww.example.comРезультат вывода следующий:

Пример использования метода GET с формой
Ниже приведена простая HTML-форма, которая отправляет данные клиента через метод GET вmain.jspв файле:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="main.jsp" method="GET"> 站点名: <input type="text" name="name"> <br /> 网址: <input type="text" name="url" /> <input type="submit" value="提交" /> </form> </body> </html>
Сохраните приведённый выше HTML-код в файл test.htm. Поместите файл в каталог WebContent текущего JSP-проекта (тот же каталог, что и main.jsp).
При доступе кhttp://localhost:8080/testjsp/test.htmlотправьте данные формы в файл main.jsp, демонстрационный GIF показан ниже:

Заполните информацию в полях формы «Название сайта» и «URL» и нажмите кнопку «Отправить», результат будет выведен.
Пример использования метода POST с формой
Далее давайте используем метод POST для передачи данных формы. Измените код в файлах main.jsp и Hello.htm, как показано ниже:
Код файла main.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h1>使用 POST 方法读取数据</h1>
<ul>
<li><p><b>站点名:</b>
<%
// 解决中文乱码的问题
String name = new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8");
%>
<%=name%>
</p></li>
<li><p><b>网址:</b>
<%= request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>
В коде мы используемnew String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8")для преобразования кодировки, чтобы предотвратить появление искаженных китайских символов.
Ниже приведен измененный код test.htm:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="main.jsp" method="POST"> 站点名: <input type="text" name="name"> <br /> 网址: <input type="text" name="url" /> <input type="submit" value="提交" /> </form> </body> </html>
При доступе кhttp://localhost:8080/testjsp/test.htmlотправьте данные формы в файл main.jsp, демонстрационный GIF показан ниже:

Передача данных чекбокса в JSP-программу
Чекбокс может передавать один или даже несколько элементов данных.
Ниже приведен простой HTML-код; сохраните код в файле test.htm:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="main.jsp" method="POST" target="_blank"> <input type="checkbox" name="google" checked="checked" /> Google <input type="checkbox" name="example" /> Example <input type="checkbox" name="taobao" checked="checked" /> 淘宝 <input type="submit" value="选择网站" /> </form> </body> </html>
При открытии приведенного выше кода в браузере отображается следующее:
Ниже приведен код файла main.jsp для обработки данных чекбокса:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h1>从复选框中读取数据</h1>
<ul>
<li><p><b>Google 是否选中:</b>
<%= request.getParameter("google")%>
</p></li>
<li><p><b>Example是否选中:</b>
<%= request.getParameter("example")%>
</p></li>
<li><p><b>淘宝是否选中:</b>
<%= request.getParameter("taobao")%>
</p></li>
</ul>
</body>
</html>
При доступе кhttp://localhost:8080/testjsp/test.htmlотправьте данные формы в файл main.jsp, демонстрационный GIF показан ниже:

Чтение всех параметров формы
Ниже мы будем использоватьHttpServletRequestизgetParameterNames()для чтения всех параметров формы. Этот метод может получить имена всех переменных и возвращает перечисление.
После получения Enumeration мы можем вызвать метод hasMoreElements(), чтобы определить, есть ли еще элементы, и использовать метод nextElement() для получения имени каждого параметра.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h1>读取所有表单参数</h1>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>参数名</th><th>参数值</th>
</tr>
<%
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getParameter(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
%>
</table>
</body>
</html>
Ниже приведено содержимое файла test.htm:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<form action="main.jsp" method="POST" target="_blank">
<input type="checkbox" name="google" checked="checked" /> Google
<input type="checkbox" name="example" /> Example
<input type="checkbox" name="taobao" checked="checked" />
淘宝
<input type="submit" value="选择网站" />
</form>
</body>
</html>
Теперь мы отправляем данные, обращаясь к файлу test.htm через браузер, и результат вывода выглядит следующим образом:
При доступе кhttp://localhost:8080/testjsp/test.htmlотправьте данные формы в файл main.jsp, демонстрационный GIF показан ниже:

Вы можете попробовать использовать приведённый выше код JSP для чтения других объектов, таких как текстовые поля, переключатели, раскрывающиеся списки и другие формы данных.
Другие расширения