Я пытаюсь приступить к работе над тем, что, как я надеюсь, будет относительно быстрым веб-приложением на Java, но большинство фреймворков, которые я пробовал (Apache Wicket, Liftweb), требуют стольких настроек, конфигурирования и попыток обернуть мою голову вокруг Maven, заставляя все это хорошо играть с Eclipse, что я провел все выходные, просто пытаясь добраться до точки, где я напишу свою первую строку кода!
Может ли кто-нибудь порекомендовать простую структуру веб-приложений Java, которая не включает Maven, ужасно сложные структуры каталогов или бесчисленные файлы XML, которые необходимо редактировать вручную?




Мне нравится писать простые старые сервлеты + контейнер сервлетов Winstone. Оттуда я прибегаю к библиотекам шаблонов (скорость, XSLT и т. д.) И доступа к БД (спящий режим, крутящий момент и т. д.), Поскольку они мне нужны, вместо того, чтобы заниматься реальной структурой.
Вы ищете http://grails.org/
Вы кодируете его на Groovy, динамическом языке, основанном на Java, который без проблем работает вместе с кодом Java, классами и библиотеками. Синтаксис несложен для изучения и не отличается от Java. Попробуйте, это несколько минут, чтобы запустить и запустить веб-сайт. Просто следуйте http://grails.org/Installation и http://grails.org/Quick+Start
Greetz, GHad
Спасибо, но мне действительно нужен фреймворк Java или Scala с натяжкой. Мне нужно что-то с минимальной кривой обучения, и необходимость изучать совершенно новый язык, независимо от того, насколько он может быть простым, - это не то, что я имел в виду.
Groovy действительно настолько похож на Java, что вы можете написать то, что фактически является синтаксисом Java, а затем, по мере того, как вы станете более уверенными, делать его более Groovy. Grails действительно является отличным фреймворком для быстрого прототипирования сайтов.
FWIW, вы можете написать отличный код на Java - он отлично его скомпилирует.
и наоборот, вы можете писать код Java в Groovy. Groovy похож на java ++.
@sanity, Groovy намного ближе к Java, чем Scala. Grails также построен на Spring и Hibernate, которые по сути являются стандартом для корпоративных приложений Java, потому что они надежны.
Я не использовал его, поскольку AppFuse предназначен для облегчения неприятной настройки, которая поставляется с Java Web Development.
Вы пробовали DWR? http://directwebremoting.org
Grails написан для Groovy, а не для Java. AppFuse просто сокращает время настройки, необходимое для запуска любого количества фреймворков Webapp, вместо того, чтобы продвигать какую-либо из них.
Я бы предложил Spring MVC. После выполнения хорошо написанных руководств вы получите простую и удобную модель, автоматически подключаемую (без конфигурации XML!) К любой технологии просмотра, которая вам нравится.
Хотите добавить в список клиентов действие «удалить»? Просто добавьте метод с именем «delete» в контроллер клиента, и он автоматически подключится к URL-адресу / customers / delete.
Необходимо привязать параметры запроса к объекту? Просто добавьте экземпляр целевого объекта в свой метод, и Spring MVC будет использовать отражение для привязки ваших параметров, что упростит написание вашей логики, как если бы клиент для начала передал строго типизированный объект.
Устали от принудительного разделения труда в MVC? Просто сделайте так, чтобы ваш метод возвратил void, и напишите свой ответ прямо в Writer сервлета, если вам это нравится.
Мне нравится Spring MVC, при использовании функций 2.5 требуется очень мало XML.
Оцените WaveMaker, чтобы создать быстрое и простое веб-приложение. У них есть дизайнер перетаскивания на основе браузера для виджетов Dojo / JavaScript, а бэкэнд - это 100% Java.
Полосы рамки - отличный фреймворк. Единственная задействованная конфигурация - это вставка нескольких строк в ваш web.xml.
Это очень простой веб-фреймворк Java на основе запросов.
Я нарезал канавку В самом деле на Полосы. Полная настройка включает в себя вырезание и вставку XML в файл web.xml вашего приложения, и тогда все готово. Конфигурация не требуется, поскольку Stripes - это фреймворк, основанный на соглашении по настройке. Переопределение поведения по умолчанию выполняется с помощью аннотаций Java 1.5. Документация отличная. Я потратил 1-2 часа на чтение учебника и настройку своего первого приложения.
Я пока не могу провести подробное сравнение со Struts или Spring-MVC, так как я еще не построил в нем полномасштаб (как в Struts), но похоже, что он будет масштабироваться до этого уровня архитектура вполне приличная.
Полоски: неплохо. книга по этому поводу вышла от прагматичных программистов: http://www.pragprog.com/titles/fdstr/stripes. Нет XML. Требуется java 1.5 или новее.
гобелен: пробовали старую версию 3.х. Мне сказали, что текущая версия 5.x находится в стадии бета-тестирования и довольно хороша.
Полосы должны быть лучше с точки зрения заботы о maven, без xml и быстрого оборачивания головы.
BR,
~ А
(Обновлено для Spring 3.0)
Я тоже использую Spring MVC.
Вам нужно скачать Spring с здесь
Чтобы настроить веб-приложение для использования Spring, добавьте в web.xml следующий сервлет.
<web-app>
<servlet>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring-dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Затем вам нужно создать файл конфигурации Spring /WEB-INF/spring-dispatcher-servlet.xml.
Ваша первая версия этого файла может быть такой простой, как:
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:mvc = "http://www.springframework.org/schema/mvc" xmlns:context = "http://www.springframework.org/schema/context"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package = "com.acme.foo" />
<mvc:annotation-driven />
</beans>
Затем Spring автоматически обнаружит классы, аннотированные @Controller.
Тогда простой контроллер:
package com.acme.foo;
import java.util.logging.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/person")
public class PersonController {
Logger logger = Logger.getAnonymousLogger();
@RequestMapping(method = RequestMethod.GET)
public String setupForm(ModelMap model) {
model.addAttribute("person", new Person());
return "details.jsp";
}
@RequestMapping(method = RequestMethod.POST)
public String processForm(@ModelAttribute("person") Person person) {
logger.info(person.getId());
logger.info(person.getName());
logger.info(person.getSurname());
return "success.jsp";
}
}
И details.jsp
<%@ taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<form:form commandName = "person">
<table>
<tr>
<td>Id:</td>
<td><form:input path = "id" /></td>
</tr>
<tr>
<td>Name:</td>
<td><form:input path = "name" /></td>
</tr>
<tr>
<td>Surname:</td>
<td><form:input path = "surname" /></td>
</tr>
<tr>
<td colspan = "2"><input type = "submit" value = "Save Changes" /></td>
</tr>
</table>
</form:form>
Это лишь верхушка айсберга в отношении того, что может сделать Spring ...
Надеюсь это поможет.
Spring, безусловно, хороший и широко распространенный фреймворк, но он был запрошен для простая структура веб-приложений Java. ;-)
Куда пойти details.jsp? Я настроил это, как описано, и получил: 2012-09-24 21: 57: 31.236: WARN: oejs.ServletHandler: /details.jsp java.lang.NullPointerException в java.net.URLEncoder.encode (URLEncoder.java: 205) ...
Это именно та проблема, которой хотел избежать оригинальный плакат. Необходимость писать акры этого XML здесь, этого XML там, большого количества шаблонного кода, что делает простые задачи сложными, а сложные задачи невозможными. Разве не должно быть наоборот?
Tapestry 5 можно очень быстро настроить, используя архетипы maven. См. Руководство по Tapestry 5: http://tapestry.apache.org/tapestry5/tutorial1/
Я действительно не понимаю, что такого особенного в том, чтобы заставить работать maven + eclipse, если вам не нужно слишком сильно менять pom.xml :)
Большинство фреймворков, использующих maven, имеют архетипы maven, которые могут генерировать проект-заглушку.
Итак, в основном шаги должны быть такими:
Что касается Wicket, нет причин, по которым вы не могли бы использовать его без maven. Преимущество maven в том, что он заботится обо всех зависимостях, поэтому вам не нужно этого делать. С другой стороны, если единственное, что вы хотите сделать, это создать прототип пары страниц, Wicket может оказаться излишним. Но, если ваше приложение вырастет, в конечном итоге преимущества Wicket будут продолжать проявляться с каждой добавленной формой, ссылкой или страницей :)
Правильный ответ IMO зависит от двух вещей: 1. Какова цель веб-приложения, которое вы хотите написать? Вы только сказали нам, что хотите написать это быстро, но не о том, что вы на самом деле пытаетесь сделать. Например. ему нужна база данных? Это какое-то бизнес-приложение (подсказка: возможно, поиск по запросу "строительные леса")? ..или игру? ..или вы просто экспериментируете с sthg? 2. С какими фреймворками вы сейчас больше всего знакомы? Что часто занимает больше всего времени, так это чтение документации и выяснение того, как все (на самом деле) работает. Если вы хотите, чтобы это было сделано быстро, придерживайтесь того, что вы уже хорошо знаете.
После многих болезненных опытов со Struts, Tapestry 3/4, JSF, JBoss Seam, GWT я пока буду придерживаться Wicket. Wicket Bench для Eclipse удобен, но не готов на 100%, но все же полезен. Плагин MyEclipse для развертывания в Tomcat - ace. Нет Maven просто развернуть один раз, изменения автоматически копируются в Tomcat. Магия.
Мое предложение: Wicket 1.4, MyEclipse, Subclipse, Wicket Bench, Tomcat 6. На установку уйдет около часа, но большая часть этого будет загружена tomcat и подключаемыми модулями Eclipse.
Подсказка: не используйте библиотеки Wicket Bench, а вручную установите библиотеки Wicket 1.4 в проект.
На этот сайт у меня ушло около 2 часов, чтобы написать http://ratearear.co.uk - не ходите туда с работы !! А это примерно 3 дня работы http://tnwdb.com
Удачи. Тим
Apache Wicket, Liftweb) require so much set-up, configuration
Я не согласен, я использую Wicket для всех своих проектов и никогда не оглядывался назад! настройка не займет много времени, даже часа, чтобы настроить полную среду для работы с Wicket ..
Согласен, я только начал использовать его пару дней назад и запустил свою среду менее чем за час (Wicket + Wicket-Spring + Hibernate). Я влюбился.
... пока вы не дойдете до чего-то необычного. Калитка на самом деле не простая.
Час - это долгое время. Play Framework требует около 2 минут.
... до тех пор, пока вам не потребуется масштабировать приложение для более чем одного сервера или более чем горстки пользователей. Тогда Уикет больше тебе не друг.
Сам не пробовал, но думаю
имеет большой потенциал ...
исходящий от php и классического asp, это первый веб-фреймворк java, который звучит многообещающе для меня ...
Редактировать исходный вопрос, задавший вопрос - 2011-06-09
Просто хотел предоставить обновление.
Я выбрал Play, и это было именно то, о чем я просил. Он требует очень небольшой настройки и работает сразу после установки. Необычно то, что он избегает некоторых распространенных передовых практик Java в пользу того, чтобы все было как можно проще.
В частности, он интенсивно использует статические методы и даже проводит некоторый самоанализ имен переменных, передаваемых методам, что не поддерживается API отражения Java.
Позиция Play состоит в том, что ее первая цель - быть полезной веб-платформой, а соблюдение общих передовых практик и идиом Java является вторичным по отношению к этому. Для меня этот подход имеет смысл, но пуристам Java он может не понравиться, и было бы лучше с Apache Wicket.
Таким образом, если вы хотите создать веб-приложение с удобством и простотой, сопоставимым с фреймворком вроде Ruby on Rails, но на Java и с преимуществами инструментов Java (например, Eclipse), то Play Framework - отличный выбор.
Фреймворк Play тяжело учится и тормозит JEE. Он пытается создать свою собственную экосистему, держитесь от нее подальше.
Попробуйте отладить код фреймворка Play 2.0. Если вы не знаете Scala, вам придется нелегко.
Инструмент web4j позиционирует себя как простой и легкий. Некоторые моменты по этому поводу:
Grails - это то, что вам нужно, если вам нравится легко выполнять CRUD и создавать быстрые прототипы приложения, также хорошо работает с Eclipse. Следуйте руководству «Создайте свое первое приложение Grails» здесь http://grails.org/Tutorials, и вы сможете настроить и запустить собственное приложение менее чем за час.
Попробуйте Apache Click
Он похож на Wicket, но гораздо более продуктивен и прост в освоении.
Основная причина использования Click заключается в том, что это один из немногих фреймворков, которые я понимаю, как он работает (не совсем, но, по крайней мере, в какой-то степени, чтобы чувствовать себя с ним комфортно).
попробуйте Wavemaker http://wavemaker.com Бесплатно, просто в использовании. Чтобы научиться создавать великолепные Java-приложения с помощью WaveMaker, потребуется всего несколько недель!
Это очень субъективно, но я нашел виджеты Wavemaker действительно уродливыми :-)
Недавно я нашел фреймворк AribaWeb, который выглядит очень многообещающим. Он предлагает хорошую функциональность (даже AJAX), хорошую документацию. написан на Groovy / Java и даже включает Tomcat-Server. Попытка попасть в Spring действительно разозлила меня.
Вы можете попробовать JRapid. Используя Domain Driven Design, вы определяете свое приложение, и оно генерирует полный стек для вашего веб-приложения. Он использует известные фреймворки с открытым исходным кодом и создает очень красивый и готовый к использованию пользовательский интерфейс.
Замок
http://maven.castleframework.org/nexus/content/repositories/releases/
установить с помощью maven.
попробуйте Ваадин! Очень просто, и вы также сможете легко работать с пользовательским интерфейсом! www.vaadin.com
Поскольку GWT практически мертв, это не рекомендуется.
Я также рекомендую Apache Click. Если вы пройдете тест на десять минут (я думаю, это время, которое вы потратите, чтобы прочитать Краткое руководство пользователя), вы не вернетесь!
С уважением,
Жилберто
На днях я нашел действительно легкий веб-фреймворк Java.
Он называется Jodd и дает вам многие основы, которые вы ожидаете от Spring, но в действительно легком пакете размером менее 1 МБ.
Это не только веб-фреймворк; есть контейнер ioc, механизм aop, механизм отображения db, инструменты обработки html (декоратор, минификатор ...) и т. д.
Джодд действительно очень впечатляет
Попробуйте это: http://skingston.com/SKWeb
Можно было бы добавить еще несколько функций и улучшений, но это просто и работает.
Сейчас он отключен, неудобно.
Также обратите внимание на activeweb. он простой, легкий и использует несколько других вещей, которые мне нравятся (guice, maven ...). Его контроллеры могут обслуживать все, что вы хотите, включая json, Html, простой текст, PDF-файлы, изображения ... Вы можете создавать спокойные контроллеры и даже использовать аннотации, чтобы определить, какие HTTP-методы (POST, GET, ...) принимает метод контроллера.
Общим свойством веб-приложений Java является то, что они обычно используют сервлеты, что обычно означает, что веб-сервер также выполняет Java. Это способствует воспринимаемой сложности, ИМХО. Но вы можете создавать Java-приложения в традиционном стиле Unix: «делай одно и делай это хорошо» без снижения производительности.
Вы также можете использовать SCGI, это намного проще, чем FastCGI. Сначала я попробую. Но если не получится:
wget --quiet --recursive --no-parent --accept=java --no-directories --no-host-directories "http://www.fastcgi.com/devkit/java/"mkdir -p com/fastcgimv *.java com/fastcgiТеперь вам нужно применить крошечный патч к devkit (замените оператор == на <= в строке 175 или используйте этот скрипт для этого):
echo -e "175c\nif (count <= 0) {\n.\nw\nn\nq" | ed -s com/fastcgi/FCGIInputStream.java
TinyFCGI.java (источник ниже)javac **/*.java (**, вероятно, будет работать только в zsh)java -DFCGI_PORT=9884 TinyFCGI (оставьте его работающим в фоновом режиме)Теперь настройте, например, Apache для использования сервера:
mod_proxy_fcgi следующим образом:
sudo a2enmod proxy_fcgi/etc/apache2/conf-enabled/your_site.conf с содержимым нижеsudo apache2ctl restartТеперь вы можете получить доступ к веб-приложению по адресу http://localhost/your_site.
TinyFCGI.javaimport com.fastcgi.FCGIInterface;
import java.io.*;
import static java.lang.System.out;
class TinyFCGI {
public static void main (String args[]) {
int count = 0;
FCGIInterface fcgiinterface = new FCGIInterface();
while(fcgiinterface.FCGIaccept() >= 0) {
count++;
out.println("Content-type: text/html\n\n");
out.println("<html>");
out.println(
"<head><TITLE>FastCGI-Hello Java stdio</TITLE></head>");
out.println("<body>");
out.println("<H3>FastCGI-HelloJava stdio</H3>");
out.println("request number " + count +
" running on host "
+ System.getProperty("SERVER_NAME"));
out.println("</body>");
out.println("</html>");
}
}
}
your_site.conf<Location /your_site>
ProxyPass fcgi://localhost:9884/
</Location>
работа
$ ./wrk -t1 -c100 -r10000 http://localhost/your_site
Making 10000 requests to http://localhost/your_site
1 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 3.58s 13.42s 1.06m 94.42%
Req/Sec 0.00 0.00 0.00 100.00%
10000 requests in 1.42m, 3.23MB read
Socket errors: connect 0, read 861, write 0, timeout 2763
Non-2xx or 3xx responses: 71
Requests/sec: 117.03
Transfer/sec: 38.70KB
ab
$ ab -n 10000 -c 100 localhost:8800/your_site
Concurrency Level: 100
Time taken for tests: 12.640 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 3180000 bytes
HTML transferred: 1640000 bytes
Requests per second: 791.11 [#/sec] (mean)
Time per request: 126.404 [ms] (mean)
Time per request: 1.264 [ms] (mean, across all concurrent requests)
Transfer rate: 245.68 [Kbytes/sec] received
осада
$ siege -r 10000 -c 100 "http://localhost:8800/your_site"
** SIEGE 2.70
** Preparing 100 concurrent users for battle.
The server is now under siege...^C
Lifting the server siege... done.
Transactions: 89547 hits
Availability: 100.00 %
Elapsed time: 447.93 secs
Data transferred: 11.97 MB
Response time: 0.00 secs
Transaction rate: 199.91 trans/sec
Throughput: 0.03 MB/sec
Concurrency: 0.56
Successful transactions: 89547
Failed transactions: 0
Longest transaction: 0.08
Shortest transaction: 0.00
Я бы подумал, что придерживаться JSP, сервлетов и JSTL После более чем 12 лет работы с веб-фреймворками в нескольких компаниях, с которыми я работал, я всегда возвращаюсь к старому доброму JSP. Да, есть некоторые вещи, которые вам нужно написать самостоятельно, которые некоторые фреймворки делают автоматически. Но если вы подойдете к нему правильно и создадите несколько базовых утилит поверх ваших сервлетов, это даст лучшую гибкость, и вы сможете легко делать все, что захотите. Я не нашел реальных преимуществ писать ни в одном из фреймворков. И я продолжаю искать.
Глядя на все ответы выше, также означает, что не существует единой хорошей структуры и правил.
Взгляните на Ninja Web Framework.
Это чистая среда Java MVC в традициях Rails. Он не использует конфигурацию на основе xml и имеет все необходимое для немедленного начала работы: управление сеансом, управление безопасностью, рендеринг html, рендеринг и анализ json, рендеринг и анализ xml. Он также имеет встроенную среду тестирования и на 100% совместим с традиционными контейнерами сервлетов.
Тем не менее, он использует Maven, но при правильном использовании Maven делает разработку программного обеспечения очень простой. Также он позволяет сразу использовать любой Ide :)
Кстати, разработка Ninja действительно продуктивна - внесите изменения в свой код и сразу увидите результаты.
Выезд: http://www.ninjaframework.org.
Мне это напоминает рельсы. Красивый. Но никакой книги или другого подробного справочника.
Минимальная "структура" Java с отображением URI в стиле Velocity + Play: Драмлин.