Содержание
- 2. СЕРВЛЕТЫ Сервлеты – компоненты приложений Java 2 Platform Enterprise Edition, выполняющиеся на стороне сервера, способные обрабатывать
- 3. Все сервлеты реализуют общий интерфейс Servlet. Для обработки HTTP-запросов можно воспользоваться в качестве базового класса абстрактным
- 4. После этого сервлет можно считать запущенным, он находится в ожидании запросов от клиентов. Появившийся запрос обслуживается
- 5. После завершения выполнения сервлета контейнер сервлетов вызывает метод destroy(), в теле которого следует помещать код освобождения
- 7. Класс HttpServlet имеет реализованный метод service(), служащий диспетчером для других методов, каждый из которых обрабатывает методы
- 8. В задачу метода service() класса HttpServlet входит анализ полученного через запрос метода доступа к ресурсам и
- 9. Рассмотрим пример: import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class
- 10. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print("This
- 11. public void destroy() { super.destroy(); .............................................................}} Интерфейсы ServletRequest и HttpServletRequest Поток данных поступает от клиента в
- 12. Информацию об имени сервера, принявшего запрос, и порт, на котором запрос был “услышан” сервером, выдают методы
- 13. Если, обращаясь к серверу, клиент помимо универсального адреса задал параметры сервлету то их можно узнать посредством
- 14. В интерфейсе HttpServletRequest имеются дополнительные методы: getCookies() возвращает массив cookies. getQueryString() возвращает строку запроса HTTP getRemoteUser()
- 15. out.println(" "); out.println(" Request Information "); out.println(" "); out.println(" Request Information "); out.println(" Method: " +
- 16. На экране получим: Request Information Method: GET Request URI: /FirstProject/RequestClass Protocol: HTTP/1.1 PathInfo: null Remote Address:
- 17. Тогда при запросе http://localhost:8080/blog/tag/java+mac+foo Получим на экране pathInfo: /java+mac+foo pathTrans: /Users/al/tomcat- 4.1.31/webapps/blog/tag/java+mac+foo uri: /blog/tag/java+mac+foo
- 18. Интерфейсы ServletResponse и HttpServletResponse Генерируемые сервлетами данные передаются серверу-контейнеру с помощью объектов, реализующих интерфейс ServletResponse, а
- 19. В интерфейсе ServletResponse объявлены следующие методы: setContentType() задает MIME-тип генерируемых документов getOutputStream() возвращает ссылку на поток
- 20. sendError(int sc, String msg) сообщает о возникших ошибках в качестве параметра передается код ошибки и при
- 21. Рассмотрим пример: import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class RequestHeader extends HttpServlet {
- 22. Html файл будет иметь вид: index.html ЗАПУСК СЕРВЛЕТА В браузере получим accept = image/gif, image/x-xbitmap, image/jpeg,
- 23. Интерфейс ServletConfig Интерфейс ServletConfig имеет следующие методы: getServletName() позволяет получить имя сервлета. getInitParameterNames() метод возвращает имена
- 24. Пример простого сервлета. import java.io.*; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(
- 25. public void doGet( HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { performTask(req, res); } public void
- 26. Рассмотрим развертывание сервлета на сервере Tomcat. В каталоге, где установлен Web сервер будут следующие подкаталоги: /bin
- 27. В каталог /webapps необходимо поместить папку /FirstProject. Папка /FirstProject должна содержать каталог /WEB-INF, в котором помещаются
- 28. В файле web.xml необходимо прописать имя и путь к сервлету. Например: FirstServletname FirstServletdisplay test.com.FirstServlet FirstServletname /FirstServlettest
- 29. Извлечение информации из запроса Пусть имеется следующая форма: Name : Credit: Price: Adress: Для обработки данных,
- 30. package test.com; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class
- 31. public void performTask(HttpServletRequest req, HttpServletResponse resp) { try { String val[] = new String[3]; int rest;
- 32. for (int i = 0; i out.println(" " + val[i] + " "); out.println(" " +
- 33. Cookie Рассмотрим сервлет, который задает куки, а затем считывает их из браузера. import java.io.IOException; import java.io.PrintWriter;
- 34. public void performTask(HttpServletRequest req, HttpServletResponse resp) { try { String name=req.getParameter("p0"); String val=""; //принимаем куки Cookie
- 35. out.println(" "); out.println(" FormRequest "); out.println(" "+"Hello "+val); out.println(" "); } if(name!=null) { out.println(" "); out.println("
- 36. if((name==null)&&(cookie==null)){ out.println(" "); out.println(" "); out.println(" value=\" \"> "); out.println(" "); out.println(" "); } out.close(); }
- 37. Методы класса Cookie: String getComment() Возвращает строку, описывающую назначение cookie (null, если не было установлено каких-либо
- 38. int getMaxAge() Возвращает целое число, представляющее максимальный возраст cookie в секундах. String getName() Возвращает строку, содержащую
- 39. boolean getSecure() Возвращает булево значение, указывающее, должен ли cookie передаваться с использованием протокола, обеспечивающего безопасность (true)
- 40. void setComment(String purpose) Комментарий, описывающий назначение cookie, которое, предоставляется пользователю браузером. (Некоторые браузеры дают возможность пользователю
- 41. void setPath(String uri) Устанавливает префикс «целевого» URL, указывающий каталоги на сервере, которые соответствуют сервисам, способным принимать
- 42. Session Когда пользователь делает запрос на сервер, сервер создает временную сессию для идентификации пользователя. Когда тот
- 43. Для организации сессий используется класс HttpSession. Объект HttpSession может быть создан с помощью метода getSession(boolean par),
- 44. Enumeration getAttributeNames() возвращает имена всех объектов в данной сессии. void setAttribute(String name, Object value) привязывает объект
- 45. long getCreationTime(). Возвращает long значение, определяющее дату и время создания данной сессии. long getLastTimeAccess(). Возвращает значение
- 46. Рассмотрим пример: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class BookStoreServlet extends HttpServlet {
- 47. out.println(" out.println(" "); out.println(" "); out.println(" Welcome to WholeLottaBooks.com! "); out.println("Would you like to begin shopping?");
- 48. public void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ res.setContentType("text/html"); PrintWriter out = res.getWriter(); ShoppingCart
- 49. if (session.getValue("Cart") == null){ sc= new ShoppingCart(); session.putValue("Cart",sc); int acct = new Random().nextInt(); if (acct ((ShoppingCart)session.getValue("Cart"))
- 50. Класс ShoppingCart имеет вид: import java.util.*; import java.io.Serializable; public class ShoppingCart implements Serializable { private int
- 51. public Iterator getItems(){return this.Items.iterator(); } public boolean addItem(int item){ return Items.add(new Integer(item));\ } public String toString(){
- 52. Фильтры Сервлетный фильтр, в соответствии со спецификацией, это Java-код, пригодный для повторного использования и позволяющий преобразовать
- 53. Сервлетные фильтры могут: перехватывать инициацию сервлета прежде, чем сервлет будет инициирован; определить содержание запроса прежде, чем
- 54. Сервлетный фильтр может быть конфигурирован так, что он будет работать с одним сервлетом или группой сервлетов.
- 55. Метод init вызывается прежде, чем фильтр начинает работать, и настраивает конфигурационный объект фильтра. Метод doFilter выполняет
- 56. Таким образом, фильтр имеет следующий вид: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; @WebFilter( urlPatterns={“/*”} initParams={@WebInitParam(name=“active” value=“true”)}
- 57. public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (active){ …………………………..
- 58. Интерфейс FilterConfig содержит метод для получения имени фильтра, его параметров инициализации и контекста активного в данный
- 59. После возвращения этого вызова фильтр может по окончании работы своего метода doFilter выполнить дополнительную работу над
- 60. FilterName FilterConnect active true FilterName ServletName
- 61. В представленном коде дескриптора поставки web.xml объявлен класс-фильтр FilterConnect с именем FilterName. Фильтр имеет параметр инициализации
- 62. цепочка, выстраивается в том порядке, в котором встречаются соответствующие описания фильтров в web.xml; Для связи фильтра
- 63. FilterName *.html фильтр будет применен ко всем вызовам страниц HTML. Рассмотрим пример использования фильтра. Рассмотрим задачу
- 64. Фильтр MaxFilter находит максимальный элемент массива: public class MaxFilter implements Filter{ private FilterConfig config = null;
- 65. public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{ if (active){ String param=request.getParameter("ArrayName");
- 66. public void destroy(){ config = null; } } Фильтр MinFilter находит минимальный элемент массива. Вызывается после
- 67. public void init (FilterConfig config) throws ServletException{ ………………} public void destroy(){ config = null; } public
- 68. int min=mas[0]; for(int j=1; j if(min>mas[j]){ min=mas[j]; } } request.setAttribute("minValue", new Integer(min)); } } chain.doFilter(request, response);
- 69. protected void processRequest( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); Integer value=(Integer)request.getAttribute("maxValue"); Integer value1=(Integer)request.getAttribute("minValue");
- 70. try { out.println(" "); out.println(" "); out.println(" Servlet ActionServlet "); out.println(" "); out.println(" "); out.println(" The
- 71. Соответственно форма имеет вид: maxlength="15" value=""> Файл web.xml в данном случае имеет вид: MyServlet ActionServlet
- 72. MaxFilter MaxFilter active true MinFilter MinFilter active true
- 73. MyServlet /MyServlet MaxFilter MyServlet MinFilter MyServlet
- 74. Класс RequestDispatcher В некоторых случаях необходимо обратиться к другому сервлету, странице JSP, документу HTML, XML или
- 75. Если ресурс находится в другом контексте, то необходимо предварительно получить контекст методом public ServletContext getContext( String
- 76. Например: RequestDispatcher rd = config.getServletContext() .getContext("/prod").getRequestDispatcher( "/prod/Customer"); Если требуемый ресурс - сервлет, помещенный в контекст под
- 77. Все три метода возвращают null, если ресурс недоступен или сервер не реализует интерфейс RequestDispatcher. Как видно
- 78. Вызывающий сервлет выполняет предварительную обработку объектов request и response и передает их вызванному сервлету или другому
- 79. Вызывающий сервлет не должен выполнять какую-либо отправку клиенту до обращения к методу forward, иначе будет выброшено
- 80. Рассмотрим пример: ………………………………………………………… request.getSession().setAttribute("model", model); RequestDispatcher dispatcher = getServletContext() .getRequestDispatcher("/form.jspx"); try { dispatcher.forward(request, response); } catch
- 81. При этом form.jspx имеет вид: xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.0"> pageEncoding="UTF-8"/> EN Значение:
- 82. Обработка событий Существует несколько интерфейсов, которые позволяют следить за событиями, связанными с сеансом, контекстом и запросом
- 83. javax.servlet.ServletContextAttributeListener – обрабатывает события создания/удаления/модификации атрибутов контекста сервлета; javax.servlet.http.HttpSessionAttributeListener – обрабатывает события создания/удаления/модификации атрибутов HTTP-сессии; javax.servlet.http.HttpSessionBindingListener
- 84. Методы соответствующих интерфейсов. ServletContextListener Этот Listener позволяет разработчику "словить" момент когда ServletContext инициализируется либо уничтожается. Его
- 85. WebServlet( urlPatterns={"/Servlet1"} ) public class Sevlet1 extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws
- 86. Обработчик события: @WebListener() //Зарегестрировать обработку событий можно также и в web.xml // ServletListener1 public class ServletListener1
- 87. HttpSessionListener Этот Listener позволяет разроботчику "словить" момент создания и уничтожения сессии. sessionCreated(HttpSessionEvent e) sessionDestroyed(HttpSessionEvent e) Класс
- 88. ServletContextAttributeListener Этот Listener используется для “прослушивания" событий, происходящих с атрибутами в контексте сервлета (ServletContext). attributeAdded(ServletContextAttributeEvent e)
- 89. HttpSessionAttributeListener Этот Listener используется для "слушания" событий, происходящих с атрибутами в сервлет контексте (ServletContext). attributeAdded(HttpSessionBindingEvent e)
- 90. HttpSessionBindingListener Этот Listener так-же используется для прослушивания событий происходящих с атрибутами в сессии. Разница между HttpSessionAttributeListener
- 91. Рассмотрим пример. public class MyBindingListener implements HttpSessionBindingListener { public void valueBound(HttpSessionBindingEvent e){ System.out.println("Bound“ +e.getName()); } public
- 92. public class Servlet1 extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- 93. HttpSessionActivationListener Этот Listener используется атрибутами сессии в случае, если сессия будет "мигрировать" между различными JVM в
- 94. ServletRequestListener Этот Listener используется, соответственно, для того, чтоб "словить" момент создания и уничтожения запроса. void requestDestroyed(ServletRequestEvent
- 96. Скачать презентацию