热门开源Web开发框架推荐

article/2025/10/24 9:31:36

程序员圈有这么一句话:“不要重复造轮子” ,这句话也带来许多争议。

要不要重复造轮子?

有的人认为这是一种“拿来主义”的傲慢体现,因为你不造自己的轮子,就会缺乏核心技术,由此将一直受限,创新力也大幅度下降,发展空间将会一直被“卡脖子”,从而陷入落后于率先造轮者的步伐;而也有一部分人认为这是一种卓越的工作方式,他们认为并非每个人都能原创出核心的技术,也并非每个程序员都能成为项目的架构师或技术大牛,不重复造轮,而是拿到一个框架,在上面进行二次开发然后拿来去用,学习过程中也提高了效率,这不是什么不屑一顾的事。

本周的主题并非是不鼓励自主创新,而是推崇自主创新,毕竟只有自主创新才能创造出属于自己的技术,才能提前避免一些风险,对抗现实世界的变化带来的动荡与不安,提高抗风险能力。“不要重复造轮子”并不是适用核心技术和空白领域,这方面还是鼓励与支持“造轮”一说。

只是时至今日,国内的软件行业已然不同于过往的空白期,为了在更快的时间内进步,我们需要快速学习造轮子的套路。换句话说, “站在巨人的肩膀上会让你事半功倍” 。如果你遇到问题,可以尝试这样一个角度:不要只想着自己从头搞定,先去看看有没有前人经验,看看是否有什么人在什么地方遇到过类似的问题,找到这个人,和对方建立联系获取相关信息,能够帮助你节约非常多的时间来做更重要的事情。

这其中学习新技术、新框架是十分重要一方面,另一方面就是不能只是简单地学习这些技术、框架是怎么用的,要知其然,还要知其所以然。如果想要开发一套稳定的,容易维护的系统,在使用“轮子”的时候,就需要对轮子有足够的了解。知道这个“轮子”适用于什么样的场景,有什么样的特点、优点,会有什么样缺点。这样才能做到扬长避短,更好地使用轮子。因此今天,我们以此为契机,给大家分享一些优秀的开源 Web 开发框架,在先行者的经验上,一同学习、进步。如果你对“不必重复造轮子”或者下列“ Web 开发框架”项目有更深入的见解,欢迎大家在评论中一同讨论 😁

 Java


JFinal

开源许可证: Apache-2.0

项目作者: JFinal

项目地址: https://gitee.com/jfinal/jfinal

推荐原因: JFinal 是一款基于 Java 语言的极速 WEB + ORM 框架,拥有 Java 语言优势的同时,拥有 Ruby、Python 等动态语言的开发效率。

主要编程语言: Java

项目示例:

1.控制器(支持 Enjoy、JSP、Velocity、JSON 等等以及自定义视图渲染)

@Before(BlogInterceptor.class)
public class BlogController extends Controller {@InjectBlogService service;public void index() {set("blogPage", service.paginate(getParaToInt(0, 1), 10));render("blog.html");}public void add() {}@Before(BlogValidator.class)public void save() {getModel(Blog.class).save();redirect("/blog");}public void edit() {set("blog", service.findById(getParaToInt()));}@Before(BlogValidator.class)public void update() {getModel(Blog.class).update();redirect("/blog");}public void delete() {service.deleteById(getParaToInt());redirect("/blog");}
}

2.Service所有业务与sql全部放在Service层。

public class BlogService {private Blog dao = new Blog().dao();public Page<Blog> paginate(int pageNumber, int pageSize) {return dao.paginate(pageNumber, pageSize, "select *", "from blog order by id asc");}public Blog findById(int id) {return dao.findById(id);}public void deleteById(int id) {dao.deleteById(id);}
}

3.Model(无xml、无annotaion、无attribute)

public class Blog extends Model<Blog> {}

4.Validator(API引导式校验,比xml校验方便N倍,有代码检查不易出错)

