презентация - JDK.pptx
- Количество слайдов: 76
Кофе с молоком
Для начала разберемся что есть: Java Runtime Environment (сокр. JRE) — минимальная реализация виртуальной машины, необходимая для исполнения Java-приложений.
Java Development Kit (последняя версия 1. 6), сокращенно JDK — бесплатно распространяемый фирмой Sun комплект разработчика приложений на языке Java.
Java Platform, Micro Edition (Java ME, ранее — Java 2 Micro Edition, J 2 ME) — подмножество платформы Java для устройств, ограниченных в ресурсах. Существуют SDK от: • Sun (Sun Java ME SDK) • Nokia S 60 (S 40) SDK • Sony Ericsson SDK • LG SDK ……
Обрезания и отличаи в основном касаются: • платформа Java ME лишь подмножество платформы Java SE. • кординальные отличаи в области пользовательского интерфейса. • “облегченная" версия виртуальной машины. Короче, как это не странно, учтена специфика мобильных устройств: • сильная ограниченность аппаратных ресурсов(слабый процессор, мало памяти, маленькое разрешение итд), • наличие несвойственных для desktopa возможностей – «голубой зуб» , инфракрасный порт итд, • а также специфика конкретного мобильного устройства (множество SDK).
Хватит о грустном или ковыряем Java SE: java. lang – основной пакет, составляющие основу для всех других. В пакет входят классы: • Object • Class • String. Builder • Math • Throwable • Thread • System • все «обертки» для примитивных типов и еще много чего.
В дополнение к java. lang сразу же хотелось бы вспомнить о «Apache Commons» (мы часто будем возвращаться к этой библиотеке), а именно о – org. apache. commons. lang. В этом пакете содержаться такие классы как: • String. Utils • Class. Utils • Array. Utils • Boolean. Utils • Hash. Code. Builder • Equals. Builder • итд.
Сравнение строк: Как часто пишут: public static boolean equals(String obj 1, String obj 2) { if (obj 1 == null || obj 2 == null) { return false; } else { return obj 1. equals(obj 2); } } Как можно упростить: String. Utils. equals(null, null) = true; String. Utils. equals(null, "abc") = false; String. Utils. equals("abc", null) = false; String. Utils. equals("abc", "abc") = true; String. Utils. equals("abc", "ABC") = false; *Используйте String. Utils. EMPTY – константа которую стоит использовать, а не заводить свои кругом и всюду.
Послезно помнить: String. Utils. trim. To. Empty(null) = "" String. Utils. trim. To. Empty("") = "" String. Utils. trim. To. Empty("abc") = "abc" String. Utils. trim. To. Empty(" abc ") = "abc" Надо помнить что эти методы, как и String. trim(), возвращают результат своей работы, то есть: String s 1 = " abc "; String s 2 = " abc "; s 1 = String. Utils. trim. To. Empty(s 1); String. Utils. trim. To. Empty(s 2); System. out. println(s 1); System. out. println(s 2); Выведет: “abc” “ abc “
Послезно помнить: Boolean. Utils. to. Boolean(null) = false; Boolean. Utils. to. Boolean("true") = true; Boolean. Utils. to. Boolean("TRUE") = true; Boolean. Utils. to. Boolean("t. RUe") = true; Boolean. Utils. to. Boolean("on") = true; Boolean. Utils. to. Boolean("yes") = true; Boolean. Utils. to. Boolean("false") = false; Boolean. Utils. to. Boolean("x gti") = false; Для сравнения часто используют: Boolean. TRUE. equal(flag), а можно нагляднее Boolean. Utils. is. True(flag)
Следующий класс полезно использовать при валидации входящих в функцию параметров. Validate. is. True( i > 0, "The value must be greater than zero: ", i); кинет Illegal. Argument. Exception с сообщением указанным в кавычках, если i не удовлетворяет условию.
В чем еще полезность утилитарных классов? Word. Utils. capitalize. Fully("i am FINE") = "I Am Fine” - делает заглавной первую букву каждого слова, все остальные делает строчными. System. Utils. is. Java. Version. At. Least(1. 3 f) – проверяет на какой версии java запущено приложение. Map color. Map = Map. Utils. to. Map(new String[][] {{ {"RED", "#FF 0000"}, {"GREEN", "#00 FF 00"}, {"BLUE", "#0000 FF"} }); Облегчает создание Map, что тут еще скажешь
Типичный пример использования Equals. Builder, который нам также предоставляет org. apache. commons. lang : public boolean equals(Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj. get. Class() != get. Class()) { return false; } My. Class rhs = (My. Class) obj; return new Equals. Builder(). append. Super(super. equals(obj)). append(field 1, rhs. field 1). append(field 2, rhs. field 2). append(field 3, rhs. field 3). is. Equals(); }
Типичный пример использования Hash. Code. Builder, который нам также предоставляет org. apache. commons. lang : Важно запомнить что: Те поля по которым происходит сравнение объектов (см. предыдущий слайд) должны использоваться и для построения hash кода. В построении hash кода не должны принимать участия изменяющиеся члены класса. public class Person { String name; int age; boolean smoker; . . . public int hash. Code() { return new Hash. Code. Builder(17, 37). append(name). append(age). append(smoker). to. Hash. Code(); } }
Короче, java. lang и org. apache. commons. lang пакеты достойные досконального изучения и повсеместного использования(эти слова касаются всех наработок в Apache Commons).
java. lang. ref • Средства сборки "мусора" в Java автоматически определяют, когда ссылки к объекту отсутствуют. • Классы в пакете java. lang. ref, которые были добавлены в Java 2, обеспечивают более гибкий контроль над процессом сборки "мусора".
java. lang. reflection Отражение (reflection) — это способность программы анализировать саму себя. Пакет java. lang. reflect обеспечивает способность получить информацию о полях, конструкторах, методах и модификаторах класса.
Допустим есть класс описанный ниже: package some; import java. lang. reflect. *; import java. lang. annotation. Annotation; import java. io. Serializable; public abstract class Test implements Serializable, Cloneable { private int field; public Test(Object field) { } @Deprecated protected static void method(String[] params) { } }
Class clazz = Test. class; // выводим название пакета Package p = clazz. get. Package(); System. out. println("package " + p. get. Name() + "; "); Выведет - package some; // выводим интерфейсы, которые реализует класс Class[] interfaces = clazz. get. Interfaces(); for (int i = 0, size = interfaces. length; i < size; i++) { System. out. print(i == 0 ? "implements " : ", "); System. out. print(interfaces[i]. get. Simple. Name()); } Выведет - implements Serializable, Cloneable
Apache Commons спешит на помощь! Так можно получить имя пакета в котором объявлен класс: Class. Utils. get. Package. Name(Test. class) Узнать является ли класс потомком другого можно используя: Class. Utils. is. Assignable(java. lang. class cls, java. lang. class to. Class) *(второй аргумент это класс который реализует первый) Получить значение свойства бина можно используя Property. Utils из пакета org. apache. commons. beans например так: String first. Name = (String) Property. Utils. get. Simple. Property(employee, "first. Name"), где employee экземпляр бина у которого есть свойство – «first. Name» .
Полезности которые мы получаем при наличаи reflection: Создаем closure: Bean. Property. Value. Change. Closure closure = new Bean. Property. Value. Change. Closure( "active. Employee", Boolean. TRUE ); Обновляем коллекцию: Collection. Utils. for. All. Do( people. Collection, closure ); Теперь у всех элементов коллекции свойство active. Employee = true.
А еще такие: Bean. Property. Value. Equals. Predicate predicate = new Bean. Property. Value. Equals. Predicate( "active. Employee", Boolean. FALSE ); Фильтрация коллекции: Collection. Utils. filter( people. Collection, predicate ); Теперь коллекция содержит только элементы у которых active. Employee = false.
А это вообще фантастично: Создаем transformer: Bean. To. Property. Value. Transformer transformer = new Bean. To. Property. Value. Transformer( "person. address. city" ); Трансформируем коллекцию: Collection peoples. Cities = Collection. Utils. collect( people. Collection, transformer ); Таким нехитрым (или все таки хитрым) способом получили все города, содержащиеся в свойстве адрес всех людей в коллекции.
С помощью рефлексии можно получить все методы класса, вызвать их с параметрами (даже приватные). Это мощный механизм данный разработчикам, однако им надо пользоваться с умом и применять где это действительно нужно.
java. util – пакет содержит одно из наиболее полезных расширений java — коллекции Основные интерфейсы: • List - определяет коллекцию элементов Object, по которой можно перемещаться. • Set - определяет коллекцию без дублирующих элементов. • Map - определяет коллекцию пар ключзначение.
Реализация (реализации): • List - Array. List, Vector (synchronized) • Set - Hash. Set, Tree. Set (гарантирующий порядок итерации) • Map – Hash. Map
При использовании библиотеки Java Collections Framework вы должны знать о том, что доступно в классе Collections. Этот класс содержит набор статических методов, поддерживающих управление коллекцией
Первый метод позволяет скопировать содержимое одной коллекции в другую, например: List source = new Array. List(); source. add("one"); source. add("two"); List target = new Array. List(); target. add("three"); target. add("four"); Collections. copy(target, source); System. out. println(target); Этот код копирует source в target. Коллекция target должна иметь тот же размер, что и source, то есть, вы не сможете скопировать List в пустой List.
Метод sort() сортирует элементы в их натуральном порядке: List strings = new Array. List(); strings. add("one"); strings. add("two"); strings. add("three"); strings. add("four"); Collections. sort(strings); System. out. println(strings); В консоли отобразится [four, one, three, two]. *Для того чтобы отсортировать экземпляры классов написанных вами нужно отнаследовать ваш класс от Comparable или вызвать метод sort c передачей своего Comparator.
java. lang. annotation – в пакете содержатся встроенные средства для некоторого расширения языка, для описания так называемых метаданных — данных, описывающих элементы кода. В этом пакете определен интерфейс: • Annotation. • Element. Type (к чему аннотация применима) • Retention. Policy (когда доступна – SOURCE, CLASS, RUNTIME ). *Аннотация без параметров называется - МАРКЕР.
java. lang. management - Этот пакет, использующий архитектуру Java Management Extensions (JMX), содержит интерфейсы для мониторинга и управления виртуальной машиной.
Использование: Получаем бин: Thread. MXBean mxbean = Management. Factory. get. Thread. MXBean(); Выводим информацию о потоках: for (long thread. ID : thread. MXBean. get. All. Thread. Ids()) { Thread. Info thread. Info = thread. MXBean. get. Thread. Info(thread. ID); out. println("Thread: " + thread. Info. get. Thread. Name() + " " + thread. Info. get. Thread. State()); }
java. math - В этом новом пакете содержится несколько классов, которые поддерживают арифметические операции над целыми числами (Big. Integer) и над числами с плавающей точкой (Big. Decimal) произвольной точности. Также существует класс Math (java. lang) который содержит основные арифметические функции, а также две константы PI и e, например: d = Math. sqrt(d); // Взятие корня квадратного d = Math. log(d); // Взятие натурального логарифма d = Math. pow(10, d); // Возведение в степень
И снова org. apache. commons. math. В пакете содержится множество классов всесторонне охватывающих работу с числами: • анализ, • интерполяция, • работа с полиномами, • статистическая обработка, • геометрические преобразования и многое другое. Вот пример использования класса Math. Utils (расширяет стандартный класс Math): Math. Utils. gcd(int p, int q) //Возвращает НОД аргументов
java. net - содержит классы, позволяющие приложению работать с сетью, предоставляя абстракции для сетевых адресов, соединений, реализацию сокетов и т. д.
Пример получения кодировки страницы (ресурса) используя класс URL: URL url = new URL("http: //www. tut. by"); URLConnection conn = url. open. Connection(); String encoding = conn. get. Content. Encoding(); Пакет содержит возможности для работы с сокетами, для этого предназначены классы – Socket и Server. Socket. *Сокет — абстрактный объект, представляющий конечную точку соединения. (ip + port)
Что же на приготовил Apache Commons? Приготовил пакет - org. apache. commons. net Поддерживаемые им протоколы: • FTP/FTPS • SMT/POP 3 • Telnet • итд.
Пример доступа по ftp протоколу: boolean error = false; FTPClient ftp = new FTPClient(); try { int reply; ftp. connect("ftp. foobar. com"); // После соединения проверяем код ответа. reply = ftp. get. Reply. Code(); if(!FTPReply. is. Positive. Completion(reply)) { ftp. disconnect(); } f. login(username, password); . . . // получение файлов ftp. logout(); } catch(IOException e) { error = true; e. print. Stack. Trace(); } finally { if(ftp. is. Connected()) { try { ftp. disconnect(); } catch(IOException ioe) { // do nothing } } }
java. text – классы и интерфейсы этого пакета используются для организации многоязыковой поддержки. • В пакете содержатся классы, предназначенные для поддержки форматов представления данных. • В нем также содержатся классы, обеспечивающие сопоставление строк в соответствии с правилами, принятыми в данной местности.
Несколько слов о датах и их форматировании: • Класс Date устарел и скорее запутывает начинающих программистов. • Для осуществеления манипуляций с датами следует использовать класс Calendar. • Для форматированного вывода дат используем Date. Format.
Создаем календарь со временем и датой равной текущему системному: Calendar calendar = Gregorian. Calendar. get. Instance(); Можно изменять параметры даты и времени: calendar. set(Calendar. DAY_OF_MONTH, 15); calendar. set(Calendar. YEAR, 1978); Можно добавлять или отнимать от параметров даты и времени значения: calendar. add(Calendar. DAY_OF_MONTH, 20); *System. current. Time. Millis() - количество миллисекунд, прошедших после полуночи 1 января 1970 года
Форматированный вывод даты и времени: Date today = new Date(); Simple. Date. Format formatter = new Simple. Date. Format("MM/dd/yyyy"); String formatted. Date = formatter. format(today); System. out. println(formatted. Date); При выполнении этого кода вы получите примерно следующий результат (естественно, он будет отражать текущую дату во время выполнения кода): 10/03/2010
• Пакет java. util. zip обеспечивает способность читать и записывать файлы в популярном ZIP u GZIP файловых форматах. • Доступны как ZIP, так и GZIP потоки ввода и вывода. Другие классы реализуют ZLIBалгоритмы для сжатия и декомпрессии. • Пакет java. util. jar обеспечивает возможность читать и записывать файлы JAR (Java Archive).
java. io - подавляющее большинство программ обменивается данными с внешним миром. Обычно часть вычислительной платформы, которая отвечает за обмен данными, так и называется – система ввода/вывода.
• В java для описания работы по вводу/выводу используется специальное понятие поток данных (stream). • Поток данных связан с некоторым источником, или приемником, данных, способным получать или предоставлять информацию. • Введение концепции stream позволяет отделить основную логику программы от низкоуровневых операций с устройствами ввода/вывода.
Иерархия классов для работы с потоками байтов
Небольшой пример работы с потоками: byte[] bytes = {1, 0}; Byte. Array. Input. Stream in = new Byte. Array. Input. Stream(bytes); int readed. Int = in. read(); // readed. Int=1 System. out. println("first element read is: “ + readed. Int); readed. Int = in. read(); // readed. Int=0 System. out. println(" second element read is: “+ readed. Int); Программа выведет: first element read is: 1 second element read is: 0
На практике при считывании с внешних устройств ввод данных почти всегда необходимо буферизировать. На примере считывания 1000000 байт получаем следующую картину: • время прямого чтения: 6546 millisec • время буферизированного чтения: 250 millisec
Пример использования: Byte. Array. Output. Stream out = new Byte. Array. Output. Stream(); Data. Output. Stream out. Data = new Data. Output. Stream(out); out. Data. write. Byte(128); out. Data. write. Int(128); out. Data. write. Long(128); out. Data. write. Double(128); Внутри методов происходит преобразования типа к массиву байт, существуют и симметричные методы считывания.
Рассмотренные классы – наследники Input. Stream и Output. Stream – работают с байтовыми данными. Для работы с текстом есть альтернатива. Иерархия классов для работы с символами:
Пример записи текста в файл: String file. Name = "d: \file. txt“; //Строка, которая будет записана в файл String data = "Some data to be written and read. n"; try { File. Writer fw = new File. Writer(file. Name); Buffered. Writer bw = new Buffered. Writer(fw); bw. write(data); } catch(Exception e) { e. print. Stack. Trace(); } (сделать finaly)
Класс java. io. File представляет собой файл/директорию и определяет несколько важных методов для манипуляции им/ей. Использование: File homedir = new File(System. get. Property("user. home")); File f = new File(homedir, “property. configfile"); //получение размера файла в чем? ? ? long filelength = f. length(); // получение даты последнего изменения файла Date last. Modified = new java. util. Date(f. last. Modified()); Получение корневой директории, в Windows вернет список дисков в системе: File[] rootdirs = File. list. Roots();
А что по этому поводу «скажет» наш любимый Apache Commons? Обычно мы пишем так: Input. Stream in = new URL( "http: //jakarta. apache. org" ). open. Stream(); try { Input. Stream. Reader in. R = new Input. Stream. Reader( in ); Buffered. Reader buf = new Buffered. Reader( in. R ); String line; while ( ( line = buf. read. Line() ) != null ) { System. out. println( line ); } } Finally { in. close(); } А можно было бы так: Input. Stream in = new URL( "http: //jakarta. apache. org" ). open. Stream(); try { System. out. println( IOUtils. to. String( in ) ); } finally { IOUtils. close. Quietly(in); } * Только не стоит так делать если в потоке 1 GB информации
Так, например легко прочитать все строки в файле: File file = new File("/commons/io/project. properties"); List lines = File. Utils. read. Lines(file, "UTF-8"); А так узнать кол-во свободного места на диске: long free. Space = File. System. Utils. free. Space("C: /"); Так удобно капировать информацию: IOUtils. copy(Reader input, Writer output) до 2 GB IOUtils. copy. Large(Reader input, Writer output) более 2 GB
Часто бывает что программа временно создает файлы для своей работы, для того чтобы не забыть их удалить можно использовать File. Cleaning. Tracker. Он отслеживает информацию о дескрипторе файла и как только сборщик мусора удалит дескриптор, так сразу и File. Cleaning. Tracker удалит и файл с диска. Использовать следует следующим образом: File. Cleaning. Tracker. track(String path, Object marker), где path – путь к файлу, marker – дескриптор файла.
Преимущества потоков • Поточный интерфейс ввода/вывода в Java обеспечивает четкую абстракцию для сложных и часто громоздких задач. • Композиция фильтрованных поточных классов позволяет динамически формировать заказной поточный интерфейс, удовлетворяющий ваши требования к передаче данных.
Немного о Сериализации Сериализация (serialization) — это процесс записи состояния объекта в форме байтового потока. Это полезно, когда вы хотите сохранить состояние своей программы в постоянной области памяти, например, в файле. Позднее вы можете восстановить эти объекты, используя процесс десериализации (deserialization).
Интерфейс Serializable определен в пакете java. io • Средства сериализации могут работать только с объектами, которые реализуют интерфейс Serializable. • Интерфейс Serializable не определяет никаких членов. Он просто указывает на то, что класс может быть сериализован • Переменные, которые объявлены как transient или static, не сохраняются средствами сериализации.
Интерфейс Externailzable определен в пакете java. io Средства сериализации и десериализации Java были разработаны так, чтобы большая часть работы по сохранению и восстановлению состояния объекта выполнялась автоматически. Однако есть ситуации, в которых программисту нужно иметь контроль над этими процессами. Именно для таких ситуаций и разработан интерфейс Externaiizabie.
java. security - в этом пакете содержатся классы и интерфейсы, являющиеся фундаментальными абстракциями элементов криптографии: • открытых и закрытых ключей • сертификатов • подтверждений о приеме сообщений и цифровых подписей.
java. rmi - в этом пакете определены основополагающие классы и интерфейсы, которые используются для удаленного вызова методов. Большинство классов данного пакета представляют собой типы исключений.
java. sql – в пакете содержаться средства доступа к базам данных посредством JDBC (Java Data Base Connectivity).
Существуют следующие виды типов Statement, различающихся по назначению: • java. sql. Statement — Statement общего назначения; • java. sql. Prepared. Statement — Statement, служащий для выполнения запросов, содержащих подставляемые параметры (обозначаются символом '? ' в теле запроса); • java. sql. Callable. Statement — Statement, предназначенный для вызова хранимых процедур.
Преимущества JDBC: • Лёгкость разработки: разработчик может не знать специфики базы данных, с которой работает; • Код не меняется, если компания переходит на другую базу данных; • Не нужно устанавливать громоздкую клиентскую программу; • К любой базе можно подсоединиться через легко описываемый URL.
Пример использования: /** * Данный пример использует j. TDS, свободный драйвер JDBC для Microsoft SQL Server */ Connection conn = Driver. Manager. get. Connection( "jdbc: jtds: sqlserver: //SERVER/Northwind; instance=INST; domain=Sampl e_NTLM_Domain", "user", "password"); Statement stmt = conn. create. Statement(); Result. Set rs = stmt. execute. Query("SELECT Last. Name + ' ' + First. Name AS Full. Name, Address FROM Employees"); while(rs. next()){ System. out. println(rs. get. String("Full. Name") + "t" + rs. get. String("Address")); } rs. close(); stmt. close();
Apache Commons и тут немного упрощает нам жизнь (корректно закроет соединение в любом случае): Result. Set. Handler – абстракция предназначенная для обработки данных(конвертер если угодно). Result. Set. Handler<Object[]> h =. . . Query. Runner run = new Query. Runner(); Connection conn =. . . // open a connection try{ Object[] result = run. query( conn, "SELECT * FROM Person WHERE name=? ", h, "John Doe"); } finally { // Use this helper method so we don't have to check for null Db. Utils. close(conn); }
Пример «трансформации» строки в объект: Query. Runner run = new Query. Runner(data. Source); Result. Set. Handler<Person> h = new Bean. Handler(Person. class); // возвращяет объект класса Person полученного путем извлечения данных из первой строки Person p = run. query( "SELECT * FROM Person WHERE name=? ", h, "John Doe");
Немного о JNDI. Java Naming and Directory Interface (JNDI) – это API для доступа к службам имен и каталогов.
Следующий код, включенный в EJB, позволяет подключиться к источнику данных, привязанному к имени "java: /Default. DS”. Initial. Context ctx = new Initial. Context(); . . Data. Source ds = (Data. Source) ctx. lookup("java: /Default. DS");
C пришествием EJB 3. 0 задача упростилась еще больше: @Resource(mapped. Name="java: /Default. DS") private Data. Source ds; Итак, с помощью JNDI мы можем получить объект по его имени не вдаваясь в реализацию и механизм поиска этого объекта.
javax. ejb – пакет в котором находятся классы и интерфейсы для поддержки технологии EJB (Enterprise Java Beans). javax. persistence – пакет в котором содержатся абстракции для поддержки технологии JPA (Java Persistens API). Например такие классы как: • Entity. Manager • Persistence Аннотации: • @Entity • @Id • @One. To. Many • итд.
javax. transactions – поддержка транзакционной модели поведения. javax. jms – пакет содержащий классы для работы с технологией Java Message Service (JMS). *MDB работают на основе JMS. *Для облегчения работы с классами из этих пакетов в Apache Commons есть соответствующие расширения.
javax. mail – пакет позволяющий разрабатывать приложения с поддержкой электронной почты. Пример посылки сообщения: String SMTP_AUTH_USER = "<почтовый адрес в почте >"; String SMTP_AUTH_PWD = "<пароль>"; Properties props = new Properties(); props. put("mail. transport. protocol", "smtps"); props. put("mail. smtps. host", SMTP_AUTH_USER); props. put("mail. smtps. auth", "true"); props. put("mail. smtp. sendpartial", "true"); Session session = Session. get. Default. Instance(props); session. set. Debug(true); Transport transport = session. get. Transport(); transport. connect("smtp. mail. com", 465, SMTP_AUTH_USER, SMTP_AUTH_PWD); Mime. Message message = new Mime. Message(session); message. set. Subject("тестовое письмо!"); message. set. Text("Тестирование Java. Mail c mail почтой прошло успешно!"); message. add. Recipient(Message. Recipient. Type. TO, new Internet. Address("<получатель>")); message. set. Sent. Date(new Date()); transport. send. Message(message, message. get. Recipients(Message. Recipient. Type. TO));
Пример получения сообщения: String POP_AUTH_USER = "<почтовый адрес в почте mail>"; String POP_AUTH_PWD = "<пароль>"; String FOLDER_INDOX = "INBOX"; // имя папки "Входящие" String SSL_FACTORY = "javax. net. ssl. SSLSocket. Factory"; Properties pop 3 Props = new Properties(); pop 3 Props. set. Property("mail. pop 3. socket. Factory. class", SSL_FACTORY); pop 3 Props. set. Property("mail. pop 3. socket. Factory. fallback", "false"); pop 3 Props. set. Property("mail. pop 3. port", "995"); pop 3 Props. set. Property("mail. pop 3. socket. Factory. port", "995"); URLName url = new URLName("pop 3", "pop. gmail. com", 955, "", POP_AUTH_USER, POP_AUTH_PWD); Session session = Session. get. Instance(pop 3 Props, null); Store store = session. get. Store(url); store. connect(); Folder folder = store. get. Folder(FOLDER_INDOX); try { folder. open(Folder. READ_WRITE); } catch (Messaging. Exception ex) { folder. open(Folder. READ_ONLY); } Message[] messages = folder. search(new Flag. Term(new Flags(Flags. Flag. SEEN), false)); . . . // обработка сообщений older. close(false); store. close();
Посылка сообщения с помощью Apache Commons: Simple. Email email = new Simple. Email(); email. set. Host. Name("mail. myserver. com"); email. add. To("jdoe@somewhere. org", "John Doe"); email. set. From("me@apache. org", "Me"); email. set. Subject("Test message"); email. set. Msg("This is a simple test of commons-email"); email. send(); Можно также создать объект класса Email. Attachment и вложить в посылаемое письмо произвольный файл: Email. Attachment attachment = new Email. Attachment(); attachment. set. Path("mypictures/john. jpg"); attachment. set. Disposition(Email. Attachment. ATTACHMENT); attachment. set. Description("Picture of John"); attachment. set. Name("John"); email. attach(attachment);
Конец
презентация - JDK.pptx