Главная » Java, Web » Обработка данных, полученных из HTML-форм

0

Сервлеты могут принимать данные, получаемые сервером в составе HTML- форм. Рассмотрим пример, в котором используется класс ServletUtilities (листинг 4.5).

Листинг 4.5. Файл ThreeParams.java

package paket; import java.io.*; import javax.servlet.*;

import javax.servlet.http.*; import java.util.*;

public class ThreeParams extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Reading Three Request Parameters"; out.printIn(ServletUtilities.headWithTitle(title) + "<BODY>\n" +

"<H1 ALIGN=CENTER>" + title + "</Hl>\n" + "<UL>\n" + " <LI>paraml: "

+ request.getParameter("paraml") + "\n" + " <LI>param2: "

+ request.getParameter("param2") + "\n" + " <LI>param3: "

+ request.getParameter("рагатЗ") + "\n" +

"</UL>\n" +

"</BODYX/HTML>") ;

}

public void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { doGet(request, response);

}

}

В файл web.ini вставим следующий фрагмент:

servlet.name: param

servlet.param.className: paket.ThreeParams servlet.param.url: /param

Перезапустим Web-сервер и обратимся к сервлету, указав адрес в виде http://locaihost:81/param?paraml=Viktoria?param2=parametr2?param3= escheparametr

В программе описано три параметра:

?    paraml

?    param2

?    рагатЗ

Это имена, чьи значения указаны в адресе URL после знака равенства. Здесь использован метод get для пересылки параметров. Такой метод подразумевает пересылку строки запроса в составе URL. Браузер отобразит ответ (рис. 4.6).

Рис. 4.6. Отображение параметров запросов

Возможна ситуация, когда сервлет не знает, какие имена параметров могут быть переданы с запросом. Ниже приводится пример (листинг 4.6), который просматривает все имена параметров запроса и составляет таблицу. При этом учитываются также имена, у которых нет значения, а также имена, имеющие несколько значений. Имена параметров просматриваются с использованием функции getParameterNames. Это метод интерфейса HttpServletRequest (точнее, суперинтерфейса ServietRequest). Метод возвращает java.util .Enumeration. Список имен можно просматривать с использованием проверки наличия следующего элемента при помощи метода hasMoreElements, а затем с применением метода nextElement. Метод nextEiement возвращает переменную типа object, затем преобразует результат к string и передает его getParameterVaiues. Таким образом, создается массив строк string. Если массив получается длиной в один элемент и содержит пустую строку, то сервлет создает следующий текст: "No Value". Если

массив имеет несколько элементов, то они будут выведены в виде маркированного списка (рис. 4.7).

Листинг 4.6. Файл ShowParameters.java

package paket; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*;

public class ShowParameters extends HttpServlet { public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); Printwriter out = response.getWriter(); String title = "Reading All Request Parameters"; out.println(ServletUtilities.headWithTitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=CENTER>" + title + "</Hl>\n" + "CTABLE B0RDER=1 ALIGN=CENTER>\n" + "<TR BGCOLOR=\"#FFADO0\">\n" + "<TH>Parameter Name<TH>Parameter Value(s)"); Enumeration paramt-Iames = request.getParametert-Iames (); while (paramt-Iames. hasMoreElements () ) {

String paramName = (String) paramt-Iames .nextElement () ;

out. println ("<TR><TD>" + paramt-Iame + "\n<TD>");

String [] paramValues = request. getParameterValues (paramt-Iame) ;

if (paramValues.length == 1) {

String paramValue = paramValues[0]; if (paramValue.length() == 0)

out.print("<I>No Value</I>"); else

out.print(paramValue); } else {

out.println("<UL>");

for(int i=0; i<paramValues.length; i++) { out.println ("<LI>" + paramValues[i]);

}

out.println("</UL>");

}

}

out. println ("</TABLE>\n</BODYX/HTML>") ;

}

public void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { doGet(request, response);

}

Дополнения, вносимые в файл web.ini:

servlet.name: showparam

servlet.showparam.className: paket.ShowParameters servlet.showparam.url: /showparam

Рис. 4.7. Чтение всех параметров

Для сбора информации от пользователя и передаче его серверу, в том числе, сервлету, используются HTML-формы. В качестве примера приведем файл, содержащий HTML-форму (листинг 4.7).

Листинг 4,7, Файл PostForm.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>A Sample FORM using POST</TITLE> </HEAD>

<BODY BGCOLOR="#FDF5E6">

<H1 ALIGN="CENTER">A Sample FORM using POST</Hl>

<FORM ACTION="http://locaihost:81/ShowParam" METHOD="POST"> Номер предмета:

<   IN PUT TYPE="TEXT" NAME="itemNum"XBR> Количество:

<INPUT TYPE="TEXT" NAME="quantitу"><BR> Цена за штуку:

<   IN PUT TYPE="TEXT" NAME="price" VALUE="$ "XBR> <HR>

Имя:

<INPUT TYPE="TEXT" NAME="firstName"><BR> Фамилия:

<INPUT TYPE="TEXT" NAME="las tName"><BR> Отчество (одна буква):

<   IN PUT TYPE="TEXT" NAME="initial"XBR> Адрес доставки:

<TEXTAREA NAME="address" ROWS=3 COLS=40X’/TEXTAREAXBR> Кредитная карта:<BR>

&nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Visa">Visa<BR> &nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Master Card">Master Card<BR> &nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Amex">American Express<BR> &nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Di scove r">Di scove r<BR> &nbsp;&nbsp;<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Java SmartCard">Java SmartCard<BR>

Номер карты:

<INPUT TYPE="PASSWORD" NAME="cardNum"><BR> номер карты повторить:

< IN PUT TYPE=" PAS SWORD" NAME="ca rdNum" ><BRXBR> <CENTER>

<INPUT TYPE="SUBMIT" VALUE="Submit Order"> </CENTER> </FORM>

</BODY> </HTML>

Собранные данные показаны на рис. 4.8. Обработанные данные представлены на рис. 4.9.

Рис. 4.8. Данные, вводимые пользователем

Рис. 4.9. Данные, обработанные сервлетом

При помощи этой формы можно собрать пользовательские данные и получить их на сервере по указанному в качестве значения атрибута action адресу. Элемент <form> также содержит атрибут method, который указывает метод отправки данных (рис. 4.8).

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии