next_inactive up previous


CASL: Web Service: Руководство Программиста
DocumentId:GradSof-CASL-W-r-PG-07.06.2001-1.0.0

Введение

CASL предоставляет мощную среду для разработки Web приложений на языке C++ , путем предоставления CASL-сервиса для Web: - модуля, который при подключении к серверу приложений обеспечивает загрузку и вызов пользовательских компонент по запросам поступающим от Web сервера. Эти компоненты используют высокоуровневое API обработки запросов, равно как и обычное сервисное API CASL.

Вам следует прочитать этот документ если вы планируете писать собственные модули обработки запросов (или собственные Web приложения) на C++ .

Если Вы только используете модуль поддержки Java сервлетов и не используете C++ API CASL прямо, то можете пропустить этот документ и перейти непосредственно к описанию CASL Java Web Service.

Модели обработки запросов: как выглядит Hello World

CASL предполагает на выбор несколько моделей обработки поступающих запросов. Это может быть:

Просто CASL Servlet

Эта модель выполнения крайне похожа на модель выполнения CORBA сервлетов в ModCbroker - мы определяем сервлет как некоторую сущность, которая порождает обработчики. И то, и второе - определяемые нами классы.

Посмотрим, как выглядит Hello World

Как выглядит HelloWorld

#include <GradSoft/CASL.h>
#include <GradSoft/CASL/WebService.h>


namespace CASLDemo {

class HelloWorldServlet: public CASL::Servlet
{
private:

  CASL::RequestHandler* createHandler(const std::string& name);

};


class HelloWorldHandler: public CASL::RequestHandler
{
  public:

    void run(void);
    
}; 


CASL::RequestHandler* HelloWorldServlet::createHandler(const std::string& name)
{
 if (name!="hello") throw CASL::Servlet::HandlerNotFound(name);
 return new HelloWorldHandler();
}

void HelloWorldHandler::run(void)
{
 getHTTPReplyContext().setContentType("text/plain"); 
 getHTTPReplyContext().content() << "Hello, world" << std::endl; 
}

class HelloWorldServletModule: public CASL::ServletModule
{
private:
 HelloWorldServlet servlet_;
public:
  CASL::Servlet* getServlet() { return &servlet_; } 
  const char* name() const   { return "HelloWorldServlet"; }
  const char* author() const { return "Grad-Soft Ltd, Kiev, Ukraine"; }
  int versionMajor() const { return 1; }
  int versionMinor() const { return 0; }
  int versionSubMinor() const { return 0; }
};

}

CASLDemo::HelloWorldServletModule Hello;
EXPORT_OBJECT(Hello);

Что мы видим:

Собственно, этой информации достаточно для того, что-бы начать читать API, консультируясь с UML схемой.

JLServlet

Первые две буквы JL расшифровываются как ``Java-Like''.

Как выглядит HelloWorld

class HelloWorldServlet1: public CASL::JLServlet
{
public:

  void doGet(CASL::HTTPRequestContext& requestContext,
             CASL::HTTPReplyContext&  replyContext)
  {
   replyContext.setContentType("text/plain"); 
   replyContext.out() << "Hello, world\n"; 
  }

};

class HelloWorldServlet1Module: public CASL::ServletModule
{
private:
 HelloWorldServlet1 servlet_;
public:
  CASL::Servlet* getServlet() { return &servlet_; } 
  const char* name() const   { return "HelloWorldServlet1"; }
  const char* author() const { return "Grad-Soft Ltd, Kiev, Ukraine"; }
  int versionMajor() const { return 1; }
  int versionMinor() const { return 0; }
  int versionSubMinor() const { return 0; }
};

CASLDemo::HelloWorldServlet1Module Hello1;
EXPORT_OBJECT(Hello1);

Что мы видим: модель выполнения C++ сервлетов, очень похожая на стандартное Java API.
Разница все-таки есть:

Выбор между JLServlet и просто Servlet диктуется, скорее, соображениями удобства и личного вкуса. Какой-то смысл есть в критерии сложности обработки запроса: если там у нас не очень много работы, то использование JLServlet дает нам меньше кода. С другой стороны, когла обработка запросов сложная, то лучше использовать Servlet модель - можно хранить данные в обработчике запроса.

Перечень изменений

  1. 03.09.2002 - первая внешняя редакция.
  2. 29.08.2002 - первая внутренняя редакция.
  3. 07.06.2001 - создан.

Bibliography



GradSoft