{"id":20950550,"url":"https://github.com/haducloc/appslandia-plum","last_synced_at":"2026-02-27T11:34:15.362Z","repository":{"id":293169416,"uuid":"982273622","full_name":"haducloc/appslandia-plum","owner":"haducloc","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-12T16:22:30.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-14T03:42:51.242Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haducloc.png","metadata":{},"created_at":"2025-05-12T16:22:30.000Z","updated_at":"2025-05-12T16:22:30.000Z","dependencies_parsed_at":"2025-05-14T03:42:53.392Z","dependency_job_id":"1bfbf9d6-7114-4615-b72f-ae21f5aaa8e2","html_url":"https://github.com/haducloc/appslandia-plum","commit_stats":null,"previous_names":["haducloc/appslandia-plum"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haducloc%2Fappslandia-plum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haducloc%2Fappslandia-plum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haducloc%2Fappslandia-plum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haducloc%2Fappslandia-plum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haducloc","download_url":"https://codeload.github.com/haducloc/appslandia-plum/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254518401,"owners_count":22084376,"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","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":["jakarta-ee-10","java-web-framework"],"created_at":"2024-11-19T00:49:04.407Z","updated_at":"2026-02-27T11:34:15.333Z","avatar_url":"https://github.com/haducloc.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# AppsLandia Plum - Java Web Framework\n\n## Features\n- Utilize the power of **Jakarta EE 10+** technology.\n- Utilize the power of Jakarta EE Security\n- MVC architecture\n- No need for web.xml security-constraint, login-config\n- Multiple authentication schemes implemented\n- Authentication by code mechanism implemented\n- RememberMe implemented\n- Re-authentication implemented\n- Model binding implemented\n- Standard JSTL tags implemented\n- PebbleTemplates integrated\n- i18n implemented\n- Handles CSRF, ETag, Compression, CAPTCHA, CORS, HSTS, CSP, Cache-Control, Logger, TempData, etc.\n- 360+ Unit tests\n\n## Installation\n\n### VERSIONS\n- [appslandia-plum](https://search.maven.org/search?q=a:appslandia-plum)\n- [appslandia-common](https://search.maven.org/search?q=a:appslandia-common)\n- Java 21\n\n### Maven\n```XML\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.appslandia\u003c/groupId\u003e\n    \u003cartifactId\u003eappslandia-plum\u003c/artifactId\u003e\n    \u003cversion\u003e{LATEST_VERSION}\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.appslandia\u003c/groupId\u003e\n    \u003cartifactId\u003eappslandia-common\u003c/artifactId\u003e\n    \u003cversion\u003e{LATEST_VERSION}\u003c/version\u003e\n\u003c/dependency\u003e\n\n// If Use JSTL Security Functions\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.owasp.encoder\u003c/groupId\u003e\n    \u003cartifactId\u003eencoder\u003c/artifactId\u003e\n    \u003cversion\u003e1.2.3\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Gradle\n```\ndependencies {\n  compile 'com.appslandia:appslandia-plum:{LATEST_VERSION}'\n  compile 'com.appslandia:appslandia-common:{LATEST_VERSION}'\n  \n  // If Use JSTL Security Functions\n  compile 'org.owasp.encoder:encoder:1.2.3'\n}\n```\n\n## Sample Usage\n\n``` java\n@ApplicationScoped\n@Controller\npublic class UserController {\n\n\t// GET /user/index\n\t@HttpGet\n\tpublic ActionResult index() {\n\t\treturn (request, response, requestContext) -\u003e {\n\t\t\tresponse.getWriter().print(\"Hello, UserController!\");\n\t\t};\n\t}\n\n\t// GET /user/test\n\t@HttpGet\n\t@Action(\"test\")\n\tpublic void testAction(RequestWrapper request, HttpServletResponse response) throws Exception {\n\t\tresponse.getWriter().print(\"test\");\n\t}\n\n\t// GET|POST /user/edit\n\t@HttpGetPost\n\tpublic ActionResult edit(RequestWrapper request, HttpServletResponse response) throws Exception {\n\t\t// GET\n\t\tif (request.isGetOrHead()) {\n\t\t\t// /user/edit.jsp\n\t\t\treturn JspResult.DEFAULT;\n\t\t}\n\t\t// POST\n\t\t// Create Or Update User\n\t\treturn new RedirectResult(\"index\");\n\t}\n\n\t// GET /user/get/{userId}\n\t@HttpGet\n\t@PathParams(\"/{userId}\")\n\tpublic User get(int userId) {\n\t\tif (userId \u003c= 0) {\n\t\t\tthrow new NotFoundException();\n\t\t}\n\t\tUser u = loadUser(userId);\n\t\treturn u;\n\t}\n\n\t// PUT /user/register\n\t@HttpPut\n\tpublic Result\u003cString\u003e register(@Model(Source.JSON_BODY) user, ModelState modelState) {\n\t\tif (!modelState.isValid()) {\n\t\t\tthrow new BadRequestException();\n\t\t}\n\t\t// Add user\n\t\treturn new Result\u003cString\u003e().setMessage(\"Registered user successfully.\");\n\t}\n\n\t// POST /user/testAuthorize\n\t@HttpPost\n\t@Authorize(roles=\"admin\")\n\tpublic void testAuthorize() {\n\t\t// ...\n\t}\n\t\t\n\t// Other Annotations:\n\t// @EnableCsrf, @EnableEtag, @EnableEncoding, @EnableParts, @EnableAsync, etc.\n\t\n\t// @ConsumeType\n\t\n\t// @CacheControl(\"cacheControl1\")\n\t// ...\n}\n```\n\n## License\nThis code is distributed under the terms and conditions of the [MIT license](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaducloc%2Fappslandia-plum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaducloc%2Fappslandia-plum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaducloc%2Fappslandia-plum/lists"}