Нужны ли сервлеты для программирования на стороне сервера?

Мне нужно запрограммировать небольшой сервер для обработки запросов от приложения Android. (Пользователь отправляет номер на сервер, сервер выполняет некоторую математику по числам, полученным от каждого пользователя - среднее значение, скажем - и возвращает его).

Я только что прочитал это простое введение из Oracle (http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html).

В нем объясняется, как оставить сервер прослушиванием определенной двери. Нормальная java, не требуется специальное приложение (например, Tomcat).

Я знаю, что люди обычно используют "сервлеты" (с Tomcat) для достижения такого рода вещей. Почему это? Каковы преимущества? Не могу ли я просто запрограммировать пример сервера, подобный описанному в этом простом учебнике, и оставить его всегда на компьютере?

Я просто хочу лучше понять общий сценарий. =)

Ответ 1

Использование сокета очень просто. Сначала.

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

Первое препятствие, которое вы поразите, описано в комментариях, является многопоточным. Но простой образец производителя/потребителя решит это для вас в кратчайшие сроки.

Следующая проблема, которую вы нажмете, - протокол.

  • Кто первый говорит?

  • Как вы отвечаете?

  • Как вы справляетесь с недопустимым запросом?

  • Что произойдет, если поток рухнет во время запроса?

  • Вы открываете новый сокет для каждого запроса или клиент держится в сокете и записывает несколько запросов?

  • Возможно, вам нужен какой-то неблокирующий IO?

Здесь HTTP-протокол, это протокол для обмена данными по TCP/IP (фактически по всему, вы можете использовать биты бумаги и велосипед). Он определяет ответы на все вышеперечисленные вопросы (и многое другое).

Итак, вы запускаете веб-сервер (tomcat, glassfish) и обрабатываете сырые сокеты и отправляете правильную информацию.

Сервлет - это абстракция, когда Tomcat имеет соединение и имеет согласованное сжатие, шифрование и т.д., он передает запрос на сервлет.

Сервлет не должен беспокоиться о сыром сокете, он читает запрос и пишет ответ.

Стоит отметить, что HTTP - это не единственный протокол, он просто используется для веб-браузера. Итак, тот, который используется веб-серверами.

Ответ 2

Вам не нужны сервлеты.

Сервлеты полезны, потому что они управляют обработкой сокетов для вас, но недостатком вам нужен контейнер (например, Tomcat) для запуска ваших сервлетов. Вы можете посмотреть Netty, который действительно создан для выполнения той работы, о которой вы говорите.

Ответ 3

Сервлеты - это стандартный способ обработки HTTP-протокола в Java.

Если вы хотите использовать HTTP для связи клиент-сервер и хотите использовать Java на стороне сервера, , а затем, вы должны использовать сервлеты.

Сервлеты - это простое и эффективное решение для общения в Интернете с Java. Для ваших нужд Netty, как было предложено rancidfishbreath, является допустимой альтернативой, но я рекомендую сервлеты с Tomcat, потому что это более простое решение. При использовании Tomcat это не проблема: она легкая и свободная.

Отмените идею использования сырых сокетов по причинам, уже объясненным bmorris591.

Ответ 4

Возможно, вы захотите посмотреть на что-то другое, кроме Java, как на серверное решение. Возможно, Node.js, PHP, или возможно даже Ruby on Rails могут быть лучшими вариантами без звонка и свиста. Возможно, я могу перечислить еще 100 опций (Python, Django и т.д. И т.д.), Что было бы проще, чем пытаться изучить Java и сервлеты и все, что с ним связано. Вам не обязательно, чтобы приложение Java говорило с Java-приложением, и есть множество вариантов получения простых HTTP-серверов, на которых выполняются пользовательские решения, которые не требуют огромной кривой обучения.