{"id":21803122,"url":"https://github.com/litongjava/next-jfinal","last_synced_at":"2025-10-10T20:36:45.219Z","repository":{"id":213271386,"uuid":"733449110","full_name":"litongjava/next-jfinal","owner":"litongjava","description":"next-jfinal","archived":false,"fork":false,"pushed_at":"2023-12-21T02:37:54.000Z","size":641,"stargazers_count":8,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T23:39:21.627Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/litongjava.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-19T10:58:33.000Z","updated_at":"2025-08-13T11:25:13.000Z","dependencies_parsed_at":"2024-11-27T14:33:26.610Z","dependency_job_id":null,"html_url":"https://github.com/litongjava/next-jfinal","commit_stats":null,"previous_names":["litongjava/next-jfinal"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/litongjava/next-jfinal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fnext-jfinal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fnext-jfinal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fnext-jfinal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fnext-jfinal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/litongjava","download_url":"https://codeload.github.com/litongjava/next-jfinal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litongjava%2Fnext-jfinal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279005273,"owners_count":26083863,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-27T11:38:37.125Z","updated_at":"2025-10-10T20:36:45.202Z","avatar_url":"https://github.com/litongjava.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# next jfinal\nThe next JFinal is JFinal without Servlet.\nnext-jfinal是下一代jfinal开发框架,和jfinal不同的是next-jfinal移除了servlet.使用tio框架进行底层的io处理,具有更高的性能提升和更好的开发体验\n\n## 目前已经完成的工作如下\n- 1.将jfinal移除servlet,命名为next-jfinal\n- 2.使用tio重写servet,[源码](https://github.com/litongjava/next-jfinal/tree/main/src/main/java/com/jfinal/servlet),[源码2](https://github.com/litongjava/next-jfinal/tree/main/src/main/java/com/litongjava/tio/boot/servlet)\n- 3.使用next-jfinal对接tio\n- 4.自定义tio的handler将请求转发到jfinal的Controller\n- 5.编写jfinal测试Hello World测试\n\n已经得完成next-jfinal-web-hello[源码](https://github.com/litongjava/java-ee-next-jfinal-study/tree/main/next-jfinal-web-hello-study)\n\n## 目前尚未完整的工作\n让自定义的servlet完全适配旧的jfinal,即完全重写servlet或者部分重写servlet以支持旧的jfinal应用\n\n## 框架优势\n1. **更快的启动速度**: 因为没有servlet容器,所以启动速非常快,web-hello工程,可以在500毫秒内启动,这对云服务而言极其重要\n\n1. **性能提升**：Tio 提供了基于 AIO 的实现，这相比于传统的基于 Servlet 的阻塞 IO，在处理并发请求时可以有更高的性能。这是因为 AIO 支持单线程或少量线程处理大量连接，减少了线程切换的开销。\n\n2. **更灵活的协议支持**：由于 Tio 提供了更底层的网络通信支持，它可以灵活处理各种自定义协议，而不仅限于 HTTP/HTTPS。这在开发需要支持特定协议的应用时非常有用。\n\n3. **更好的控制与优化空间**：通过直接处理底层的网络通信，开发者可以对网络层有更精细的控制，比如自定义缓冲区大小、连接管理、超时设置等，从而为特定场景进行优化。\n\n4. **降低资源消耗**：由于 AIO 基于非阻塞模型，能够减少对线程和内存的需求，尤其在高并发场景下，能够有效降低资源消耗。\n\n5. **更适合实时通信**：Tio 更适合需要低延迟和高吞吐量的实时通信场景，比如在线游戏、即时通讯等，因为它能够更高效地处理大量的并发连接和数据传输。next-jfinal可以完全集成这一特性\n\n6. **更好的扩展性**：基于 AIO 的框架通常具有更好的扩展性。它们能够更有效地处理增长的用户和数据量，而无需线性地增加硬件资源。\n\n## 架构图\n![架构图](readme_files/1.png)\n## 流程图\n![流程图](readme_files/2.png)\n- 1.当服务器接收到一个请求时，该请求首先由 TioServer 接收，此时数据仍处于 TCP 数据包的形式。Tio-server 随后调用 TioBootServerHandler 来处理这些数据；TioBootServerHandler 是 ServerAioHandler 的一个实现。\n\n- 2.在处理过程中，TioBootServerHandler 会根据协议类型（TCP, WebSocket, HTTP）进行协议解析并判断如何进一步处理请求。若识别为 HTTP 请求，则会传递给 HttpServerAioHandler 来进行处理。\n\n- 3.HttpServerAioHandler会检查请求是否合法(IP白名单和和名单的判断),如果合法这交由JFinalHttpRequestHandler处理.\n\n- 4.JFinalHttpRequestHandler 负责创建 DefaultHttpServletRequest 和 DefaultHttpServletResponse 对象，并将这些对象传递给 com.jfinal.core.ActionHandler。\n\n- 5.ActionHandler 接着执行路由查找和调用Jfinal Controller的操作，最终将处理结果封装在 DefaultHttpServletResponse 中并返回。这个过程确保了 HTTP 请求能够被正确解析、处理，并得到相应的响应。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitongjava%2Fnext-jfinal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flitongjava%2Fnext-jfinal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitongjava%2Fnext-jfinal/lists"}