Скачать презентацию Аннотации и Servlet 3 0 Рогальчук В В Скачать презентацию Аннотации и Servlet 3 0 Рогальчук В В

BD_lektsia_Annotatsii_servlet3.pptx

  • Количество слайдов: 42

Аннотации и Servlet 3. 0 Рогальчук В. В. Кафедра «Информационные и вычислительные системы» Аннотации и Servlet 3. 0 Рогальчук В. В. Кафедра «Информационные и вычислительные системы»

Java Enterprise Edition Java Enterprise Edition

Сервисы JEE p p p JTA – java transaction API JPA – java persistence Сервисы JEE p p p JTA – java transaction API JPA – java persistence API JMS – java messaging system JNDI – java naming and directory interface Java. Mail и JAF – javabean activation framework Обработка XML – JAXP, JAXB, St. AX… JCA – java connector architecture Security – JAAS (J Authentication and Authorization Service), JACC Web Services – JAX-WS и JAX-RS Management – java management extensions …. .

Web-related технологии Servlet p JSP p EL p JSTL p JSF p Web-related технологии Servlet p JSP p EL p JSTL p JSF p

JEE 6 – Что нового? p p «Pruning» - подчищены устаревшие спецификации Профили – JEE 6 – Что нового? p p «Pruning» - подчищены устаревшие спецификации Профили – Web и Full – 8 vs 28 спецификаций Упрощение использования n Аннотации n Опциональные и фрагментированные XMLдескрипторы n CDI и DI n … «Горячие» технологии n RESTful Services n JSON n …

JEE 6 Web Profile Servlet 3. 0 n JSP 2. 2 n Expression Language JEE 6 Web Profile Servlet 3. 0 n JSP 2. 2 n Expression Language 1. 2 n JSTL 1. 2 n JSF 2. 0 n JPA 2. 0 n JTA 1. 1 n EJB Lite 3. 1 n

Servlet 3. 0 Аннотации p Упрощение конфигурирования p Асинхронная обработка запросов p pluggability p Servlet 3. 0 Аннотации p Упрощение конфигурирования p Асинхронная обработка запросов p pluggability p

Аннотации p @Resource(mapped. Name=“jms. Name”) p Мета-описания элементов программного кода + p+ p «правильный Аннотации p @Resource(mapped. Name=“jms. Name”) p Мета-описания элементов программного кода + p+ p «правильный java-doc» могут быть получены рефлексивно во время работы программы

