







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;





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