public class BlogValidator extends Validator {protected void validate(Controller controller) {validateRequiredString("blog.title", "titleMsg", "请输入Blog标题!");validateRequiredString("blog.content", "contentMsg", "请输入Blog内容!");}protected void handleError(Controller controller) {controller.keepModel(Blog.class);}
}

5.拦截器(在此demo中仅为示例,本demo不需要此拦截器)

public class BlogInterceptor implements Interceptor {public void intercept(Invocation inv) {System.out.println("Before invoking " + inv.getActionKey());inv.invoke();System.out.println("After invoking " + inv.getActionKey());}
}


ymate-platform-v2

开源许可证: Apache-2.0

项目作者: 有理想的鱼

项目地址: https://gitee.com/suninformation/ymate-platform-v2

推荐原因: ymate-platform-v2 是一个简单、易用的轻量级 Java 应用开发框架

主要编程语言: Java

项目模块功能:

HServer

开源许可证: Apache-2.0

项目作者: HServer

项目地址: https://gitee.com/HServer/HServer

推荐原因: HServer 是一个开发灵活,轻量级,低入侵,高并发的新型 Web 开发框架。

主要编程语言: Java

项目原理及流程:

C++


drogon

开源许可证: MIT

项目作者: an-tao

项目地址: https://gitee.com/an-tao/drogon

推荐原因: 基于 C++14/17 的跨平台、高性能 HTTP Web 应用框架

主要编程语言: C++

操作案例:

1.创建一个HttpSimpleController对象。

/// The TestCtrl.h file
#pragma once
#include <drogon/HttpSimpleController.h>
using namespace drogon;
class TestCtrl:public drogon::HttpSimpleController<TestCtrl>
{
public:virtual void asyncHandleHttpRequest(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback) override;PATH_LIST_BEGINPATH_ADD("/test",Get);PATH_LIST_END
};/// The TestCtrl.cc file
#include "TestCtrl.h"
void TestCtrl::asyncHandleHttpRequest(const HttpRequestPtr& req,std::function<void (const HttpResponsePtr &)> &&callback)
{//write your application logic hereauto resp = HttpResponse::newHttpResponse();resp->setBody("<p>Hello, world!</p>");resp->setExpiredTime(0);callback(resp);
}

2.代码都可以由 drogon_ctl命令创建后这样创建控制器:

/// The header file
#pragma once
#include <drogon/HttpSimpleController.h>
using namespace drogon;
class JsonCtrl : public drogon::HttpSimpleController<JsonCtrl>
{public:virtual void asyncHandleHttpRequest(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) override;PATH_LIST_BEGIN//list path definitions here;PATH_ADD("/json", Get);PATH_LIST_END
};/// The source file
#include "JsonCtrl.h"
void JsonCtrl::asyncHandleHttpRequest(const HttpRequestPtr &req,std::function<void(const HttpResponsePtr &)> &&callback)
{Json::Value ret;ret["message"] = "Hello, World!";auto resp = HttpResponse::newHttpJsonResponse(ret);callback(resp);
}

3.通过 HttpController 类创建一个 RESTful API:

/// The header file
#pragma once
#include <drogon/HttpController.h>
using namespace drogon;
namespace api
{
namespace v1
{
class User : public drogon::HttpController<User>
{public:METHOD_LIST_BEGIN//use METHOD_ADD to add your custom processing function here;METHOD_ADD(User::getInfo, "/{id}", Get);                  //path is /api/v1/User/{arg1}METHOD_ADD(User::getDetailInfo, "/{id}/detailinfo", Get);  //path is /api/v1/User/{arg1}/detailinfoMETHOD_ADD(User::newUser, "/{name}", Post);                 //path is /api/v1/User/{arg1}METHOD_LIST_END//your declaration of processing function maybe like this:void getInfo(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, int userId) const;void getDetailInfo(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, int userId) const;void newUser(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, std::string &&userName);public:User(){LOG_DEBUG << "User constructor!";}
};
} // namespace v1
} // namespace api


cppweb

项目作者: 寻根

项目地址: https://gitee.com/xungen/cppweb

推荐原因: cppweb 是基于 C++ 开发的 Web 服务器,支持 C/C++、Python、Java 等多语言混合开发 Web 应用。

主要编程语言: C++

项目功能展示:


http://chatgpt.dhexx.cn/article/MVDR7oYg.shtml

相关文章

Web框架介绍

&#x1f41a; 作者: 阿伟 &#x1f482; 个人主页: Flyme awei &#x1f40b; 希望大家多多支持&#x1f618;一起进步呀&#xff01; &#x1f4ac; 文章对你有帮助&#x1f449;关注✨点赞&#x1f44d;收藏&#x1f4c2; Web框架 文章目录 Web框架介绍1.web服务器ApacheNg…

常用的Web架构开发语言有哪几种?

如果你是做Web开发的&#xff0c;Web框架一定会很熟悉&#xff0c;框架是Web架构开发中必不可少的工具&#xff0c;不仅可以提高开发效率&#xff0c;还能让开发项目更成熟&#xff0c;并且可以提升代码的可再用性&#xff0c;Web框架开发离不开相应的开发语言&#xff0c;以下…

【最全整理】37 个 Python Web 开发框架总结

用了 2 周的时间整理了 Python 中所有的网站开发库&#xff08;下文简称&#xff1a;Web 框架&#xff09;&#xff0c;供大家学习参考。 Q&#xff1a;Web 框架到底是什么&#xff1f; A&#xff1a;Web 框架主要用于网站开发。开发者在基于 Web 框架实现自己的业务逻辑。Web…

10款Web开发最佳的Python框架

Python是跻身于当代IT世界最流行和代码最高效的编程语言之一。Python框架能帮助你快速启动Web应用。 1.CubicWeb CubicWeb的最重要的功能是其代码的可重用性&#xff0c;由一个个代码单元组成。它灵活又强大&#xff0c;并且还有一些特别的功能&#xff0c;包括RQL查询语言和支…

24点游戏的递归解法和Python实现

24点游戏的递归解法和Python实现 目录 24点游戏的递归解法和Python实现什么是24点游戏递归思路递归24点问题的递归思路Python代码实现四则运算下无解的组合总结什么是24点游戏 还记得小时候拿一副牌玩得24点游戏吗? 拿一副牌,抽去大小王后(J,Q,K记为11,12,13;用1代替A),剩…

Python实现24点游戏

问题描述 24点游戏是经典的纸牌益智游戏。 常见游戏规则&#xff1a; 从扑克中每次取出4张牌。使用加减乘除&#xff0c;第一个能得出24者为赢。&#xff08;其中&#xff0c;J代表11&#xff0c;Q代表12&#xff0c;K代表13&#xff0c;A代表1&#xff09;&#xff0c;按照要…

用python算24点及原理详解

1 描述 给出4个正整数&#xff0c;使用加、减、乘、除4种运算以及括号把4个数连接起来得到一个结果等于24的表达式。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬…

24点卡牌游戏C++实现

问题描述&#xff1a; 24点游戏是经典的纸牌益智游戏。 常见游戏规则&#xff1a; 从扑克中每次取出4张牌。使用加减乘除&#xff0c;第一个能得出24者为赢。&#xff08;其中&#xff0c;J代表11&#xff0c;Q代表12&#xff0c;K代表13&#xff0c;A代表1&#xff09;&#x…

Python 小程序:计算24点

今天玩24点的时候&#xff0c;突然希望想编写一个 计算24点的小程序&#xff0c;为python的初学者提供一些帮助。 24点是许多人都会玩的游戏。玩法在这里简单的介绍一下&#xff1a;选4个数字&#xff08;1-13中任意&#xff09;&#xff0c;然后用加减乘除算出24。计算时&…

24点答案生成器

故事背景&#xff1a;晚上拿起扑克牌&#xff0c;奈何没有牌友&#xff0c;百度了一下有什么单人扑克游戏&#xff0c;然后就发现了24点&#xff0c;随意挑出4张牌&#xff0c;只用加减乘除组合成24点&#xff0c;我抽出了7 7 8 Q(12) &#xff0c;然后思索了半天没有答案&…

蓝桥杯 试题 算法训练 24点 C++ 详解

问题描述&#xff1a; 24点游戏是一个非常有意思的游戏&#xff0c;很流行&#xff0c;玩法很简单&#xff1a;给你4张牌&#xff0c;每张牌上有数字&#xff08;其中A代表1&#xff0c;J代表11&#xff0c;Q代表12&#xff0c;K代表13&#xff09;&#xff0c;你可以利用数学中…

24点游戏(python)

24点游戏&#xff08;python&#xff09; 一、题目要求 1.问题描述&#xff1a; 24点游戏是经典的纸牌益智游戏。常见游戏规则&#xff1a; 从扑克中每次取出4张牌。使用加减乘除&#xff0c;第一个能得出24者为赢。&#xff08;其中&#xff0c;J代表11&#xff0c;Q代表12&a…

用java实现24点游戏

前言 用java实现24点游戏 Welocome to Xiang’s world~ 题目ღ( &#xff65;ᴗ&#xff65; ) 24点游戏是经典的纸牌益智游戏。 常见游戏规则&#xff1a; 从扑克中每次取出4张牌。使用加减乘除&#xff0c;第一个能得出24者为赢。&#xff08;其中&#xff0c;J代表11&am…

C++ 实现计算24点

原理 暴力枚举所有的情况&#xff0c;运算符号4个&#xff0c;加减乘除 - * / &#xff0c;整数数字4个&#xff08;易扩展为5个数或者更多&#xff09;。所需要枚举的次数&#xff1a; 数字顺序&#xff1a;4个数的全排列&#xff0c;4! 24。运算符号&#xff1a;4个数需要…

计算机上的24点游戏怎么玩,趣味算数二十四点游戏规则怎么玩技巧

概述&#xff1a;这是一个算数游戏&#xff0c;用四张牌计算得出24。 时间&#xff1a;20分钟 人数&#xff1a;集体参与 目的&#xff1a;锻炼学员的快速计算能力。 道具&#xff1a;扑克牌 步骤&#xff1a; 1.去点大小王&#xff0c;“K”计13点&#xff0c;“Q”计12点&…

【编程|二十四点】关于编程解决二十四点的两种思路

【编程心得系列*24点】 写在前面&#xff1a;编程心得系列不谈具体问题的代码&#xff0c;只谈解决思路。 这是一个关于二十四点的软件。属于典型的先有目的再有初衷的软件。 在此之前我倒是写过一个解数独的软件。但那个的核心代码部分毕竟是抄袭的。这次是觉得对自己更有信…

计算机二十四点游戏怎么玩,扑克牌二十四点怎么玩?扑克牌二十四点游戏规则介绍...

扑克牌二十四点是在国际上很流行的一种扑克游戏玩法&#xff0c;因为游戏计算性较强&#xff0c;较为考验的玩家的心算能力&#xff0c;所以很受扑克玩家的喜爱&#xff0c;那么扑克牌二十四点到底是怎么玩的呢&#xff1f;扑克牌二十四点的游戏规则又是什么呢&#xff1f;下面…

CCF计算机软件能力认证试题练习:201903-2 二十四点

二十四点 来源&#xff1a;CCF 标签&#xff1a; 参考资料&#xff1a; 相似题目&#xff1a; 背景 二十四点是一款著名的纸牌游戏&#xff0c;其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24。 题目 定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运…