C++ Web Framework (CWF) adalah kerangka web MVC, Open Source, di bawah Lisensi MIT, menggunakan C++ dengan Qt untuk digunakan dalam pengembangan aplikasi web. CWF dirancang untuk menggunakan sedikit sumber daya komputasi, seperti memori dan pemrosesan, serta memiliki waktu respons yang rendah untuk permintaan. Dengan arsitektur MVC (Model-View-Controller), di mana Anda dapat membuat kelas untuk menangani lapisan bisnis (Model), gunakan CSTL (C++ Server Pages Standard Tag Library) di dalam Halaman Web untuk menangani presentasi data (View) dan gunakan pengontrol sebagai penghubung antara dua lapisan (Pengontrol). CWF mendapat inspirasi dalam Java Servlets, JSTL dan Spring Framework.
Karena dibuat di Qt, C++ Web Framework dapat berjalan di platform yang sama yang didukung oleh Qt:
CWF hanya memiliki satu file konfigurasi, yang disebut CPPWeb.ini dan kebijakan hanya menggunakan C++ dan Qt dalam pengembangan komponennya untuk menghindari instalasi banyak perpustakaan dan konflik, mempertahankan karakteristik multiplatform, memfasilitasi instalasi dan menjaga kurva pembelajaran rendah untuk membuat pengembangan web sesederhana mungkin, bahkan untuk pemula.
# 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
instalasi opsional jemalloc (disarankan)
Langkah-langkah untuk menguji contoh C++ Web Framework
Langkah-langkah untuk menguji contoh HelloWorldDocker C++ Web Framework dengan container Docker