#CodeCat
##Краткое описание
codecat — это промежуточное программное обеспечение HTTP-сервера, которое имитирует функциональность Tomcat. В настоящее время реализованы следующие возможности: горячее развертывание
, горячее удаление
, перенаправление маршрутов
.
##Быстрый старт
cd /home/xxx/codecat/bin Переход в директорию bin
проекта
sudo chmod +x startup.sh Измените права доступа к скрипту запуска, чтобы он мог выполняться
redis-server Запустите сервер Redis, а также можно запустить клиентскую часть для реального отслеживания состояния ключей и значений, используйте команду hgetall codecat, чтобы просмотреть все отображаемые пути портов.
./startup 8080 Запустите сервис CodeCat, обратите внимание, что этот шаг попытается временно отключить вашу системную защиту от вторжений (тестовый режим), последний параметр — это порт, который вы можете указать для вашего сервиса CodeCat.
Откройте браузер и перейдите по адресу localhost:8080 (или тот, который вы выбрали), чтобы получить доступ к корневому каталогу сервиса
cp codecat-api.jar /home/xxx/ваш_проект Копируйте файл codecat-api.jar
из папки bin
в ваш проект, при этом убедитесь, что имя вашего проекта указано правильно во время сборки, так как это будет являться именем корневого каталога вашего проекта.Создайте новый класс, расширяющий класс BasicHttpHandler
, и реализуйте метод service
. Возвращаемое значение этого метода будет выводиться на страницу, а сам класс следует аннотировать с помощью @Path("/xxx")
, где /xxx
— это маршрут запроса, который обрабатывает данный класс. Пример кода представлен ниже:```java
@Path("/timer")
public class TimerHandler extends BasicHttpHandler {
@Override public Object service(Object msg) { String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); return "
Здесь представлен пример класса, который возвращает текущее время системы.
- **Установите JAR-файл в папку codecat/apps; здесь есть небольшая проблема: первый раз установка может завершиться ошибкой, удалите его и повторите попытку**. Предположим, что ваш JAR-файл называется `index.jar`, тогда вы сможете получить доступ к текущему времени системы через адрес [localhost:8080/index/timer]()## Сравнение с Tomcat
Теплое удаление приложения в Tomcat невозможно, поэтому концепция теплого удаления была внедрена в **Codecat**. Внутри **Codecat** используется прокси, который по умолчанию проксирует сервер при запуске. Каждый раз, когда пользователь помещает новый JAR-файл в папку `codecat/apps`, **Codecat** читает соответствующие классы внутри JAR-файла, запускает новый порт и регистрирует его через прокси. Перед запуском новые классы загружаются в новый сервер.Имя JAR-файла используется как корневой каталог проекта, что позволяет каждому JAR-файлу иметь свой уникальный реальный порт сервера. Прямое восприятие пользователя заключается в том, что порт доступа не меняется. Когда пользователь удаляет JAR-файл, **Codecat** закрывает соответствующий ему порт на основе имени JAR-файла, тем самым делая невозможным доступ к этому JAR-файлу, чтобы достичь цели удаления.
## Оставшиеся дефекты BUG
- **1.** При первой загрузке JAR-файла содержимое JAR может не быть прочитано.
- **2.** При удалении JAR-файла, требуется использовать `rm -f xxx.jar`, графический метод удаления или клавиша Delete не работают.
- **3.** Модуль API пользователя BasicHttpHandler ещё не завершён, не были созданы обёртки для классов HttpRequest, HttpResponse, HttpSession.## Примечание:
### Функционал отслеживания изменений файлов в директориях использует стороннюю библиотеку [JNotify](http://my.oschina.net/fuckmylife0/blog/324967)
### Благодарность
Благодарю за предоставленные технические идеи [Ли Ао](https://github.com/andilyliao)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )