Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

4. Сервлет example, принимающий параметры

Чтобы все рассказанное о сервлетах не осталось для вас пустыми словами, создадим собственный сервлет example (пример 1), который будет выводить в окне браузера передаваемые сервлету имена и группы студентов или сообщение о том, что данный параметр не введен (итоги работы сервлета см. рис. ниже):

Приведем сначала листинг исходного текста сервлета, а затем рассмотрим его более подробно (мы не станем детально описывать теги HTML, которые сервлет вставляет в генерируемую страницу, – обратитесь самостоятельно к документации по этому языку).

/*------------- Пример 1. Файл example.java -------------*/

package examples; // пакет для сервлета-примера

// способы вызова клиентом класса example.example через строку адреса окна браузера

// http://avanta.vvsu.ru/servlets/examples.example?name=Имя&group=Группа

// http://avanta.vvsu.ru/servlets/examples.example?name=Имя

// http://avanta.vvsu.ru/servlets/examples.example?group=Группа

// http://avanta.vvsu.ru/servlets/examples.example

// предполагается, что сервлет находится в директории сервлетов на WWW-сервере avanta.vvsu.ru

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

// класс example пакета examples

public class example extends HttpServlet // класс example пакета examples

{

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

{

// получение значения параметра имени, передаваемое через параметры

String NAME=request.getParameter("name");

if( NAME==null) NAME="Имя не задано"; // параметр отсутствует в списке

else

{

// если в параметре возможны символы кириллицы, то необходимо преобразовать значение параметра

NAME=new String(NAME.getBytes(),"windows-1251");

}

// получение значения параметра группы, передаваемое через параметры

String GROUP=request.getParameter("group");

if(GROUP==null) GROUP="Группа не задана"; // параметр отсутствует в списке

else

{

// если в параметре возможны символы кириллицы, то необходимо преобразовать значение параметра

GROUP=new String(GROUP.getBytes(),"windows-1251");

}

// передача типа генерируемого сервлетом содержимого

response.setContentType("text/html; charset=windows-1251");

// получение выходного потока для вывода генерируемого содержимого

Writer out=new BufferedWriter(new

OutputStreamWriter(response.getOutputStream(),"Cp1251")); // начало формирования результата в формате html-файла

out.write("<HTML>\n"); // html-тег начала файла

out.write("<HEAD><TITLE>Пример сервлета</TITLE></HEAD>\n"); // html-тег заголовка файла

out.write("<body>\n"); // html-тег начала содержимого

// формирование содержимого

out.write("<p>\n"); // html-тег начала абзаца

out.write("<font size=\"+1\" color=\"Black\">Введено имя: </font>\n"); // вывод простого текста некоторым шрифтом

out.write("<font size=\"+1\" color=\"Red\">"+NAME+"</font>\n"); // вывод простого текста некоторым шрифтом

out.write("</p>\n"); // html-тег завершения абзаца

out.write("<p>\n"); // html-тег начала абзаца

out.write("<font size=\"+1\" color=\"Black\">Введена группа: </font>\n"); // вывод простого текста некоторым шрифтом

out.write("<font size=\"+1\" color=\"Red\">"+GROUP+"</font>\n"); // вывод простого текста некоторым шрифтом

out.write("</p>\n"); // html-тег завершения абзаца

// завершение формирования результата

out.write("</body>\n"); // html-тег завершения содержимого

out.write("</html>\n"); // html-тег завершения файла

// закрытие поток вывода

out.flush(); out.close();

return;

}

}

/*-----------------------------------------------------------------------------------------*/

Начнем с того, что опишем класс сервлета, наследующий HttpServlet, и импортируем необходимые классы. После чего займемся методом doGet – главной частью сервлета:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class example extends HttpServlet

{

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

{

Следующий блок занимается разбором параметров, переданных сервлету. Отметим, что если в параметре возможны символы кириллицы, то необходимо преобразовать значение параметра, создавая новую строку на базе старой и используя необходимую кодировку:

String NAME=request.getParameter("name");

if( NAME==null) NAME="Имя не задано";

else {

NAME=new String(NAME.getBytes(),"windows-1251");

}

String GROUP=request.getParameter("group");

if(GROUP==null) GROUP="Группа не задана";

else

{

GROUP=new String(GROUP.getBytes(),"windows-1251");

}

После чего методом setContentType серверу сообщается, что возвращаемые данные – страница HTML (MIME-тип «text/html»). Если этого не сделать, то сервер решит, что вы посылаете обычный текст:

response.setContentType("text/html; charset=windows-1251");

Методом getWriter сервлет получает доступ к потоку вывода, через который серверу посылается результат:

Writer out=new BufferedWriter(new

OutputStreamWriter(response.getOutputStream(),"Cp1251"));

Далее генерируем детали стандартного заголовка Web-страницы. Генерируемое содержание Web-страницы отправляется клиенту при помощи выходного потока и его метода write:

out.write("<HTML>\n");

out.write("<HEAD><TITLE>

Пример сервлета</TITLE></HEAD>\n");

Затем сервлет выводит основную часть содержимого Web-страницы. В нашем случае просто происходит генерация двух абзацев текста, в которых выводятся значения полученных сервлетом параметров:

out.write("<p>\n");

out.write("<font size=\"+1\" color=\"Black\">Введено имя: </font>\n");

out.write("<font size=\"+1\" color=\"Red\">"+NAME+"</font>\n");

out.write("</p>\n");

out.write("<p>\n");

out.write("<font size=\"+1\" color=\"Black\">Введена группа: </font>\n");

out.write("<font size=\"+1\" color=\"Red\">"+GROUP+"</font>\n");

out.write("</p>\n");

Завершается вывод генерацией стандартного окончания HTML-страницы:

out.write("</body>\n");

out.write("</html>\n");

Перед завершением метода следует отправить содержимое потока вывода клиенту и закрыть этот поток:

out.flush(); out.close();

return;

}

}

Отлаживать подобного рода сервлеты не просто, а очень просто. Необходимо скопировать class-файл это сервлета в подкаталог example каталога сервлетов Web-сервера, затем строке адреса окна браузера на клиентском месте набрать URL сервлета (например, http://avanta.vvsu.ru/servlets/examples.example?name=Иванов&group=Гр.-123)и нажать Enter — и все ваши ошибки сразу же становятся видны.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]