Инфоурок Другое Другие методич. материалыРабота с WEB & Java (для студентов старших курсов университетов)

Работа с WEB & Java (для студентов старших курсов университетов)

Скачать материал

















Package java.net : java.net.ServerSocket

Чтобы сделать сокет, который будет обслуживать сервер в джава существует класс  java.net.ServerSocket :

 

public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException

 

После установки сокета, вызывается функция

 

public Socket accept() throws IOException 

 

Эта функция погружает программу в ожидание того момента, когда клиент будет присоединяться к сокету сервера. Как только соединение установлено, функция возвратит объект класса Socket для общения с клиентом.

Если во время запуска программы-сервера, вместо строки 

 

"server is started" 

 

выдало строку типа

 

init error: java.net.BindException: Address already  in use: JVM_Bind 

то это будет обозначать, что порт 3128 на вашем компьютере уже занят какой-либо программой или запрещён к применению



TCP/IP: Программа простого TCP/IP клиента

import java.io.*;  import java.net.*;  class SampleClient extends Thread 

{

 public static void main(String args[]) 

 {

 try { // открываем сокет и коннектимся к localhost:3128 

// получаем сокет сервера 

Socket s = new Socket("localhost", 3128); // берём поток вывода и выводим туда первый аргумент 

// заданный при вызове, адрес открытого сокета и его порт  args[0] = args[0]+"\n"+s.getInetAddress().getHostAddress() +":"+s.getLocalPort(); 

 

s.getOutputStream().write(args[0].getBytes());   // читаем ответ byte buf[] = new byte[64*1024];  int r = s.getInputStream().read(buf);

 String data = new String(buf, 0, r); // выводим ответ в консоль System.out.println(data); 

} catch(Exception e) 

{

        System.out.println("init error: "+e);

TCP/IP: Программа простого TCP/IP сервера

import java.io.*;  import java.net.*;  class SampleServer extends Thread 

{

   Socket s;     int num;     public static void main(String args[]) 

  {      try { 

         int i = 0; // счётчик подключений 

                                // привинтить сокет на локалхост, порт 3128


     ServerSocket server = new ServerSocket(3128,  0,       

InetAddress.getByName("localhost")); 

        System.out.println("server is started"); 

          // слушаем порт          while(true) { 

// ждём нового подключения, после чего запускаем обработку клиента  в //новый вычислительный поток и увеличиваем счётчик на единичку          new SampleServer(i, server.accept()); i++; } 

} catch(Exception e) 

{System.out.println("init error: "+e);

} // вывод исключений 











Интерфейс Servlet

 

package javax.servlet; import java.io.IOException;

public interface Servlet {

/*

Этот метод вызывается, чтобы проинформировать сервлет о том, что он включён как модуль для обслуживания запросов клиента. Параметр config разделяет интерфейс javax.servlet.ServletConfig, несущий информацию об окружении сервера, имени сервлета, начальных параметрах и прочих плюшках. Об интерфейсе javax.servlet.ServletConfig будет рассказано чуть далее.

*/

     public void init(ServletConfig config) throws ServletException;

/*

 Предполагается, что после вызова этой функции, сервлет аккуратно сохранит этот config у себя в переменной и будет выдавать его с помощью другого метода:

*/

     public ServletConfig getServletConfig();













Интерфейс ServletContext

/**

RequestDispatcher - это инструмент для того, чтобы переслать запрос другому ресурсу. То бишь, скажем, для того, чтобы перенаправить запрос сервлету "sample1" из тела сервлета, можно сделать

так:getServletConfig().getServletContext().getNamedDispatcher("sample1").f orward(request, response);

Собственно класс RequestDispatcher включает в себя лишь два метода: public void forward(ServletRequest request, ServletResponse response) throws ServletException,  java.io.IOException public void include(ServletRequest request,

ServletResponse response) throws ServletException, java.io.IOException  Причём первый - для перенаправления запроса, а второй - для включения результата работы вызываемого сервлета в результат работы текущего. К примеру, сервлет 1 печатает слово "test 1", потом вызывает include для сервлета два, после чего печатает слово "test 2". Сервлет 2 же просто печатает слово " and ". Результатом работы сервлета 1 будет строка "test 1 and test 2".

*/

            public RequestDispatcher getRequestDispatcher(String path);             public RequestDispatcher getNamedDispatcher(String name);

 

            

  

            public Servlet getServlet(String name) throws ServletException;             public Enumeration getServletNames(); /**

Записать что-то в лог сервера.

*/

            public void log(String msg);

            public void log(Exception exception, String msg);             public void log(String message, Throwable throwable); /**

Переводит путь типа "/index.html" в


http://host/contextPath/index.html

*/

public String getRealPath(String path); /**

Возвращает имя сервера.

*/

public String getServerInfo();

/**

Доступ к параметрам, с которыми был запущен сервер. Тут же могут лежать имя хоста, порт и прочие полезности.

*/

public String getInitParameter(String name); public Enumeration getInitParameterNames();

Интерфейс ServletContext

/**

Четыре метода для работы с аттрибутами. Роль аттрибутов выполняет любой объект любого класса. Цель данных функций - пересылать между несвязанными друг с другом сервлетами разные объекты.

*/

public Object getAttribute(String name); public Enumeration getAttributeNames(); public void setAttribute(String name, Object object); public void removeAttribute(String name);

/**

Этот метод позволяет обмениваться ServletContext между разными ресурсами одного и того же сервера.

*/

public ServletContext getContext(String uripath);

/**

Возвращает имя сервлета, которому принадлежит данный объект интерфейса ServletContext.

*/

public String getServletContextName();

}

 

Интерфейс ServletRequest

 

ic Object getAttribute(String name)  ic java.util.Enumeration

AttributeNames()  public String getCharacterEncod ic void setAttribute(String name, -   public void

ect o)                                          setCharacterEncoding(String en

ic void java.io.UnsupportedEncodingExc oveAttribute(java.lang.String name)  ic String getServerName()  public int getContentLengt

ic RequestDispatcher

public String getContentTy

RequestDispatcher(String path)                                                     

                                                                                                                   public int getServerPort(

public jString getParameter(String name)              public String

public java.util.Enumeration   getRemoteAddr()  getParameterNames()      public String

public String[] getParameterValues(String      getRemoteHost() 

name)                                                    public boolean isSecure

public java.util.Map getParameterMap()                                       

 

public ServletInputStream getInputStream() throws java.io.IOException  public java.io.BufferedReader getReader() throws java.io.IOException

 

Интерфейс ServletRequest

-        это инструмент для получения параметров HTTP запроса.

-        Этот интерфейс имеет некоторые методы, идентичные по названию и назначению с ServletContext:

-        public Object getAttribute(String name) 

-        public java.util.Enumeration getAttributeNames() 

-        public void setAttribute(String name, Object o) 

-        public void removeAttribute(java.lang.String name) 

-        public String getServerName() 

-        public RequestDispatcher getRequestDispatcher(String path)

/**

Работа с кодировкой символов в полях HTTP заголовка. Функции задают метод расшифровки CGI запросов из формы %NN в обычные символы. К примеру, какой стандарт - KOI8-R, windows-1251 или UTF-8 нужно применить для расшифровки кириллических символов.

*/

-         public String getCharacterEncoding() 

-         public void setCharacterEncoding(String env) throws java.io.UnsupportedEncodingException

/**

Читает поля "Content-Length", "Content-Type" из HTTP запроса.

*/

-           public int getContentLength() 

-           public String getContentType()




Интерфейс ServletRequest

/**

Порт сервера, IP адрес клиента, имя хоста клиента и является ли соединение скретным (по протоколу HTTPS)

*/

public int getServerPort()  public String getRemoteAddr()  public String getRemoteHost() 

public boolean isSecure()

/**

Предпочитаемый клиентом язык документа (результат обработки поля "Accept-Language")

*/

public java.util.Locale getLocale() 

public java.util.Enumeration getLocales()

 



Интерфейс ServletResponse

-           это инструмент для отправки данных клиенту.

/**

метод возвращает MIME тип кодировки (к примеру - UTF8), в которой будет выдаваться информация

*/

public java.lang.String getCharacterEncoding() 

/** язык используемый в документе (например - русский).

*/

public void setLocale(java.util.Locale loc)  public java.util.Locale getLocale() /**

Возвращает поток вывода данных для сервлета. Этот поток используется, к примеру, для вывода бинарных файлов.  

*/

public ServletOutputStream getOutputStream() throws java.io.IOException

/**

Текстовые данные можно выводить с помощью java.io.Writerhjjj

Этот метод автоматически конвертирует строки в тот charset, что указан в методе getCharacterEncoding() и getLocale().

*/

public java.io.PrintWriter getWriter() throws java.io.IOException

Интерфейс ServletResponse

/**

Этим методом устанавливается значение поля HTTP заголовка "Content-Length“ */ public void setContentLength(int len)

/**

Метод для отправки MIME типа содержимого документа. Поле HTTP заголовка "ContentType".*/

public void setContentType(String type)

/**

Дело в том, что поток вывода данных является буфферизованным. Это означает, что следующая порция данных будет выдана клиенту только после заполнения буфера. Указанные методы позволяют, соответственно, установить размер буффера отправки, получить его размер, инициализировать отправку содержимое буффера клиенту, не дожидаясь его заполнения, а так же очистить этот буффер от данных.

*/

public void setBufferSize(int size)  public int getBufferSize() 

public void flushBuffer() throws java.io.IOException  public void resetBuffer() /**

Этим методом можно получить флаг, начата ли уже отправка данных клиенту. Флаг будет положительным, если HTTP заголовок ответа был уже отправлен.*/

public boolean isCommitted()

public void reset()//Если HTTP заголовок ещё не отправлен, то этот метод "сбрасывает" HTTP заголовок к значениям "по умолчанию".





 

На базе этого класса был создан другой абстрактный класс - javax.servlet.http.HttpServlet :

 

public abstract class HttpServlet extends GenericServlet implements java.io.Serializable 

{

/**Создан этот класс был в соответствии с концепцией "ещё больше удобств для программиста" и имеет много полезных методов:*/

protected void doDelete(HttpServletRequest req, HttpServletResponse resp)

                 throws ServletException, java.io.IOException; protected void doGet(HttpServletRequest req, HttpServletResponse resp)

                 throws ServletException, java.io.IOException; protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException; protected void doOptions(HttpServletRequest req, HttpServletResponse resp)                   throws ServletException, java.io.IOException;

 

 

protected void doPost(HttpServletRequest req, HttpServletResponse resp)                   throws ServletException, java.io.IOException;

 

protected void doPut(HttpServletRequest req, HttpServletResponse resp)                   throws ServletException, java.io.IOException;

 

protected void doTrace(HttpServletRequest req, HttpServletResponse resp)                   throws ServletException, java.io.IOException;

 

protected void service(HttpServletRequest req, HttpServletResponse resp) 

                 throws ServletException, java.io.IOException;

 

protected void service(ServletRequest req, ServletResponse res)                  throws ServletException, java.io.IOException;

 










Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал

Краткое описание документа:

В наглядной и доступной, запоминающейся форме изложены основные вопросы работы сервер-клиент для студентов старших курсов университетов. Рассмотрен протокол HTTP, TCP/IP. Разобран пакет java.net.*. Приведен программный код простых сервера и клиента. Изображена схема иерархии классов в сервлетах, методы классов Servlet & HTTPServlet, интерфейсов ServletConfig,ServletContext, ServletRequest, ServletResponce, рассмотрены абстрактные классы javax.servlet.GenericServlet, javax.servlet.http.HTTPServlet. Надеюсь изложенное поможет разобраться в сетевом программировании.

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 000 950 материалов в базе

Скачать материал

Другие материалы

Урок: "Совместное создание презентации с помощью сервиса Google презентации"
  • Учебник: «Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
  • Тема: 1.1. Автоматизированные и автоматические системы управления
  • 06.10.2020
  • 301
  • 7
«Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Урок: Контрольная работа по теме: «Кодирование и обработка текстовой информации»
  • Учебник: «Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
  • Тема: § 26. Проблемы формирования информационного общества
  • 06.10.2020
  • 407
  • 4
«Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Открытый урок информатики по теме "Деловая графика в электронных таблицах". 9-й класс
  • Учебник: «Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
  • Тема: 1.1. Автоматизированные и автоматические системы управления
  • 06.10.2020
  • 227
  • 2
«Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Урок: «Построение графиков функций в электронных таблицах MS Excel для решения математических задач»
  • Учебник: «Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
  • Тема: § 17. Таблицы и массивы
  • 06.10.2020
  • 187
  • 2
«Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 08.01.2015 217
    • PDF 642.3 кбайт
    • Оцените материал:
  • Настоящий материал опубликован пользователем Dudnik Oxana Antonovna. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    Dudnik Oxana Antonovna
    Dudnik Oxana Antonovna
    • На сайте: 7 лет и 10 месяцев
    • Подписчики: 1
    • Всего просмотров: 24172
    • Всего материалов: 37

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой