HOME> 世界杯第二> 热门开源Web开发框架推荐

热门开源Web开发框架推荐

世界杯第二 2025-05-25 16:30:05
程序员圈有这么一句话:“不要重复造轮子” ,这句话也带来许多争议。 要不要重复造轮子?有的人认为这是一种“拿来主义”的傲慢体现,...

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

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

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

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

这其中学习新技术、新框架是十分重要一方面,另一方面就是不能只是简单地学习这些技术、框架是怎么用的,要知其然,还要知其所以然。如果想要开发一套稳定的,容易维护的系统,在使用“轮子”的时候,就需要对轮子有足够的了解。知道这个“轮子”适用于什么样的场景,有什么样的特点、优点,会有什么样缺点。这样才能做到扬长避短,更好地使用轮子。因此今天,我们以此为契机,给大家分享一些优秀的开源 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 等等以及自定义视图渲染)。

代码语言:javascript代码运行次数:0运行复制@Before(BlogInterceptor.class)

public class BlogController extends Controller {

@Inject

BlogService 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层。

代码语言:javascript代码运行次数:0运行复制public class BlogService {

private Blog dao = new Blog().dao();

public Page 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)

代码语言:javascript代码运行次数:0运行复制public class Blog extends Model {

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

代码语言:javascript代码运行次数:0运行复制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不需要此拦截器)

代码语言:javascript代码运行次数:0运行复制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对象。

代码语言:javascript代码运行次数:0运行复制/// The TestCtrl.h file

#pragma once

#include

using namespace drogon;

class TestCtrl:public drogon::HttpSimpleController

{

public:

virtual void asyncHandleHttpRequest(const HttpRequestPtr& req, std::function &&callback) override;

PATH_LIST_BEGIN

PATH_ADD("/test",Get);

PATH_LIST_END

};

/// The TestCtrl.cc file

#include "TestCtrl.h"

void TestCtrl::asyncHandleHttpRequest(const HttpRequestPtr& req,

std::function &&callback)

{

//write your application logic here

auto resp = HttpResponse::newHttpResponse();

resp->setBody("

Hello, world!

");

resp->setExpiredTime(0);

callback(resp);

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

代码语言:javascript代码运行次数:0运行复制/// The header file

#pragma once

#include

using namespace drogon;

class JsonCtrl : public drogon::HttpSimpleController

{

public:

virtual void asyncHandleHttpRequest(const HttpRequestPtr &req, std::function &&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 &&callback)

{

Json::Value ret;

ret["message"] = "Hello, World!";

auto resp = HttpResponse::newHttpJsonResponse(ret);

callback(resp);

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

代码语言:javascript代码运行次数:0运行复制/// The header file

#pragma once

#include

using namespace drogon;

namespace api

{

namespace v1

{

class User : public drogon::HttpController

{

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}/detailinfo

METHOD_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 &&callback, int userId) const;

void getDetailInfo(const HttpRequestPtr &req, std::function &&callback, int userId) const;

void newUser(const HttpRequestPtr &req, std::function &&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++

项目功能展示: