1 http
Протокол HTTP, вероятно, является наиболее используемым и наиболее важным протоколом в Интернете сейчас. Все больше и больше Java -приложений необходимо напрямую доступ к сетевым ресурсам через протокол HTTP.
Хотя основная функциональность доступа к протоколу HTTP была предоставлена в пакете JDK Java.net, сама библиотека JDK предоставляет недостаточно богатую и достаточно гибкую для большинства приложений. HTTPClient используется для обеспечения эффективных, новейших, богатых функциями клиентских инструментов программирования, которые поддерживают протокол HTTP, и он поддерживает последние версии и рекомендации протокола HTTP.
Вообще говоря, мы используем Chrome или другие браузеры для доступа к веб -серверу, который используется для просмотра страниц для просмотра информации, отправки некоторых данных, загрузки файлов и т. Д. Некоторые из посещаемых страниц являются лишь некоторыми обычными страницами, некоторые требуют, чтобы пользователи входили в систему перед использованием или требуют аутентификации, а некоторые передаются через шифрование, такие как HTTP. Браузеры, которые мы в настоящее время используем для обработки этих ситуаций, не будут представлять проблему. Но что, если нам нужно не получать доступ к ресурсам сервера через браузер? Так что мне делать?
Давайте возьмем локального клиента для загрузки и загрузки файлов в качестве примера, чтобы сделать небольшую демонстрацию. Существует две формы httpclient, одна находится в org.apache.http, а другая - org.apache.commons.httpclient.httpclient.
2 Загрузка файла
Загрузка файла может быть реализована двумя способами, одним из них является метод постметода, а другой - метод HTTPPOST. Эти два похожи. Postmethod использует файловый тел для обертывания потока обертывания файлов, а Httppost использует FilePart для обертывания потока файла. При передаче потоков файлов на сервер другие параметры могут быть переданы одновременно.
2.1 Клиентская обработка
2.1.1 Метод постметода
Инкапсулируйте файл в FilePart и поместите его в массив деталей. В то же время другие параметры могут быть помещены в StringPart. Здесь нет письма, но просто установите параметры в форме SetParameter. Httpclient здесь - org.apache.commons.httpclient.httpclient.
public void upload (String localfile) {file file = new File (localFile); Postmethod filepost = new postmethod (url_str); Httpclient client = new httpclient (); try {// Следующие методы могут использоваться для моделирования представления параметра страницы filepost.setParameter («Имя пользователя», имя пользователя); filepost.setParameter ("passwd", passwd); Part [] parts = {new FilePart (file.getName (), file)}; filepost.setRequestentity (новая многоуровневая неэффективность (части, filepost.getParams ())); client.gethtpconnectionmanager (). getParams (). SetConnectionTimeout (5000); int status = client.executemethod (filepost); if (status == httpstatus.sc_ok) {System.out.println ("Загружено успешно"); } else {System.out.println ("upload Faile"); }} catch (Exception ex) {ex.printstackTrace (); } наконец {filePost.ReleAseConnection (); }}Не забудьте выпустить соединение через ReleaseConnection после его завершения.
2.1.2 Метод Httppost
Этот метод похож на вышесказанное, но он становится файловым телом. Массив деталей выше соответствует httpentity здесь. Httpclient здесь находится под org.apache.http.client.methods.
public void upload (string localfile) {stockableHttpClient httpclient = null; ClosableHttpresponse response = null; try {httpclient = httpclients.createdefault (); // Загрузить нормальный параметр, а файл на следующий адрес - это сервис httppost httppost = new httppost (url_str); // конвертировать файл в потоковое объект файла Filebody Bin = New FileBody (новый файл (localFile)); Stringbody username = new Stringbody ("Scott", contentType.create ("text/plain", consts.ut_8)); Stringbody password = new Stringbody ("123456", contentType.create ("text/plain", consts.ut_8)); Httpentity reqentity = multipartentitybuilder.create () // эквивалент <input type = "file" name = "file"/> .addpart ("file", bin) // эквивалент <input type = "text" name = "inserame" value =. .строить(); httppost.setentity (requentity); // Инициировать запрос и вернуть ответ ответа запроса = httpclient.execute (httppost); System.out.println («Значение ответа токена:» + response.getfirStheader («токен»)); // Получить объект ответа httpentity redistint = response.getentity (); if (redentity! = null) {// print dlongy system.out.println ("Длина содержимого ответа:" + vederity.getContentLength ()); // Система контента ответа печати. } // Уничтожение EntityUtils.consume (Возникание); } catch (Exception e) {e.printstackTrace (); } наконец {try {if (response! = null) {response.close (); }} catch (ioException e) {e.printstacktrace (); } try {if (httpclient! = null) {httpclient.close (); }} catch (ioException e) {e.printstacktrace (); }}}2.2 Серверная обработка
Независимо от того, какой метод загрузки клиент, обработка на сервере такая же. После получения параметров через httpservletrequest полученный элемент классифицируется на обычные формы и формы файлов.
ServletFileUpload может установить формат размера и кодирования загруженного файла.
Короче говоря, обработка на стороне сервера рассматривает полученные параметры как формы HTML.
public void processupload (httpservlectrequest, httpservletresponse response) {file uploadfile = new File (uploadpath); if (! uploadfile.exists ()) {uploadfile.mkdirs (); } System.out.println ("Давай, детка ......"); request.setcharacterencoding ("UTF-8"); response.setcharacterencoding ("UTF-8"); // обнаружение, существует ли файл загрузки Boolean Ismultipart = ServletFileUpload.ismultipartContent (запрос); if (ismultipart) {diskfileitemfactory factory = new DiskFileItemFactory (); // Укажите размер кэшированных данных в памяти, единица является байтом, здесь установлен на 1 МБ. // Установить данные хранится в каталоге жестких дисков, когда размер файла превышает значение getSizethreshold () factory.setRepository (new File ("d: // temp")); // Создать новый файл загрузки обработчика ServletFileUpload upload = new ServletFileUpload (Factory); // Укажите максимальный размер одного загруженного файла, блок: Bytes, установите на 50 МБ upload.setFileSizeMax (50 * 1024 * 1024); // Укажите общий размер нескольких файлов, загруженных одновременно, блок: байты, установите на 50 МБ upload.setsizemax (50 * 1024 * 1024); upload.setheaderencoding ("UTF-8"); Список <FieleItem> items = null; try {// parse запрос запроса = upload.parserequest (request); } catch (fileuploadexception e) {e.printstacktrace (); } if (items! = null) {// parse form itement iterator <fieleItem> iter = item.iterator (); while (iter.hasnext ()) {fileitem item = iter.next (); // Если это атрибут обычной формы if (item.isformfield ()) {// атрибут имени, эквивалентный для ввода, - это <input type = "text" name = "content"> string name = item.getfieldname (); // атрибут значения значения входной строки = item.getString (); System.out.println ("свойство:" + name + "Значение атрибута:" + value); } // Если он загружает файл else {// имени атрибута string stringname = item.getfieldname (); // загружать путь файла string fileName = item.getName (); filename = filename.substring (fileName.lastIndexof ("/") + 1); // Получить имя файла загруженного файла try {item.write (новый файл (uploadpath, filename)); } catch (Exception e) {e.printstackTrace (); }}}}}} response.addheader ("token", "hello"); }После обработки сервер может установить простую информацию, возвращаемую клиенту в заголовке. Если возвратный клиент является потоком, размер потока должен быть установлен заранее!
response.setContentLength ((int) file.length ());
3 загрузки файлов
Загрузка файла может быть реализована с использованием getMethod HttpClient, и метода HTTPGet и исходного метода HttpurlConnection.
3.1 Клиентская обработка
3.1.1 Метод GetMethod
Httpclient здесь - org.apache.commons.httpclient.httpclient.
public void скачать (string remotefilename, string localfilename) {httpclient client = new httpclient (); GetMethod get = null; FileOutputStream output = null; try {get = new getMethod (url_str); get.setRequestheader («Имя пользователя», имя пользователя); get.setrequestheader ("passwd", passwd); get.setRequestheader ("filename", remotefilename); int i = client.executemethod (get); if (success == i) {System.out.println ("Значение ответа токена:" + get.getResponseHeader ("token")); File StoreFile = новый файл (LocalFilename); output = new FileOutputStream (StoreFile); // Получить байт -массив сетевых ресурсов и записать в файл output.write (get.getResponsebody ()); } else {System.out.println ("Загрузить файл происходит исключение, код ошибки:" + i); }} catch (Exception e) {e.printstackTrace (); } наконец {try {if (output! = null) {output.close (); }} catch (ioException e) {e.printstacktrace (); } get.ReleAseConnection (); client.gethtpconnectionmanager (). CloseIdleConnections (0); }}3.1.2 Метод httpget
Httpclient здесь находится под org.apache.http.client.methods.
public void загрузка (String remoteFilename, String localfilename) {defaulthttpclient httpclient = new Defaulthttpclient (); OutputStream Out = null; InputStream in = null; try {httpget httpget = new httpget (url_str); httpget.addheader («Имя пользователя», имя пользователя); httpget.addheader ("passwd", passwd); httpget.addheader ("filename", remotefilename); Httpresponse httpresponse = httpclient.execute (httpget); Httpentity entity = httpresponse.getentity (); in = entity.getContent (); длинная длина = entity.getContentLength (); if (длина <= 0) {System.out.println («Файл загрузки не существует!»); возвращаться; } System.out.println («Значение ответа токена:» + httpresponse.getfirStheader ("token")); File file = new File (localFilename); if (! file.exists ()) {file.createnewfile (); } out = new FileOutputStream (file); Byte [] buffer = новый байт [4096]; int Readlength = 0; while (((readlength = in.read (buffer))> 0) {byte [] bytes = new byte [readlength]; System.ArrayCopy (буфер, 0, байты, 0, чтения); out.write (байты); } out.flush (); } catch (ioException e) {e.printstackTrace (); } catch (Exception e) {e.printstackTrace (); } наконец {try {if (in! = null) {in.close (); }} catch (ioException e) {e.printstacktrace (); } попробуйте {if (out! = null) {out.close (); }} catch (ioException e) {e.printstacktrace (); }}}3.1.3 Метод HttpurlConnection
public void Download3 (String remoteFilename, String localFilename) {fileOutputStream OUT = null; InputStream in = null; try {url url = new url (url_str); UrlConnection urlConnection = url.openconcenection (); Httpurlconnection httpurlconnection = (httpurlconnection) urlconnection; // true - установит параметры httpurlconnection.setDoOutput (true); // true-Will разрешить читать из httpurlconnection.setDoinput (true); // не будет использовать кэши httpurlconnection.setusecaches (false); // Установление сериализованного httpurlConnection.setRequestProperty («Content-Type», «Application/x-Java-serialized-object»); // по умолчанию get httpurlconnection.setrequestmethod ("post"); httpurlconnection.setrequestproperty («Connection», «Keep-Alive»); httpurlconnection.setrequestproperty ("charsert", "UTF-8"); // 1 мин httpurlconnection.setConnecttimeout (60000); // 1 мин httpurlConnection.setReadTimeOut (60000); httpurlconnection.addrequestproperty («Имя пользователя», имя пользователя); httpurlconnection.addrequestproperty ("passwd", passwd); httpurlconnection.addrequestproperty ("filename", remotefilename); // подключаться к серверу (TCP) httpurlConnection.connect (); in = httpurlConnection.getInputStream (); // Отправить запрос в файл // файл сервера = новый файл (localFilename); if (! file.exists ()) {file.createnewfile (); } out = new FileOutputStream (file); Byte [] buffer = новый байт [4096]; int Readlength = 0; while (((readlength = in.read (buffer))> 0) {byte [] bytes = new byte [readlength]; System.ArrayCopy (буфер, 0, байты, 0, чтения); out.write (байты); } out.flush (); } catch (Exception e) {e.printstackTrace (); } наконец {try {if (in! = null) {in.close (); }} catch (ioException e) {e.printstacktrace (); } попробуйте {if (out! = null) {out.close (); }} catch (ioException e) {e.printstacktrace (); }}}3.2 Серверная обработка
Хотя клиент обрабатывается по -разному, сервер одинаковый.
public void processWodload (httpservletrequest, httpservletresponse response) {int buffer_size = 4096; InputStream in = null; OutputStream Out = null; System.out.println («Давай, детка ......»); try {request.setcharacterencoding ("utf-8"); response.setcharacterencoding ("UTF-8"); response.setContentType («Приложение/октет-поток»); String username = request.getheader ("username"); String passwd = request.getheader ("passwd"); String fileName = request.getheader ("filename"); System.out.println ("Имя пользователя:" + имя пользователя); System.out.println ("passwd:" + passwd); System.out.println ("filename:" + filename); // Дальнейшая обработка может быть выполнена на основе пропущенного имени пользователя и PassWD, например, проверка того, является ли запрос законным и т. Д. File = новый файл (DownloadPath + "//" + fileName); response.setContentLength ((int) file.length ()); response.setheader («Принятия-диапазоны», «байты»); int Readlength = 0; in = new BufferedInputStream (new FileInputStream (file), buffer_size); out = new BufferedOutputStream (response.getOutputStream ()); byte [] buffer = new Byte [buffer_size]; while (((readlength = in.read (buffer))> 0) {byte [] bytes = new Byte [readlength]; System.ArrayCopy (буфер, 0, байты, 0, чтения); out.write (байты); } out.flush (); response.addheader ("token", "hello 1"); } catch (Exception e) {e.printstackTrace (); response.addheader ("token", "hello 2"); } наконец {if (in! = null) {try {in.close (); } catch (ioException e) {}} if (out! = null) {try {out.close (); } catch (ioException e) {}}}}4 Резюме
Самая основная функция HTTPClient - выполнить метод HTTP. Выполнение метода HTTP включает взаимодействие одного или нескольких HTTP -запросов/HTTP -ответов. Обычно этот процесс будет автоматически обрабатываться HTTPClient и прозрачен для пользователя. Пользователь должен только предоставить объект HTTP -запроса, а HTTPClient отправит HTTP -запрос на целевой сервер и получит ответ сервера. Если HTTP -запрос не выполняется успешно, HTTPPClient сделает исключение. Так что обратите внимание на окончательно обработку при написании кода.
Все HTTP -запросы имеют строку запроса, включая имя метода, URI запроса и номер версии HTTP. HTTPClient поддерживает все методы HTTP, определенные в HTTP/1.1: GET, HEAD, POST, PUT, DELETE, TRACE и OPTIONS. Вышеупомянутая загрузка использует пост, и загрузка получена.
В настоящее время используйте org.apache.commons.httpclient.httpclient больше. Это зависит от меня ~
Выше всего содержимое методов загрузки и загрузки использования httpclient для реализации файлов. Я надеюсь, что каждый сможет поддерживать wulin.com больше ~