Невозможно отобразить презентацию
Похожие презентации:
Servlets
Servlets Servlet (Сервлет) – это тип приложений Java, предназначенный для динамического формирования содержимого ответа на запрос клиента по сети.
Сервлеты расширяют функциональные возможности web-сервера.
Сервлеты часто называют web-компонентами, они выполняются в специальной среде исполнения, создаваемой контейнером сервлетов или web-контейнером (web-сервером).
Сервлеты инсталлируются в web-контейнерах, как часть web- приложений.
Web-приложения – набор ресурсов – html-страниц, изображений, мультимедиа, сервлетов, XML-файлов конфигурации, классов и библиотек поддержки Java и т.д.
Преимущества сервлетов.
Высокая производительность.
Сервлеты выполняются внутри адресного пространства web-сервера;
Работа сервлетов не зависит от платформы;
Диспетчер безопасности Java на сервере реализует серию ограничений для защиты ресурсов;
Сервлету доступны абсолютно все функциональные возможности библиотек классов Java.
Жизненный цикл сервлета.
Жизненный цикл сервлета определяют три основных метода: init(), service()и destroy() .
Они реализуются каждым сервлетом и вызывается сервером в определенное время.
1.Пользователь вводит в окне браузера URL-адрес.
Браузер генерирует HTTP-запрос и отправляет его на сервер.
2.Web-сервер принимает HTTP-запрос.
Сервер находит соответствие между запросом и конкретным сервлетом.
Если сервлет отсутствует в контейнере , то он динамически принимается и загружается в адресное пространство сервера (создается экземпляр класса сервлета), затем сервер вызывает метод init() сервлета.
Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы.
За весь жизненный цикл метод init() вызывается только однажды.
3.Сервер вызывает метод service() сервлета.
Этот метод вызывается для обработки HTTP-запроса и формирования HTTP-отклика.
Сервлет остается в адресном пространстве и является доступным для обработки любых других HTTP-запросов.
Каждый запрос обрабатывается в своем отдельном потоке.
Метод service() вызывается для каждого запроса.
4.В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy() , который снимает сервлет из эксплуатации.
Подобно методу init() , этот метод тоже вызывается единожды за весь цикл сервлета.
Простой сервлет.
import java.io.*;
import javax.servlet.*;
public class SimpleServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException{ response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("<h2>Hello!</h2>");
pw.close();
}} import javax.servlet.*;
Данный пакет содержит классы и интерфейсы, необходимые для создания сервлетов.
GenericServlet Данный класс обладает функциональными возможностями, упрощающими создание сервлета – необходимо переопределить только метод service().
public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException Метод service() имеет два аргумента.
Первым аргументом является объект ServletRequest , благодаря которому сервлет считывает данные, предоставленные в запросе клиента.
Вторым аргументом является объект ServletResponse .
С его помощью сервлет сможет сформировать отклик клиенту.
response.setContentType("text/html");
Метод setContentType() определяет тип MIME для HTTP-отклика.
Здесь типом MIME является text/html .
Он показывает, что браузеру необходимо интерпретировать содержимое в качестве исходного HTML- кода.
PrintWriter pw = response.getWriter();
Метод getWriter() получает PrintWriter .
Все, что будет передаваться в поток, будет посылаться клиенту как часть HTTP-отклика.
Метод println() используется для записи некоторого простого исходного HTML-кода в качестве HTTP-отклика.
Примечание.
По умолчанию кодировкой отклика является utf-8.
Метод setCharacterEncoding() позволит определить кодировку HTTP- отклика.
Для того, чтобы использовать в исходном HTML-коде кириллицу, достаточно вызвать response.setCharacterEncoding("Cp1251").
Компиляция сервлета.
Для того, чтобы скомпилировать исходный код сервлета в класс, необходим установленный на сервере комплект Java Development Kit.
http://java.sun.com/javaee/ http://tomcat.apache.org/download-55.cgi Также необходима среда разработки и исполнения сервлетов – контейнер сервлетов.
Например, сервер Apache Tomcat.
Стандартное размещение сервера Tomcat в Windows – C:\Program Files\Apache Software Foundation\Tomcat 5.5\ В каталоге C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\ хранится файл servlet-api.jar .
В этом файле содержатся классы и интерфейсы, необходимые для создания сервлетов.
Чтобы сделать этот файл доступным, необходимо определить переменную среды CLASSPATH следующим значением - C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar Также этот файл классов можно определить во время компиляции сервлетов.
Для примера простого сервлета это будет выглядеть следующим образом: javac SimpleServlet.java –classpath “C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar” Запуск сервлета.
После компиляции необходимо зарегистрировать полученный класс сервлета для сервера Tomcat.
Для удобства можно воспользоваться стандартными каталогами и файлами, которые Tomcat использует для своих собственных образцов сервлетов.
1.
Необходимо скопировать файл класса сервлета SimpleServlet.class в каталог C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\servlets-examples\WEB-INF\classes\ 2.
Необходимо добавить имя сервлета и отображение в дескриптор развертывания web.xml , который находится в каталоге C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\servlets- examples\WEB-INF\ В раздел, описывающий сервлеты, добавляются строки В раздел, определяющий преобразование сервлетов, добавляются строки <servlet> <servlet-name>SimpleServlet</servlet-name> <servlet-class>SimpleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SimpleServlet</servlet-name> <url-pattern>/servlet/SimpleServlet</url-pattern> </servlet-mapping> 3.
Для выполнения сервлета сервер Tomcat должен быть запущен.
В адресную строку web-браузера вводится следующий URL - http://localhost:8080/servlets- examples/servlet/SimpleServlet Обработка HTTP-запросов.
Класс HttpServlet предлагает специализированные методы, обрабатывающие различные типы HTTP-запросов.
<html> <head><title>html example</title></head> <body> <form action="http://localhost:8080/servlets- examples/servlet/ExGetServlet" method="get"> Ваше имя:<br/> <input type="text" name="name" size="20" value=""/><br/> Ваша фамилия:<br/> <input type="text" name="surname" size="20" value=""/><br/> <input type="submit" value="Отправить данные."/> </form> </body> </html> Html-страница import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ExGetServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ String requestEnc = request.getCharacterEncoding();
if(requestEnc==null) requestEnc="ISO-8859-1";
String name = new String(request.getParameter("name").getBytes(requestEnc),"Cp12 51");
String surname = new String(request.getParameter("surname").getBytes(requestEnc),"C p1251");
response.setContentType("text/html");
response.setCharacterEncoding("Cp1251");
PrintWriter pw = response.getWriter();
pw.println("<b>Здравствуйте, "+name+" "+surname+"! Очень рады Вас видеть.</b>");
pw.close();
}} import javax.servlet.http.*;
Данный пакет содержит класс HttpServlet.
request.getCharacterEncoding();
Данный метод возвращает кодировку полученного HTTP-запроса.
getBytes(requestEnc) Данный метод преобразует строку в массив байт.
request.getParameter("name") Данный метод получает параметр из HTTP-запроса.
<html> <head><title>html example</title></head> <body> <form action="http://localhost:8080/servlets- examples/servlet/ExPostServlet" method="post"> Матрица:<br/> <input type="text" name="a11" size="5" value=""/> <input type="text" name="a12" size="5" value=""/> <input type="text" name="a13" size="5" value=""/><br/> <input type="text" name="a21" size="5" value=""/> <input type="text" name="a22" size="5" value=""/> <input type="text" name="a23" size="5" value=""/><br/> <input type="text" name="a31" size="5" value=""/> <input type="text" name="a32" size="5" value=""/> <input type="text" name="a33" size="5" value=""/><br/> <input type="submit" value="Посчитать определитель."/> </form> </body> </html> Html-страница import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ExPostServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ int a11 = Integer.parseInt(request.getParameter("a11"));
int a12 = Integer.parseInt(request.getParameter("a12"));
int a13 = Integer.parseInt(request.getParameter("a13"));
int a21 = Integer.parseInt(request.getParameter("a21"));
int a22 = Integer.parseInt(request.getParameter("a22"));
int a23 = Integer.parseInt(request.getParameter("a23"));
int a31 = Integer.parseInt(request.getParameter("a31"));
int a32 = Integer.parseInt(request.getParameter("a32"));
int a33 = Integer.parseInt(request.getParameter("a33"));
response.setContentType("text/html");
response.setCharacterEncoding("Cp1251");
PrintWriter pw = response.getWriter();
int opred = a11*a22*a33-a11*a23*a32- a12*a21*a33+a12*a23*a31+a13*a21*a32-a13*a22*a31;
pw.println("<b>Определитель матрицы: "+opred+"</b>");
pw.close();
}} Массивы и файлы в Java на примере.
<html> <head><title>html month example</title></head> <body> <form action="http://localhost:8080/servlets- examples/servlet/MonthServlet" method="get"> Введите номер месяца (1-12):<br/> <input type="text" name="month" size="20" value=""/><br/> <input type="submit" value="Определить месяц."/> </form> </body> </html> import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MonthServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ String name;
int i, days;
String mnames_in[] = {"Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август ","Сентябрь","Октябрь","Ноябрь","Декабрь"};
int mdays_in[] = {31,28,31,30,31,30,31,31,30,31,30,31};
OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream("month.txt"),"Cp1251");
PrintWriter out = new PrintWriter(fw);
for (i=0;i<12;i++) out.println(mnames_in[i]);
for (i=0;i<12;i++) out.println(mdays_in[i]);
out.close();
String mnames_out[] = new String[12];
int mdays_out[] = new int[12];
InputStreamReader fr = new InputStreamReader(new FileInputStream("month.txt"),"Cp1251");
BufferedReader in = new BufferedReader(fr);
String s;
for (i=0;i<12;i++) {s=in.readLine();mnames_out[i]=s;} for (i=0;i<12;i++) {s=in.readLine();mdays_out[i]=Integer.parseInt(s);} in.close();
int month = Integer.parseInt(request.getParameter("month"))-1;
name = mnames_out[month];
days = mdays_out[month];
response.setContentType("text/html");
response.setCharacterEncoding("Cp1251");
PrintWriter pw = response.getWriter();
pw.println("<h2>Месяц - "+name+".
Количество дней - "+days+".</h2>");
Сервлеты расширяют функциональные возможности web-сервера.
Сервлеты часто называют web-компонентами, они выполняются в специальной среде исполнения, создаваемой контейнером сервлетов или web-контейнером (web-сервером).
Сервлеты инсталлируются в web-контейнерах, как часть web- приложений.
Web-приложения – набор ресурсов – html-страниц, изображений, мультимедиа, сервлетов, XML-файлов конфигурации, классов и библиотек поддержки Java и т.д.
Преимущества сервлетов.
Высокая производительность.
Сервлеты выполняются внутри адресного пространства web-сервера;
Работа сервлетов не зависит от платформы;
Диспетчер безопасности Java на сервере реализует серию ограничений для защиты ресурсов;
Сервлету доступны абсолютно все функциональные возможности библиотек классов Java.
Жизненный цикл сервлета.
Жизненный цикл сервлета определяют три основных метода: init(), service()и destroy() .
Они реализуются каждым сервлетом и вызывается сервером в определенное время.
1.Пользователь вводит в окне браузера URL-адрес.
Браузер генерирует HTTP-запрос и отправляет его на сервер.
2.Web-сервер принимает HTTP-запрос.
Сервер находит соответствие между запросом и конкретным сервлетом.
Если сервлет отсутствует в контейнере , то он динамически принимается и загружается в адресное пространство сервера (создается экземпляр класса сервлета), затем сервер вызывает метод init() сервлета.
Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы.
За весь жизненный цикл метод init() вызывается только однажды.
3.Сервер вызывает метод service() сервлета.
Этот метод вызывается для обработки HTTP-запроса и формирования HTTP-отклика.
Сервлет остается в адресном пространстве и является доступным для обработки любых других HTTP-запросов.
Каждый запрос обрабатывается в своем отдельном потоке.
Метод service() вызывается для каждого запроса.
4.В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy() , который снимает сервлет из эксплуатации.
Подобно методу init() , этот метод тоже вызывается единожды за весь цикл сервлета.
Простой сервлет.
import java.io.*;
import javax.servlet.*;
public class SimpleServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException{ response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("<h2>Hello!</h2>");
pw.close();
}} import javax.servlet.*;
Данный пакет содержит классы и интерфейсы, необходимые для создания сервлетов.
GenericServlet Данный класс обладает функциональными возможностями, упрощающими создание сервлета – необходимо переопределить только метод service().
public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException Метод service() имеет два аргумента.
Первым аргументом является объект ServletRequest , благодаря которому сервлет считывает данные, предоставленные в запросе клиента.
Вторым аргументом является объект ServletResponse .
С его помощью сервлет сможет сформировать отклик клиенту.
response.setContentType("text/html");
Метод setContentType() определяет тип MIME для HTTP-отклика.
Здесь типом MIME является text/html .
Он показывает, что браузеру необходимо интерпретировать содержимое в качестве исходного HTML- кода.
PrintWriter pw = response.getWriter();
Метод getWriter() получает PrintWriter .
Все, что будет передаваться в поток, будет посылаться клиенту как часть HTTP-отклика.
Метод println() используется для записи некоторого простого исходного HTML-кода в качестве HTTP-отклика.
Примечание.
По умолчанию кодировкой отклика является utf-8.
Метод setCharacterEncoding() позволит определить кодировку HTTP- отклика.
Для того, чтобы использовать в исходном HTML-коде кириллицу, достаточно вызвать response.setCharacterEncoding("Cp1251").
Компиляция сервлета.
Для того, чтобы скомпилировать исходный код сервлета в класс, необходим установленный на сервере комплект Java Development Kit.
http://java.sun.com/javaee/ http://tomcat.apache.org/download-55.cgi Также необходима среда разработки и исполнения сервлетов – контейнер сервлетов.
Например, сервер Apache Tomcat.
Стандартное размещение сервера Tomcat в Windows – C:\Program Files\Apache Software Foundation\Tomcat 5.5\ В каталоге C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\ хранится файл servlet-api.jar .
В этом файле содержатся классы и интерфейсы, необходимые для создания сервлетов.
Чтобы сделать этот файл доступным, необходимо определить переменную среды CLASSPATH следующим значением - C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar Также этот файл классов можно определить во время компиляции сервлетов.
Для примера простого сервлета это будет выглядеть следующим образом: javac SimpleServlet.java –classpath “C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar” Запуск сервлета.
После компиляции необходимо зарегистрировать полученный класс сервлета для сервера Tomcat.
Для удобства можно воспользоваться стандартными каталогами и файлами, которые Tomcat использует для своих собственных образцов сервлетов.
1.
Необходимо скопировать файл класса сервлета SimpleServlet.class в каталог C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\servlets-examples\WEB-INF\classes\ 2.
Необходимо добавить имя сервлета и отображение в дескриптор развертывания web.xml , который находится в каталоге C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\servlets- examples\WEB-INF\ В раздел, описывающий сервлеты, добавляются строки В раздел, определяющий преобразование сервлетов, добавляются строки <servlet> <servlet-name>SimpleServlet</servlet-name> <servlet-class>SimpleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SimpleServlet</servlet-name> <url-pattern>/servlet/SimpleServlet</url-pattern> </servlet-mapping> 3.
Для выполнения сервлета сервер Tomcat должен быть запущен.
В адресную строку web-браузера вводится следующий URL - http://localhost:8080/servlets- examples/servlet/SimpleServlet Обработка HTTP-запросов.
Класс HttpServlet предлагает специализированные методы, обрабатывающие различные типы HTTP-запросов.
<html> <head><title>html example</title></head> <body> <form action="http://localhost:8080/servlets- examples/servlet/ExGetServlet" method="get"> Ваше имя:<br/> <input type="text" name="name" size="20" value=""/><br/> Ваша фамилия:<br/> <input type="text" name="surname" size="20" value=""/><br/> <input type="submit" value="Отправить данные."/> </form> </body> </html> Html-страница import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ExGetServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ String requestEnc = request.getCharacterEncoding();
if(requestEnc==null) requestEnc="ISO-8859-1";
String name = new String(request.getParameter("name").getBytes(requestEnc),"Cp12 51");
String surname = new String(request.getParameter("surname").getBytes(requestEnc),"C p1251");
response.setContentType("text/html");
response.setCharacterEncoding("Cp1251");
PrintWriter pw = response.getWriter();
pw.println("<b>Здравствуйте, "+name+" "+surname+"! Очень рады Вас видеть.</b>");
pw.close();
}} import javax.servlet.http.*;
Данный пакет содержит класс HttpServlet.
request.getCharacterEncoding();
Данный метод возвращает кодировку полученного HTTP-запроса.
getBytes(requestEnc) Данный метод преобразует строку в массив байт.
request.getParameter("name") Данный метод получает параметр из HTTP-запроса.
<html> <head><title>html example</title></head> <body> <form action="http://localhost:8080/servlets- examples/servlet/ExPostServlet" method="post"> Матрица:<br/> <input type="text" name="a11" size="5" value=""/> <input type="text" name="a12" size="5" value=""/> <input type="text" name="a13" size="5" value=""/><br/> <input type="text" name="a21" size="5" value=""/> <input type="text" name="a22" size="5" value=""/> <input type="text" name="a23" size="5" value=""/><br/> <input type="text" name="a31" size="5" value=""/> <input type="text" name="a32" size="5" value=""/> <input type="text" name="a33" size="5" value=""/><br/> <input type="submit" value="Посчитать определитель."/> </form> </body> </html> Html-страница import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ExPostServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ int a11 = Integer.parseInt(request.getParameter("a11"));
int a12 = Integer.parseInt(request.getParameter("a12"));
int a13 = Integer.parseInt(request.getParameter("a13"));
int a21 = Integer.parseInt(request.getParameter("a21"));
int a22 = Integer.parseInt(request.getParameter("a22"));
int a23 = Integer.parseInt(request.getParameter("a23"));
int a31 = Integer.parseInt(request.getParameter("a31"));
int a32 = Integer.parseInt(request.getParameter("a32"));
int a33 = Integer.parseInt(request.getParameter("a33"));
response.setContentType("text/html");
response.setCharacterEncoding("Cp1251");
PrintWriter pw = response.getWriter();
int opred = a11*a22*a33-a11*a23*a32- a12*a21*a33+a12*a23*a31+a13*a21*a32-a13*a22*a31;
pw.println("<b>Определитель матрицы: "+opred+"</b>");
pw.close();
}} Массивы и файлы в Java на примере.
<html> <head><title>html month example</title></head> <body> <form action="http://localhost:8080/servlets- examples/servlet/MonthServlet" method="get"> Введите номер месяца (1-12):<br/> <input type="text" name="month" size="20" value=""/><br/> <input type="submit" value="Определить месяц."/> </form> </body> </html> import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MonthServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ String name;
int i, days;
String mnames_in[] = {"Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август ","Сентябрь","Октябрь","Ноябрь","Декабрь"};
int mdays_in[] = {31,28,31,30,31,30,31,31,30,31,30,31};
OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream("month.txt"),"Cp1251");
PrintWriter out = new PrintWriter(fw);
for (i=0;i<12;i++) out.println(mnames_in[i]);
for (i=0;i<12;i++) out.println(mdays_in[i]);
out.close();
String mnames_out[] = new String[12];
int mdays_out[] = new int[12];
InputStreamReader fr = new InputStreamReader(new FileInputStream("month.txt"),"Cp1251");
BufferedReader in = new BufferedReader(fr);
String s;
for (i=0;i<12;i++) {s=in.readLine();mnames_out[i]=s;} for (i=0;i<12;i++) {s=in.readLine();mdays_out[i]=Integer.parseInt(s);} in.close();
int month = Integer.parseInt(request.getParameter("month"))-1;
name = mnames_out[month];
days = mdays_out[month];
response.setContentType("text/html");
response.setCharacterEncoding("Cp1251");
PrintWriter pw = response.getWriter();
pw.println("<h2>Месяц - "+name+".
Количество дней - "+days+".</h2>");
Программирование