{"id":14987758,"url":"https://github.com/apache/struts","last_synced_at":"2025-05-14T11:05:15.724Z","repository":{"id":13243842,"uuid":"15928650","full_name":"apache/struts","owner":"apache","description":"Apache Struts is a free, open-source, MVC framework for creating elegant, modern Java web applications","archived":false,"fork":false,"pushed_at":"2025-05-07T05:18:17.000Z","size":85146,"stargazers_count":1312,"open_issues_count":7,"forks_count":824,"subscribers_count":126,"default_branch":"main","last_synced_at":"2025-05-07T10:52:32.887Z","etag":null,"topics":["java","struts","web-framework"],"latest_commit_sha":null,"homepage":"https://struts.apache.org/","language":"Java","has_issues":false,"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/apache.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":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2014-01-15T08:00:08.000Z","updated_at":"2025-05-07T05:18:21.000Z","dependencies_parsed_at":"2023-09-30T10:48:06.036Z","dependency_job_id":"9fcef6d1-9ccc-4c57-b9a8-c61eb04c188e","html_url":"https://github.com/apache/struts","commit_stats":{"total_commits":6844,"total_committers":122,"mean_commits":56.09836065573771,"dds":0.6168907071887785,"last_synced_commit":"9aa41f18aeca535cf2f45d00d16a8dabd7e70f87"},"previous_names":[],"tags_count":175,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fstruts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fstruts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fstruts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fstruts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apache","download_url":"https://codeload.github.com/apache/struts/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253857757,"owners_count":21974812,"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":["java","struts","web-framework"],"created_at":"2024-09-24T14:15:21.663Z","updated_at":"2025-05-14T11:05:15.644Z","avatar_url":"https://github.com/apache.png","language":"Java","readme":"\u003c!---\n Licensed to the Apache Software Foundation (ASF) under one or more\n contributor license agreements.  See the NOTICE file distributed with\n this work for additional information regarding copyright ownership.\n The ASF licenses this file to You under the Apache License, Version 2.0\n (the \"License\"); you may not use this file except in compliance with\n the License.  You may obtain a copy of the License at\n\n      http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n--\u003e\nThe Apache Struts web framework\n-------------------------------\n\n[![Build Status](https://ci-builds.apache.org/buildStatus/icon?job=Struts%2FStruts+Core%2Fmain)](https://ci-builds.apache.org/job/Struts/job/Struts%20Core/job/main/)\n[![Java Build](https://github.com/apache/struts/actions/workflows/maven.yml/badge.svg)](https://github.com/apache/struts/actions/workflows/maven.yml)\n[![Maven Central](https://maven-badges.sml.io/maven-central/org.apache.struts/struts2-core/badge.svg)](https://maven-badges.sml.io/maven-central/org.apache.struts/struts2-core/)\n[![Javadocs](https://javadoc.io/badge/org.apache.struts/struts2-core.svg)](https://javadoc.io/doc/org.apache.struts/struts2-core)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=apache_struts\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=apache_struts)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/apache/struts/badge)](https://deps.dev/maven/org.apache.struts%3Astruts2-core)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6618/badge)](https://bestpractices.coreinfrastructure.org/projects/6618)\n[![License](http://img.shields.io/:license-apache-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)\n\nThe Apache Struts web framework is a free open-source solution for creating Java web applications.\n\n## Documentation\n\nMore information can be found on the [homepage](https://struts.apache.org/). Please read the [Security Guide](https://struts.apache.org/security/),\nand the [JavaDocs](https://struts.apache.org/maven/struts2-core/apidocs/index.html) can be browsed.\nQuestions related to the usage of Apache Struts should be posted to the [user mailing list](https://struts.apache.org/mail.html).\n\n## Description\n\nWeb applications differ from conventional websites in that web applications can create a dynamic response. Many websites \ndeliver only static pages. A web application can interact with databases and business logic engines to customize a response.\n\nWeb applications based on JavaServer Pages sometimes commingle database code, page design code, and control flow code. \nIn practice, we find that unless these concerns are separated, larger applications become difficult to maintain.\n\nOne way to separate concerns in a software application is to use a Model-View-Controller (MVC) architecture. The Model \nrepresents the business or database code, the View represents the page design code, and the Controller represents \nthe navigational code. The Struts framework is designed to help developers create web applications that utilize \nan MVC architecture.\n\nThe framework provides three key components:\n\n- A “request” handler provided by the application developer that is mapped to a standard URI.\n- A “response” handler that transfers control to another resource which completes the response.\n- A tag library that helps developers create interactive form-based applications with server pages.\n\nThe framework’s architecture and tags are buzzword compliant. Struts works well\nwith conventional REST applications and with technologies like SOAP and AJAX.\n\n## The Apache Struts Project\n\nThe Apache Struts Project is the open source community that creates and maintains the Apache Struts framework. \nThe project consists of a diverse group of volunteers who share common values regarding collaborative, community-based\nopen source development. The Apache Struts Project is proud to share these values with our parent organization: \nThe Apache Software Foundation.\n\nThe project is called “Struts” because the framework is meant to furnish the “invisible underpinnings” that support \nprofessional application development. Struts provides the glue that joins the various elements of the standard Java \nplatform into a coherent whole. Our goal is to leverage existing standards by producing the missing pieces we need to create \nenterprise-grade applications that are easy to maintain over time.\n\nThe Apache Struts Project offered two major versions of the Struts framework. Currently we are only maintaining the Struts 2 \nversion. It is recommended to upgrade all Struts 1.x applications to Struts 2. Please do not start new application development \nusing Struts 1.x, as we are no longer issuing security patches.\n\nStruts 2 was originally known as WebWork 2. After working independently for several years, the WebWork and Struts \ncommunities joined forces to create Struts 2. The 2.x framework is the best choice for teams who value elegant solutions \nto difficult problems.\n\n## Why should you use Apache Struts?\n\nApache Struts is a modern, maintained and full-featured web framework. As it has been around for years and grown a huge user \nbase it is unlikely it will go away anytime soon. Not only that, we have dedicated users and developers \non the project. Apache Struts is licensed under the Apache License 2.0 and this will not change. We maintain a clean IP \nand you are “safe” to use the project. Sometimes you are not “safe” to use a project when a company controls the SCM. \nAccess to Source Code doesn’t mean it is free. With Apache Struts, you are not only free to “do what you want with it”, \nyou can even contribute (which is not always the case). And best of all: you can become a part of the core team too.\n\nIt is usually very easy to integrate other technologies with Apache Struts. If you are using an ORM like Apache Cayenne, \nHibernate or JDBC, you will not have any restrictions. Apache Struts is not even tied too much to a frontend technology. \nIn old days it was JSP, then came Velocity and Freemarker. Nowadays you might build your web application with just static \nHTML and AngularJS. Or you might want to use Sitemesh or Tiles. This all is no problem due to Struts' elegant and easy-to-use \nextension mechanisms.\n\nUnlike other, component-oriented frameworks, we do not aim to hide the stateless nature of the web. We think it is \nperfectly acceptable to build upon a Request/Response cycle. We also think the MVC pattern is not so bad, just because \nit is old. In fact, we believe the Apache Struts architecture is clean and easy to understand.\n\nOf course, if you wish to build components on the server side which render on the front end side, you will most likely \nnot want Struts. This is a different approach which promises to reduce the amount of HTML/JavaScript knowledge needed \nand to create reusable components for the view layer. Projects like Wicket and Tapestry serve this purpose very well. \nAs with every framework, you need to decide if it makes sense for you to build components or if you prefer \nthe Struts approach.\n\n## Commercial Support\n\nThe Apache Struts community does not offer commercial support by itself, but we maintain [a list of companies offering\ncommercial support on our website](https://struts.apache.org/commercial-support.html).\n\nSome Apache Struts maintainers are working with [Tidelift](https://tidelift.com/) to provide commercial support and\ninvest paid working time in the improvement of the Apache Struts framework. For more information, visit \nthe [Tidelift resources regarding Apache Struts](https://tidelift.com/subscription/pkg/maven-org-apache-struts-struts2-core?utm_source=maven-org-apache-struts-struts2-core\u0026utm_medium=referral\u0026utm_campaign=readme)\n\n## Thank you\n\n[YourKit](https://www.yourkit.com/) is kindly supporting open source projects with its full-featured Java Profiler.\nYourKit is the creator of innovative and intelligent tools for profiling Java and .NET applications.\nAs an Apache committer, you can get a free license at [YourKit's open source sponsorship program](https://www.yourkit.com/java/profiler/purchase/#os_license).\n","funding_links":["https://tidelift.com/","https://tidelift.com/subscription/pkg/maven-org-apache-struts-struts2-core?utm_source=maven-org-apache-struts-struts2-core\u0026utm_medium=referral\u0026utm_campaign=readme"],"categories":["开发框架"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fstruts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapache%2Fstruts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fstruts/lists"}