Предпросмотр материала:








Чтобы сделать сокет, который будет обслуживать сервер в джава существует класс java.net.ServerSocket :
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
После установки сокета, вызывается функция
Эта функция
погружает программу в ожидание того момента, когда клиент будет присоединяться
к сокету сервера. Как только соединение установлено, функция возвратит объект
класса Socket для общения с клиентом.
Если во время запуска программы-сервера, вместо строки
"server is started"
выдало строку типа
то это будет обозначать, что порт 3128 на вашем компьютере уже занят какой-либо программой или запрещён к применению

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);
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
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);
} // вывод исключений
}





package javax.servlet; import java.io.IOException;
/*
Этот метод
вызывается, чтобы проинформировать сервлет о том, что он включён как модуль для
обслуживания запросов клиента. Параметр config разделяет интерфейс
javax.servlet.ServletConfig, несущий информацию об окружении сервера, имени
сервлета, начальных параметрах и прочих плюшках. Об интерфейсе
javax.servlet.ServletConfig будет рассказано чуть далее.
*/
public void init(ServletConfig config) throws ServletException;
/*
Предполагается, что после вызова этой функции, сервлет аккуратно сохранит этот config у себя в переменной и будет выдавать его с помощью другого метода:
*/
public ServletConfig getServletConfig();






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); /**
public String getRealPath(String path); /**
Возвращает имя сервера.
*/
public String getServerInfo();
Доступ к параметрам, с которыми был запущен сервер. Тут же могут лежать имя хоста, порт и прочие полезности.
public String getInitParameter(String name); public Enumeration getInitParameterNames();
Четыре метода
для работы с аттрибутами. Роль аттрибутов выполняет любой объект любого класса.
Цель данных функций - пересылать между несвязанными друг с другом сервлетами
разные объекты.
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();
}
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
- это инструмент для получения параметров 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
/**
Этим методом устанавливается значение поля 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;


![]()
![]()
![]()
В наглядной и доступной, запоминающейся форме изложены основные вопросы работы сервер-клиент для студентов старших курсов университетов. Рассмотрен протокол HTTP, TCP/IP. Разобран пакет java.net.*. Приведен программный код простых сервера и клиента. Изображена схема иерархии классов в сервлетах, методы классов Servlet & HTTPServlet, интерфейсов ServletConfig,ServletContext, ServletRequest, ServletResponce, рассмотрены абстрактные классы javax.servlet.GenericServlet, javax.servlet.http.HTTPServlet. Надеюсь изложенное поможет разобраться в сетевом программировании.
В наглядной и доступной, запоминающейся форме изложены основные вопросы работы сервер-клиент для студентов старших курсов университетов. Рассмотрен протокол HTTP, TCP/IP. Разобран пакет java.net.*. Приведен программный код простых сервера и клиента. Изображена схема иерархии классов в сервлетах, методы классов Servlet & HTTPServlet, интерфейсов ServletConfig,ServletContext, ServletRequest, ServletResponce, рассмотрены абстрактные классы javax.servlet.GenericServlet, javax.servlet.http.HTTPServlet. Надеюсь изложенное поможет разобраться в сетевом программировании.
Профессия: Менеджер по управлению сервисами ИТ
В каталоге 6 990 курсов по разным направлениям
Учебник: «Информатика», Босова Л.Л., Босова А.Ю.
Тема: § 2. Компьютерные объекты
Учебник: «Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Тема: 1.1. Автоматизированные и автоматические системы управления
Учебник: «Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Тема: § 26. Проблемы формирования информационного общества
Учебник: «Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Тема: 1.1. Автоматизированные и автоматические системы управления
Учебник: «Информатика. Базовый уровень», Босова Л.Л., Босова А.Ю.
Тема: § 18. Информационное право и информационная безопасность
Учебник: «Информатика», Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В.
Тема: § 17. Таблицы и массивы
Учебник: «Информатика. Углубленный уровень (в2 частях)», Поляков К.Ю., Еремин Е.А.
Тема: § 32. Динамический HTML