Синтаксис объявления public @interface Some. Annotation { String string. A(); String string. B() default Синтаксис объявления public @interface Some. Annotation { String string. A(); String string. B() default "Hello"; String. C() default "World"; int id(); }

Синтаксис использования @Some. Annotation(string. A=“HELLO”, string. B=“ 910” string. C=“ 911”, id=“ 12345”) public Синтаксис использования @Some. Annotation(string. A=“HELLO”, string. B=“ 910” string. C=“ 911”, id=“ 12345”) public class Hello. Class { … }

Специальные аннотации p Маркерная аннотация n p аннотация без элементов-полей Аннотация с единственным полем Специальные аннотации p Маркерная аннотация n p аннотация без элементов-полей Аннотация с единственным полем n String value(); n public @interface Copyright { String value(); } n @Copyright(“ 2012 ИВС ПГУПС") public class Some. Class. From. PSTU {. . . }

Встроенные в язык аннотации p Используемые компилятором n n n p @Deprecated @Override @Suppress. Встроенные в язык аннотации p Используемые компилятором n n n p @Deprecated @Override @Suppress. Warnings Описывающие аннотации (мета-аннотации) n n @Retention @Target @Inherited @Documented

@Retention p Retention. Policy. SOURCE n p Retention. Policy. CLASS n p аннотация присутствует @Retention p Retention. Policy. SOURCE n p Retention. Policy. CLASS n p аннотация присутствует только в исходном коде аннотация сохраняется в. class файле, но недоступна в runtime Retention. Policy. RUNTIME n Аннотация сохраняется в. class и доступна в runtime

@Retention(Retention. Policy. RUNTIME) @interface My. Annotation { String author(); String date(); } @Retention(Retention. Policy. RUNTIME) @interface My. Annotation { String author(); String date(); }

@Retention @My. Annotation(author= @Retention @My. Annotation(author="Rogalchuk V. ", date="14. 11. 2012") public class Just. ATest { @My. Annotation(author="Rogalchuk V. ", date="14. 11. 2012") public static void annotated. Method() { System. out. println("Welcome to Annotations!"); } public static void main(String args[]) { annotated. Method(); } }

Доступ к аннотациям public static void print. Annotations() { Just. ATest test=new Just. ATest(); Доступ к аннотациям public static void print. Annotations() { Just. ATest test=new Just. ATest(); try { Class c= test. get. Class(); My. Annotation annotation 1= (My. Annotation)c. get. Annotation(My. Annotation. class); System. out. println("Автор класса: "+annotation 1. author()); System. out. println("Дата создания класса: "+annotation 1. date()); Method m=c. get. Method("test. Method"); if (m. is. Annotation. Present(My. Annotation. class) { My. Annotation annotation 2=m. get. Annotation(My. Annotation. class); System. out. println("Автор метода: "+annotation 2. author()); System. out. println("Дата создания метода: "+annotation 2. date()); } } catch(No. Such. Method. Exception ex) { System. out. println("Invalid Method. . . "+ex. get. Message()); } }

@Target Element. Type. PACKAGE p Element. Type. ANNOTATION_TYPE p Element. Type. METHOD p Element. @Target Element. Type. PACKAGE p Element. Type. ANNOTATION_TYPE p Element. Type. METHOD p Element. Type. CONSTRUCTOR p Element. Type. FIELD p Element. Type. LOCAL_VARIABLE p

@Target и все-все @Documented @Retention(Retention. Policy. RUNTIME) @Target({Element. Type. TYPE, Element. Type. METHOD, Element. @Target и все-все @Documented @Retention(Retention. Policy. RUNTIME) @Target({Element. Type. TYPE, Element. Type. METHOD, Element. Type. FIELD}) @Inherited public @interface Unfinished. Job { public enum Priority { LOW, MEDIUM, HIGH } String value(); String[] changed. By() default ""; Priority priority() default Priority. MEDIUM; String created. By() default "Vyacheslav Rogalchuk"; String last. Changed(); }

@Target и все-все … @Unfinished. Job( changed. By=“RVV”, value=“Do or die!”, priority=Priority. HIGH ) @Target и все-все … @Unfinished. Job( changed. By=“RVV”, value=“Do or die!”, priority=Priority. HIGH ) public void big. Tedious. Chunk. Of. Code() { …. } …

А теперь вернемся к сервлетам А теперь вернемся к сервлетам

Servlet 3. 0 Аннотации p Упрощение конфигурирования p Асинхронная обработка запросов p Pluggability – Servlet 3. 0 Аннотации p Упрощение конфигурирования p Асинхронная обработка запросов p Pluggability – интеграция с фреймворками p

@Web. Servlet value p name p description p url. Patterns p init. Params p @Web. Servlet value p name p description p url. Patterns p init. Params p load. On. Startup p small. Icon p large. Icon p async. Supported p

@Web. Servlet(”/hi”) public class Privet. Servlet extends Http. Servlet{ //. . . } @Web. Servlet(”/hi”) public class Privet. Servlet extends Http. Servlet{ //. . . }

@Web. Servlet(url. Patterns=”/hi”) public class Privet. Servlet extends Http. Servlet{ //. . . } @Web. Servlet(url. Patterns=”/hi”) public class Privet. Servlet extends Http. Servlet{ //. . . }

@Web. Servlet(url. Patterns={”/hi”, ”/hello”, ”/salut”}) public class Privet. Servlet extends Http. Servlet{ //. . @Web. Servlet(url. Patterns={”/hi”, ”/hello”, ”/salut”}) public class Privet. Servlet extends Http. Servlet{ //. . . }

@Web. Servlet(name=“Saluting. Servlet” url. Patterns={”/hi”, ”/hello”, ”/salut”}) public class Privet. Servlet extends Http. Servlet{ @Web. Servlet(name=“Saluting. Servlet” url. Patterns={”/hi”, ”/hello”, ”/salut”}) public class Privet. Servlet extends Http. Servlet{ //. . . }

@Web. Init. Param @Web. Servlet(url. Patterns=”/hi”, init. Params= { @Web. Init. Param(name=“abc @Web. Init. Param @Web. Servlet(url. Patterns=”/hi”, init. Params= { @Web. Init. Param(name=“abc", value=“ 123")} ) public class Privet. Servlet extends Http. Servlet {. . . }

@Multipart. Config @Web. Servlet(url. Patterns=”/hi”) @Multipart. Config( location= @Multipart. Config @Web. Servlet(url. Patterns=”/hi”) @Multipart. Config( location="/tmp", max. Request. Size=2*10485760 L, max. File. Size = 10485760 L, file. Size. Threshold=8192 L) public class Privet. Servlet extends Http. Servlet{ //…где-то в do. Get Part img = request. get. Part(“uploaded. Image”); img. get. Size(); img. get. Input. Stream(); // обработка картинки… }

@Web. Filter filter. Name p description p display. Name p init. Params p servlet. @Web. Filter filter. Name p description p display. Name p init. Params p servlet. Names p value p url. Patterns p dispatcher. Types p async. Supported p

@Web. Filter(“/some. Url”) public class My. Filter implements Filter { public void do. Filter(Http. @Web. Filter(“/some. Url”) public class My. Filter implements Filter { public void do. Filter(Http. Servlet. Request req, Http. Servlet. Response res) {…} }

@Web. Filter(url. Patterns={“/some. Url”}) public class My. Filter implements Filter { public void do. @Web. Filter(url. Patterns={“/some. Url”}) public class My. Filter implements Filter { public void do. Filter(Http. Servlet. Request req, Http. Servlet. Response res) {…} }

@Web. Filter(servlet. Names={“Saluting. Servlet”}) public class My. Filter implements Filter { public void do. @Web. Filter(servlet. Names={“Saluting. Servlet”}) public class My. Filter implements Filter { public void do. Filter(Http. Servlet. Request req, Http. Servlet. Response res) {…} }

@Web. Listener javax. servlet. Servlet. Context. Listener p javax. servlet. Servlet. Context. Attribute. Listener @Web. Listener javax. servlet. Servlet. Context. Listener p javax. servlet. Servlet. Context. Attribute. Listener p javax. servlet. Servlet. Request. Attribute. Listener p javax. servlet. http. Http. Session. Attribute. Listener p

@Web. Listener public class My. Listener implements Servlet. Context. Listener{ public void context. Initialized(Servlet. @Web. Listener public class My. Listener implements Servlet. Context. Listener{ public void context. Initialized(Servlet. Context. Event sce) { Servlet. Context sc = sce. get. Servlet. Context(); sc. add. Servlet(“Salut. Servlet", "Пример добавления сервлета", “Privet. Servlet", null, -1); sc. add. Servlet. Mapping(“Salut. Servlet", new String[] {“/hello“, ”/hi”, ”/salut”}); } }

@Servlet. Security((http. Method. Constraints = { @Http. Method. Constraint( value = @Servlet. Security((http. Method. Constraints = { @Http. Method. Constraint( value = "GET", roles. Allowed = "R 1"), @Http. Method. Constraint( value = "POST", roles. Allowed = "R 2", transport. Guarantee = Transport. Guarantee. CONFIDENTIAL) }) public class Secured. Servlet extends Http. Servlet { }

Асинхронная обработка запросов Non-blocking server p Comet p «push-style» p Позволяет освободить рабочий поток Асинхронная обработка запросов Non-blocking server p Comet p «push-style» p Позволяет освободить рабочий поток для обработки других запросов на время ожидания освобождения ресурса или выполнения задачи удаленным сервисом p Требует установки поля support. Async=“true” в @Web. Servlet или @Web. Filter p

Асинхронная обработка запросов СЦЕНАРИЙ 1. Сервлет получает запрос на обработку 2. …отправляет запросы к Асинхронная обработка запросов СЦЕНАРИЙ 1. Сервлет получает запрос на обработку 2. …отправляет запросы к удаленным ресурсам (СУБД, веб-сервис итп), 3. . и завершает свою работу, передав обработчику запроса-ответа созданный асинхронный контекст 4. Когда запрошенный ресурс становится доступен, обработчик возобновляет обработку запроса. 5. Обработка завершается, ответ отправляется клиенту.

Асинхронная обработка запросов @Web. Servlet( name = Асинхронная обработка запросов @Web. Servlet( name = "simple", value = {"/async. Example"}, async. Supported = true ) public class Simple. Async. Servlet extends Http. Servlet { public void service(Servlet. Request req, final Servlet. Response res) throws Servlet. Exception, IOException { Async. Context ctx = req. start. Async(); ctx. set. Timeout(30000); ctx. add. Listener(new Async. Listener() { public void on. Complete(Async. Event event) throws IOException { log("on. Complete called"); } public void on. Timeout(Async. Event event) throws IOException { log("on. Timeout called"); } public void on. Error(Async. Event event) throws IOException { log("on. Error called"); } public void on. Start. Async(Async. Event event) throws IOException { log("on. Start. Async called"); } }); ctx. start(new Runnable() { public void run() { try { ctx. get. Response(). get. Writer(). write(Мessage. Format. format( "Processing task in bgt_id: [{0}]", Thread. current. Thread(). get. Id())); } catch (IOException e) { log("Problem processing task", e); } ctx. complete(); } }); }}

Асинхронная обработка запросов p Servlet. Request n n p start. Async(Servlet. Request req, Servlet. Асинхронная обработка запросов p Servlet. Request n n p start. Async(Servlet. Request req, Servlet. Response res) start. Async() is. Async. Supported() is. Async. Started() Async. Context n n n n n get. Request() get. Response() set. Timeout(long msec) add. Listener(async. Listener, req, res) dispatch(path) start(Runnable r) complete()

Асинхронная обработка запросов p Async. Listener n n public void on. Complete(Async. Event event) Асинхронная обработка запросов p Async. Listener n n public void on. Complete(Async. Event event) public void on. Timeout(Async. Event event) public void on. Error(Async. Event event) public void on. Start. Async(Async. Event event)

Асинхронная обработка запросов Асинхронная обработка запросов

На сегодня - ВСЁ Вячеслав Рогальчук 14. 11. 2012 Спасибо за внимание! На сегодня - ВСЁ Вячеслав Рогальчук 14. 11. 2012 Спасибо за внимание!