240 likes | 412 Views
Application Services. Проект Apache Jakarta. Apache Jakarta Project – создаёт и поддерживает открытое программное обеспечение на платформе Java для предоставления в публичный доступ абсолютно бесплатно. Apache Jakarta Tomcat или просто Tomcat один из таких проектов
E N D
Проект Apache Jakarta • Apache Jakarta Project – создаёт и поддерживает открытое программное обеспечение на платформе Java для предоставления в публичный доступ абсолютно бесплатно. • Apache Jakarta Tomcat или просто Tomcat один из таких проектов • Tomcat это контейнер servlet’ов • Tomcat представляет собой простой сервер для Web приложение, позволяющий использовать HTML, JSP и servlet’ы • Он является промышленным оптимизированным сервером • Часто контейнер servlet’ов используют отдельно от сервера Tomcat
Где взять Tomcat? • Есть свой сайт проекта Tomcat http://tomcat.apache.org/ • Для получение последнй стабильной версии Tomcat (на данный момент 7)можно пройти по ссылке http://tomcat.apache.org/ • Один из справочников по настройки и конфигурации Tomcat http://www.coreservlets.com/Apache-Tomcat-Tutorial/tomcat-7-with-eclipse.html • Также на сайте содержится много примеров использования сервера • Возможна установка Apache и добавление Tomcat поверх, но можно так и не делать
Web apps • Web приложение это фактически сайт: • Который знает кто ты есть – не предоставляет статическую информацию, а пытается взаимодействовать с пользователем • Может навсегда изменить информацию (например сделать запись в БД) • Web приложение может состоять из нескольких частей • Статические web страницы (возможно содержащие формы) • Servlet’ы • JSP • Tomcat организует все такие страницы в одной директории для каждого web приложения • Но можно помочь ему это сделать
Директории • При написании servlet’ов удобно иметь две структуры директорий • Директория для разработки, в которую вы можете записывать и отлаживать код • Директория для развёртывания, куда будет складываться “живой” код • Tomcat требует некоторый набор директоре для приложения • У всего жестко задано своё место • Также web приложение должно сосуществовать с другими приложениями. Нужно использовать пакеты, чтобы избежать конфликта имён • Эта особенность усложняет структуру директорий Tomcat
Пакеты • Имя пакета объявляется первой строкой в коде java файла • Пример packagecom.example.model;importjavax.servlet.*;importjavax.servlet.http.*;import java.io.*;public class MyServletextends HttpServlet { ... } • Относительно директорий это означает, что файл MyServlet.java находится в каталоге {project_dir}/com/example/model
Структура директорий Tomcat myApplicationDirectory/ - директория верхнего уровня myWebForm.html myJspPage.jsp WEB-INF/ - это обязательная директория, которая должна называться именно так lib/ - директория для внешних jar-файлов classes/ - обязательная директория com/ example/ model/ myModel.class– в пакете с именем com.example.model web/ myServlet.class – в пакете com.example.web web.xml – файл описывающий развёртывание, его имя обязательно
Файлы • myWebForm.html • Это web страница с формой которая отправляет запрос к servlet’у • com/example/web/myServlet.class • Это класс servlet, но для работы ему потребуется загрузить класс myModel • com/example/model/myModel.class • Это класс содержащий бизнес логику, хорошая идея выносить логику отдельно • myJspPage.jsp • Jspстраница создающая HTML, на неё можно перейти непосредственно из servlet’а (myServlet) • web.xml • Файл который требуется Tomcat’у для того чтобы узнать какой класс следует вызывать при обращении к ресурсу
myWebForm.html <html> ... <body> ... <form method="POST" action="NameSeenByUser.do"> ...разные элементы формы (input, button, select)... </form> ... </body> </html>
web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <web-appxmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>Some_internal_name</servlet-name> <servlet-class>com.example.web.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Some_internal_name</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
Servlet без JSP public classMyServletextends HttpServlet{ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html"); PrintWriter out = response.getWriter(); String value = request.getParameter("name"); out.println("<html><body>I got: "+ name +" = "+ value + "</body></html>"); } }
Servlet с JSP public class MyServletextends HttpServlet{ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String value = request.getParameter("name"); ...передача результата на страницу через объект obj... request.setAttribute(“objName”, obj); RequestDispatcher view = request.getRequestDispatcher("result.jsp"); view.forward(request, response); } }
JSP (result.jsp) <%@ page import="java.util.*" %> <html> <head><title>Your results</title></head> <body> <% MyObject object = (MyObject)request.getAttribute("objName"); String someResult = ...используем объект для взаимодействия... out.print("<br>And the answer is: " + someResult); %> </body> </html>
Поток обработки • Пользователь оправляет HTML форму • Tomcat находит servlet соответствующий указанному urlпо описателю развёртывания (web.xml)и передаёт запрос в servlet • Servlet обрабатывает запрос и формирует ответ • Либо • Servlet записывает HTML в ответ • Или • Servlet передаёт ответ JSP странице • JSP формирует HTML на основе ответа • Tomcat возвращает HTML станицу пользователю
Servlet 3.0 • Привязывание Servlet’ачерез аннотации в соответствии со стандартом Servlet 3.0 @WebServlet(name="HelloServlet", urlPatterns={"/HelloServlet"}) publicclassHelloServletextendsHttpServlet{ @Overrideprotectedvoidservice(HttpServletRequestrequest, HttpServletResponseresponse) throwsServletException{} } • То же связывание только через web.xml <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.example.web.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping>
Фильтры • Объект которой может перехватывать запрос до того как он попал к Servlet’у, JSP или любому статическому ресурсу • Позволяет добавить дополнительный слой логики управляющий доступом к ресурсам
Реализация фильтра • Необходимо реализовать интерфейс javax.servlet.Filter • Методы • initвызывается один раз при загрузке класса фильтра • destroy вызывается когда класс выгружается из загрузчика • doFilterосновной метод вызывается при запросе к ресурсу
Пример importjavax.servlet.*; importjava.io.IOException; /** */ publicclassSimpleServletFilterimplementsFilter{ publicvoidinit(FilterConfigfilterConfig) throwsServletException{} publicvoiddoFilter(ServletRequestrequest, ServletResponseresponse, FilterChainfilterChain) throwsIOException, ServletException{ StringmyParam=request.getParameter("myParam"); if(!"blockTheRequest".equals(myParam)){ filterChain.doFilter(request, response);return; } HttpResponsehttpResponse=(HttpResponse)httpResponse; httpResponse.getWriter().write( "a differentresponse... e.gin HTML"); } publicvoiddestroy(){} }
Объявление Для того чтобы web приложение могло использовать фильтр, его нужно привязать к адресу, также как и servlet (через web.xml) <filter> <filter-name>myFilter</filter-name> <filter-class>servlets.SimpleServletFilter</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>*.simple</url-pattern> </filter-mapping> или с помощюанатация (для спецификации Servlet 3.0) @ServletFilter(name = "myFilter", urlPatterns={"*.simple"}) publicclassSimpleServletFilterimplementsjavax.servlet.Filter{ ... }
Развёртывание приложение на сервере IDE (NetBeans, Intellij, Eclipse) Build system (Ant, Maven, Gradle) Файлы с исходным кодом на java Код для виртуальной машины Zip архив содержащий class файлы *.class *.java *.jar/ *.war Application Server (Tomcat, GlassFish, JBoss) jvm javac Исполнитель class файлов Компилятор исходного кода java
Развёртывание приложение на сервере • По умолчанию Tomcat настроен на директорию webappsв корневом каталоге %CATALINA_HOME% • Корневую директорию можно настроить в конфигурационном файле %CATALINA_HOME%\conf\server.xml • В обычном случаедля развёртывания приложения достаточно положить .war архив в каталог webapps
Альтернативы • Sun java Web Service • Старый web service сейчас не разрабатывается • Java Web Service Developer Kit (JWSDK) • Официальная реализация • Трудно установить и настроить • JBoss • Открытый исходный код • Существует много опция для установки • Поставляется вместе со встроенной базой данных
Источники • http://tutorials.jenkov.com/java-servlets/index.htmlJakobJenkovо том как работать с контейнером сервлетов • https://blogs.oracle.com/swchan/entry/servlet_3_0_annotations спецификация для Servlet 3.0 • https://netbeans.org/kb/trails/java-ee_ru.htmlпервая ссылка на руссом по java в web