CPPWebFramework
1.0.0
CWF(C++ 웹 프레임워크)는 MIT 라이센스에 따라 C++와 Qt를 사용하여 웹 애플리케이션 개발에 사용되는 오픈 소스 MVC 웹 프레임워크입니다. CWF는 메모리, 처리 등의 계산 리소스를 거의 사용하지 않고 요청에 대한 응답 시간도 짧도록 설계되었습니다. 비즈니스 계층(모델)을 관리하기 위한 클래스를 생성할 수 있는 MVC(Model-View-Controller) 아키텍처를 사용하면 웹 페이지 내에서 CSTL(C++ Server Pages Standard Tag Library)을 사용하여 데이터 표현(보기)을 관리할 수 있습니다. 컨트롤러를 두 레이어(컨트롤러) 사이에 사용합니다. CWF는 Java Servlet, JSTL 및 Spring Framework에서 영감을 얻었습니다.
C++ 웹 프레임워크는 Qt에서 생성되었기 때문에 Qt에서 지원하는 것과 동일한 플랫폼에서 실행될 수 있습니다.
CWF에는 CPPWeb.ini라는 단 하나의 구성 파일만 있으며 수많은 라이브러리 설치 및 충돌을 방지하고 다중 플랫폼 특성을 유지하며 설치를 용이하게 하고 학습 곡선을 유지하기 위해 구성 요소 개발에 C++ 및 Qt만 사용하는 정책이 있습니다. 초보자라도 웹 개발을 최대한 간단하게 만들기 위해 낮은 수준을 유지합니다.
# include " cppwebapplication.h "
class HelloWorldController : public CWF ::Controller
{
public:
void doGet (CWF::Request &request, CWF::Response &response) const override
{
response. write ( " <html><body>Hello World!</body></html> " );
}
};
// Call
// http://localhost:8080/hello
int main ( int argc, char *argv[])
{
CWF::CppWebApplication server (argc, argv, " /PATH_TO_EXAMPLE/server/ " );
server. addController <HelloWorldController>( " /hello " );
return server. start ();
}
// hellomodel.h (Model)
# include < QObject >
class HelloModel : public QObject
{
Q_OBJECT
public slots:
QString greeting () const
{
return " Hello User! " ;
}
};
// helloview.view (View)
<html>
<head>
<title>Hello</title>
</head>
<body>
<out value= " #{model.greeting} " />
</body>
</html>
// hellocontroller.h (Controller)
# include < cwf/controller.h >
# include < model/hellomodel.h >
class HelloController : public CWF ::Controller
{
public:
void doGet (CWF::Request &request, CWF::Response &response) const override
{
HelloModel model;
request. addAttribute ( " model " , &model);
request. getRequestDispatcher ( " /pages/helloview.view " ). forward (request, response);
}
};
// main.cpp
# include < cwf/cppwebapplication.h >
# include < controller/hellocontroller.h >
// Call
// http://localhost:8080/hello
int main ( int argc, char *argv[])
{
CWF::CppWebApplication server (argc, argv, " /PATH_TO_EXAMPLE/server/ " );
server. addController <HelloController>( " /hello " );
return server. start ();
}
# include < cwf/sqlquery.h >
# include < cwf/cppwebapplication.h >
# include < cwf/sqldatabasestorage.h >
/*
* SQL Script
* create table countries (co_id serial primary key, co_name varchar unique);
* insert into countries (co_name) values ('BRAZIL'), ('UNITED STATES OF AMERICA'), ('CANADA');
*/
CWF::SqlDatabaseStorage storage ( " QPSQL " , " localhost " , " postgres " , " postgres " , " 1234 " , 5432 );
class CountriesController : public CWF ::Controller
{
public:
void doGet (CWF::Request &request, CWF::Response &response) const override
{
CWF::SqlQuery qry (storage);
qry. exec ( " select * from countries " );
response. write (qry. toJson ());
}
};
// Call
// http://localhost:8080/countries
int main ( int argc, char *argv[])
{
CWF::CppWebApplication server (argc, argv, " /PATH_TO_EXAMPLE/server/ " );
server. addController <CountriesController>( " /countries " );
return server. start ();
}
# include < usermodel.h >
# include < cwf/cppwebapplication.h >
# include < cwf/sqldatabasestorage.h >
/*
* ORM (Experimental) - Tested only on PostgreSQL
*/
CWF::SqlDatabaseStorage conexao ( " QPSQL " , " localhost " , " postgres " , " postgres " , " 1234 " , 5432 );
class ORMController : public CWF ::Controller
{
public:
void doGet (CWF::Request &request, CWF::Response &response) const override
{
UserModel user{conexao};
user. setName ( " Herik Lima " );
user. setPhone ( " +55 11 9 99999-0000 " );
user. setCountry ( " Brazil " );
user. setState ( " São Paulo " );
response. write ( QByteArray ( " <html><body> " ) + (user. save () ? " Saved " : " Error " ) + " </body></html> " );
}
};
// Call
// http://localhost:8080/orm
int main ( int argc, char *argv[])
{
CWF::CppWebApplication server (argc, argv, " /home/herik/CPPWebFramework/examples/ORM/server " );
UserModel{conexao}. updateDB (); // Create or update the table in database
server. addController <ORMController>( " /orm " );
return server. start ();
}
// usermodel.h
# ifndef USERMODEL_H
# define USERMODEL_H
# include < cwf/model.h >
class UserModel : public CWF ::Model
{
Q_OBJECT
Q_PROPERTY (QString name READ getName WRITE setName)
Q_PROPERTY (QString phone READ getPhone WRITE setPhone)
Q_PROPERTY (QString country READ getCountry WRITE setCountry)
Q_PROPERTY (QString state READ getState WRITE setState)
QString name;
QString phone;
QString country;
QString state;
public:
explicit UserModel (CWF::SqlDatabaseStorage &connection) : CWF::Model(connection, " usuario " ) {}
public slots:
QString getName () const { return name; }
void setName ( const QString &value) { name = value; }
QString getPhone () const { return phone; }
void setPhone ( const QString &value) { phone = value; }
QString getCountry () const { return country; }
void setCountry ( const QString &value) { country = value; }
QString getState () const { return state; }
void setState ( const QString &value) { state = value; }
};
# endif // USERMODEL_H
jemalloc 선택적 설치(권장)
C++ 웹 프레임워크의 예제를 테스트하는 단계
Docker 컨테이너를 사용하여 C++ 웹 프레임워크의 HelloWorldDocker 예제를 테스트하는 단계