Как быстро создать свой java сервер?

Есть ли что нибудь простое для начинающего


Ответы (1 шт):

Автор решения: Alexander Yanchuk

Иногда необходимо сделать простой HTTP java сервер, который отвечает на GET и POST запросы используя MySql базу данных и не тратить время на разворачивание Tomcat или ему подобного громоздкого ПО.
На базе предлагаемых абстрактных классов получается очень эффективный(каждый запрос обрабатывается в отдельном потоке) сервер, на базе которого некоторое время назад был создан Биддер, который побил все рекорды скорости на электронных биржах по торговле контекстной рекламой. Хочу поделиться как это можно сделать:
Сначала нужно скачать jar библиотеку по этой ссылке и включить ее в свой проект. Затем создать класс с main методом и унаследовать его от YaaServer класса

import com.yaa.server.YaaServer;

public class MyServer extends YaaServer
{
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
    }
}

Абстрактный класс YaaServer потребует генерирование нескольких методов и конструктора. Позволим ему это сделать:

import java.io.IOException;
import java.sql.Connection;
import com.yaa.server.YaaServer;
import com.yaa.server.YaaServlet;

public class MyServer extends YaaServer
{
    public MyServer(int port) throws IOException
    {
        super(port);
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
    }

    @Override
    protected Connection getConnection()
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected Class<YaaServlet> getServletClass(int arg0)
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected String getServletContext(int arg0)
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected int howManyServlets()
    {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    protected boolean isLog()
    {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    protected String setServerName()
    {
        // TODO Auto-generated method stub
        return null;
    }
}

Осталось совсем немного. Вставляем в main new MyServer(8080).start(); и получаем:

    public static void main(String[] args)
    {
        try
        {
            new MyServer(8080).start();
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Наш сервер почти готов. Дадим ему имя в методе setServerName()

    protected String setServerName()
    {
        return "My First javaServer";
    }

и запустим. В консоли увидим сообщение:

My First javaServer Server started.
Listening for connections on port : 8080 ...

Совершенно верно ваш сервер слушает порт 8080 на вашем компьютере. Осталось совсем чуть чуть. Нужно заполнить этот сервер обработчиками HTTP запросов.
Создадим обработчик GET запроса, который обрабатывает личные данные пользователя имя и возраст. В адресной строке браузера такой запрос будет выглядеть так:

http://localhost:8080/myserver?name=Иван&age=19

Сейчас на этот запрос браузер выведет 404 Not Found. Посмотрим, что он выведет потом. Итак:
1. В методе howManyServlets() - количество обработчиков, ставим return 1;
2. в методе getServletContext меняем return

    protected String getServletContext(int i)
    {
        return new String[]
        { "/myserver" }[i];
    }

Это означает, что к нашему обработчику будет идти обращение по контексту /myserver, смотрите строку запроса из браузера;
3. Меняем getServletClass следующим образом:

    protected Class<YaaServlet> getServletClass(int i)
    {
        return new Class[]
        { Myservlet.class }[i];
    }

Этим мы указываем, что по контексту /myserver будет обработчик в классе с именем Myservlet.
Eclipse (или какая там у вас ide) Требует создать этот класс. Создаем и наследуем его от YaaServlet. Разрешаем генерацию абстрактных методов и конструктора и получаем:

import java.sql.Connection;
import java.util.Map;
import com.yaa.server.YaaServlet;
public class Myservlet extends YaaServlet
{
    public Myservlet(Connection conn, Map<String, String> get_request, String post_request)
    {
        super(conn, get_request, post_request);
        // TODO Auto-generated constructor stub
    }
    @Override
    protected String getResponcse()
    {
        // TODO Auto-generated method stub
        return null;
    }
}

conn - это коннектор к базе MySql, мы его пока не используем;
get_request - GET параметры в виде HashMap коллекции;
post_request - строка POST запроса.
Осталось написать ответ на GET запрос:

    protected String getResponcse()
    {
        if (get_request != null)
            return "Привет " + get_request.get("name") + "! \nТвой возраст " + 
            get_request.get("age") + " лет.";
        return null;
    }

Теперь перезапускаем сервер и повторяем наш запрос из браузера. Если мы все сделали правильно, то в браузере увидим:

Привет Иван! 
Твой возраст 19 лет.

Обработку POST запроса предлагаю вам сделать самостоятельно. В этом примере мы не подключали базу данных. Чтобы это сделать необходимо в методе getConnection() сервера поставить подключение драйвера. Примерно так return conn = DriverManager.getConnection("jdbc:mysql://...");
Кстати в обработчике не надо закрывать базу - не пишите conn.close().

→ Ссылка