Добавьте act-starter-parent
в ваш файл pom.xml
.
<parent>
<groupId>org.actframework</groupId>
<artifactId>act-starter-parent</artifactId>
<version>1.9.1.0</version>
</parent>
Или используйте архетип Maven для создания нового проекта:
mvn archetype:generate -B \
-DgroupId=com.mycom.helloworld \
-DartifactId=helloworld \
-DarchetypeGroupId=org.actframework \
-DarchetypeArtifactId=archetype-quickstart \
-DarchetypeVersion=1.9.1.0
Подсказка: не забудьте заменить groupId
, artifactId
и appName
в приведённой выше команде, либо вы можете использовать интерактивный режим для генерации вашего проекта:
mvn archetype:generate -DarchetypeGroupId=org.actframework -DarchetypeArtifactId=archetype-quickstart -DarchetypeVersion=1.9.1.0
Примечание: В ActFramework есть больше архетипов приложений. Получите их здесь.
Полный стек MVC-фреймворк
Непревзойдённый опыт разработки с отличной производительностью
Полная поддержка внедрения зависимостей согласно JSR330
Отличная поддержка одностраничных приложений (SPA) и мобильных приложений
Неуклонная безопасность
Сознательное использование аннотаций, но без использования сложных стеков аннотаций
Аннотации — один из инструментов, который ActFramework использует для повышения экспрессивности. Однако мы не одобряем случаев, когда аннотации используются слишком часто. Вместо этого мы стремимся сделать код таким образом, чтобы он выражал намерение естественным способом и минимизировать использование аннотаций, где это возможно.
Например, для следующего кода SpringMVC:
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
Соответствующий код приложения ActFramework будет выглядеть так:
@GetAction("/user/{user}/invoices")
public List listUsersInvoices(int user, Date date) {
...
}
Поддержка многоконфигурационных окружений
ActFramework поддерживает концепцию профиля
, которая позволяет легко организовать ваши конфигурации в различных окружениях (определённых профилем). Посмотрите на следующие конфигурации из одного из наших реальных проектов:
resources
├── conf
│ ├── common
│ │ ├── app.properties
│ │ ├── db.properties
│ │ ├── mail.properties
│ │ ├── payment.properties
│ │ └── social.properties
│ ├── local-no-ui
│ │ ├── app.properties
│ │ ├── db.properties
│ │ └── port.properties
│ ├── local-sit
│ │ └── app.properties
│ ├── local-ui
│ │ ├── app.properties
│ │ └── db.properties
│ ├── sit
│ │ ├── app.properties
│ │ └── db.properties
│ └── uat
...
Предположим, что вы запускаете приложение на сервере UAT с параметром JVM -Dprofile=uat
. ActFramework будет загружать конфигурации в следующем порядке:
.properties
в директории /resources/conf/common
..properties
в директории /resources/conf/uat
.Таким образом ActFramework использует конфигурационные параметры, определённые в профиле uat
, чтобы перезаписать те же параметры, определённые в профиле common
. Общие параметры, которые не были перезаписаны, остаются действительными.
Часто используемые инструменты
package demo.helloworld;
import act.Act;
import act.Version;
import org.osgl.mvc.annotation.GetAction;
public class HelloWorldApp {
@GetAction
public String sayHelloTo(@DefaultValue("World") String who) {
return "Hello " + who + "!";
}
public static void main(String[] args) throws Exception {
Act.start();
}
}
Узнайте больше о том, как создать HelloWorld в Eclipse с нуля, просмотрев это видео продолжительностью семь минут. Для пользователей, которым недоступна YouTube, доступен вариант на Tudou.
package demo.rest;
import act.controller.Controller;
import act.db.morphia.MorphiaAdaptiveRecord;
import act.db.morphia.MorphiaDao;
import org.mongodb.morphia.annotations.Entity;
import org.osgl.mvc.annotation.*;
import java.util.Map;
import static act.controller.Controller.Util.notFoundIfNull;
@Entity("user")
public class User extends MorphiaAdaptiveRecord<User> {
@UrlContext("user")
public static class Service extends MorphiaDao<User> {
@PostAction
public User create(User user) {
return save(user);
}
@GetAction
public Iterable<User> list() {
return findAll();
}
@GetAction("{id}")
public User show(@DbBind("id") User user) {
return user;
}
@PutAction("{id}")
public User update(@DbBind("id") @NotNull User user, Map<String, Object> data) {
user.mergeValues(data);
return save(user);
}
@DeleteAction("{id}")
public void delete(String id) {
deleteById(id);
}
}
public static void main(String[] args) throws Exception {
Act.start();
}
}
Узнайте больше о поддержке RESTful с помощью просмотра этого видео продолжительностью час. Для пользователей, которым недоступна YouTube, доступен вариант на Tudou.
Дополнительно, для лучшего понимания AdaptiveRecord, просмотрите это видео продолжительностью семь минут. Для пользователей, которым недоступна YouTube, доступен вариант на Tudou.
Я люблю PlayFramework версии 1.x потому что он прост, ясен и экспрессивен. Он принёс нам совершенно новый опыт работы с Java-веб-разработкой. Однако я не полностью согласен с тем направлением, в котором развивается Play 2.X, и кажется, что я не единственный человек, обеспокоенный этим вопросом, как показывает этот открытый письмо разработчикам Play Framework. Я думал о запуске чего-то, что могло бы следовать пути, проложенному Play 1.x, что-то простое, ясное, выразительное и удобное для разработчиков Java (в частности). Около полутора лет спустя после этого я решил, что могу начать проект серьезно, а ещё через полтора года я довёл до относительно хорошей формы этот ACT-фреймворк.
Счастливого программирования!
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )