web-dev-qa-db-fra.com

Quelqu'un peut-il recommander un simple framework d'applications web Java?

J'essaie de commencer ce que j'espère être une application Web relativement rapide en Java, mais la plupart des frameworks que j'ai essayés (Apache Wicket, Liftweb) nécessitent tellement de configuration, de configuration et d'essais. Enfourcher ma tête autour de Maven tout en me faisant jouer Nice avec Eclipse, c'est-à-dire que j'ai passé tout le week-end à essayer d'écrire au point d'écrire ma première ligne de code!

Quelqu'un peut-il recommander un simple framework Java Webapp n'incluant pas Maven, des structures de répertoires extrêmement compliquées ou d'innombrables fichiers XML devant être modifiés manuellement?

65
sanity

Je n'ai pas essayé moi-même, mais je pense

http://www.playframework.org/

a beaucoup de potentiel ...

venant du php et de l'asp classique, c'est le premier framework web Java qui me semble prometteur ....

Éditer par le demandeur d'origine - 2011-06-09

Je voulais juste fournir une mise à jour.

J'y suis allé avec Play et c'était exactement ce que j'avais demandé. Il nécessite très peu de configuration et fonctionne tout simplement. Il est inhabituel dans le sens où il évite certaines des meilleures pratiques communes de Java en faveur de la simplification maximale des tâches. 

En particulier, il fait un usage intensif des méthodes statiques, et même une introspection sur les noms de variables transmises aux méthodes, ce qui n'est pas pris en charge par l'API de réflexion Java.

Play a pour objectif principal d’être un cadre Web utile et de s'en tenir aux meilleures pratiques et idiomes Java courants est secondaire. Cette approche a du sens pour moi, mais les puristes de Java ne l'aimeront peut-être pas, et serait mieux avec Apache Wicket .

En résumé, si vous souhaitez créer une application Web avec une commodité et une simplicité comparables à celles d'un framework tel que Ruby on Rails, mais en Java et bénéficiant des outils Java (ex. Eclipse), alors Play Framework est un excellent choix.

50
opensas

(Mise à jour pour le printemps 3.0)

Je vais avec Spring MVC aussi.

Vous devez télécharger Spring de ici

Pour configurer votre application Web afin qu'elle utilise Spring, ajoutez le servlet suivant à votre 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>

Vous devez ensuite créer votre fichier de configuration Spring /WEB-INF/spring-dispatcher-servlet.xml

Votre première version de ce fichier peut être aussi simple que:

<?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 détectera alors automatiquement les classes annotées avec @Controller

Un contrôleur simple est alors:

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";
   }
}

Et le 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>

Ce n'est que la pointe de l'iceberg en ce qui concerne ce que le printemps peut faire ...

J'espère que cela t'aides.

48
toolkit

Je suis vraiment en train de rainurer sur Stripes . La configuration complète inclut du XML copié-collé dans le fichier web.xml de votre application, et le tour est joué. Aucune configuration n'est requise car Stripes est un framework de configuration par-dessus la configuration. Le comportement par défaut est ignoré par le biais d'annotations Java 1.5. La documentation est excellente. J'ai passé environ 1 à 2 heures à lire le didacticiel et à configurer ma première application.

Je ne peux pas encore faire de comparaison approfondie avec Struts ou Spring-MVC, car je n’ai pas encore construit la version complète (comme je l’ai fait dans Struts), mais il semble que cela puisse atteindre ce niveau l'architecture assez bien.

28
John Stauffer

Vous recherchez http://grails.org/

Vous le codez avec groovy, un langage dynamique basé sur Java et fonctionnant sans à-coups avec le code, les classes et les bibliothèques Java. La syntaxe n'est ni difficile à apprendre ni très éloignée de Java. Essayez-le, il ne vous faudra que quelques minutes pour créer un site Web opérationnel. Il suffit de suivre http://grails.org/Installation et http://grails.org/Quick+Start

Greetz, GHad

20
GHad

Découvrez WaveMaker pour créer une application Web simple et rapide. Ils ont un concepteur de glisser-déposer basé sur un navigateur pour les widgets Dojo/JavaScript, et le backend est 100% Java.

8
killdash10

Stripes: plutôt bien. des programmeurs pragmatiques ont publié un livre sur ce sujet: http://www.pragprog.com/titles/fdstr/stripes . Pas de XML. Nécessite Java 1.5 ou une version ultérieure.

tapisserie: j'ai essayé une ancienne version 3.x. On me dit que la version actuelle 5.x est en version bêta et plutôt bonne.

Stripes devrait être le meilleur en termes de prendre soin de Maven, pas de XML et de vous emballer la tête rapidement.

BR,
~ A

7
anjanb

Grails est écrit pour Groovy, pas Java. AppFuse réduit simplement le temps de configuration nécessaire pour démarrer un certain nombre de frameworks Webapp, plutôt que de promouvoir l'un d'entre eux.

Je suggérerais Spring MVC. Après avoir suivi les didacticiels bien rédigés, vous aurez un modèle simple et facile à connecter automatiquement (sans configuration XML!) À la technologie d'affichage que vous préférez. 

Vous souhaitez ajouter une action "supprimer" à votre liste de clients? Ajoutez simplement une méthode nommée "delete" à votre contrôleur client, et elle est automatiquement liée à l'URL/clients/delete. 

Besoin de lier vos paramètres de requête sur un objet? Ajoutez simplement une instance de l'objet cible à votre méthode. Spring MVC utilisera la réflexion pour lier vos paramètres, ce qui simplifiera l'écriture de votre logique, comme si le client avait d'abord transmis un objet fortement typé.

Malade de toute la division du travail forcée MVC? Assurez-vous que votre méthode est annulée et écrivez votre réponse directement dans l'enregistreur de la servlet, si c'est votre cas.

6
Kyle

Apache Wicket, Liftweb) nécessitent tant de configuration, de configuration

Je ne suis pas d’accord, j’utilise Wicket pour tous mes projets et je n’ai jamais regardé en arrière!.

6
Sami

J'aime Spring MVC. En utilisant les fonctionnalités 2.5, très peu de XML est impliqué.

5
bpapa

Le Stripes Framework est un excellent cadre. La seule configuration impliquée consiste à coller quelques lignes dans votre fichier web.xml. 

C'est un framework web Java très simple.

5
ScArcher2

Jetez un coup d'œil à Ninja Web Framework.

C’est un framework Java MVC pur dans la tradition de Rails. Il n'utilise aucune configuration basée sur XML et a tout ce dont vous avez besoin pour commencer immédiatement: gestion de session, gestion de la sécurité, rendu HTML, rendu et analyse JSON, rendu et analyse XML. Il comporte également un environnement de test intégré et est 100% compatible avec les conteneurs de servlets traditionnels.

Il utilise Maven, bien que - mais Maven utilisé correctement rend le développement logiciel super simple. Cela vous permet également d'utiliser n'importe quel Ide tout de suite :)

À propos - le développement de Ninja est vraiment productif - apportez des modifications à votre code et visualisez immédiatement les résultats.

Départ: http://www.ninjaframework.org .

5
Ra_

J'aime écrire de vieilles servlets simples + winstone conteneur de servlets. À partir de là, je me connecte à des bibliothèques de templates (vélocité, XSLT, etc.) et d’accès à une base de données (veille prolongée, couple, etc.), car j’ai besoin d’elles plutôt que de chercher un framework réel.

4
Aaron Maenpaa

Je ne vois vraiment pas quel est le problème avec le fonctionnement de maven + Eclipse, tant que vous n'avez pas à changer trop le fichier pom.xml :)

La plupart des frameworks que l'utilisateur maven a des archétypes maven qui peuvent générer un projet stub.

Donc, fondamentalement, les étapes devraient être:

  1. Installer maven
  2. Ajouter une variable de chemin de classe M2_REPO à Eclipse
  3. Générer un projet avec l'archétype
  4. Importer le projet dans Eclipse

Quant à Wicket, il n'y a aucune raison pour que vous ne puissiez pas l'utiliser sans Maven. La bonne chose à propos de Maven est qu’il prend en charge toutes les dépendances pour que vous n’ayez pas à le faire. D'autre part, si la seule chose que vous voulez faire est de prototyper quelques pages, ce que Wicket peut être excessif. Toutefois, si votre application devait prendre de l'ampleur, les avantages de Wicket continueraient à apparaître avec chaque formulaire, lien ou page ajouté :)

3
Matej Knopp

Essayez Apache Click

C'est comme Wicket, mais beaucoup plus productif et facile à apprendre.

3
Andrej Fink

Grails est la voie à suivre si vous aimez faire le CRUD facilement et créer un prototype rapide, jouez également à Nice avec Eclipse. Suivez le tutoriel 'Construisez votre première application Grails' ici http://grails.org/Tutorials et vous pourrez utiliser votre propre application en moins d'une heure.

2
Drupad Panchal

La réponse correcte OMI dépend de deux choses: 1. Quel est le but de l'application Web que vous voulez écrire? Vous nous avez seulement dit que vous vouliez l'écrire rapidement, mais pas ce que vous essayez réellement de faire. Par exemple. a-t-il besoin d'une base de données? Est-ce une application professionnelle (conseil: recherchez peut-être un "échafaudage")? ..ou un jeu? ..ou êtes-vous juste expérimenter avec sthg? 2. Quels sont les cadres que vous connaissez le mieux actuellement? Ce qui prend souvent le plus de temps est la lecture de documents et la détermination du fonctionnement (réel) des choses. Si vous voulez que cela soit fait rapidement, tenez-vous-en aux choses que vous connaissez déjà bien.

2
emu

Vous pouvez essayer JRapid a. En utilisant Domain Driven Design, vous définissez votre application qui génère la pile complète pour votre application Web. Il utilise des frameworks open source connus et génère une interface utilisateur très agréable et prête à être utilisée.

2
Christian

Tapestry 5 peut être configuré très rapidement à l'aide d'archétypes Maven. Voir le tutoriel sur Tapestry 5: http://tapestry.Apache.org/tapestry5/tutorial1/

2
Paul Croarkin

Après de nombreuses expériences douloureuses avec Struts, Tapestry 3/4, JSF, JBoss Seam, GWT, je vais rester avec Wicket pour le moment. Wicket Bench for Eclipse est pratique, mais pas complet à 100%, toujours utile. Le plugin MyEclipse pour le déploiement sur Tomcat est un as. Aucun Maven ne vient de déployer une fois, les modifications sont automatiquement copiées dans Tomcat. La magie.

Ma suggestion: Wicket 1.4, MyEclipse, Subclipse, Wicket Bench, Tomcat 6. Le processus d’installation prend environ une heure, mais le téléchargement consistera principalement à télécharger Tomcat et les plugins Eclipse. 

Astuce: n'utilisez pas les bibliothèques Wicket Bench, installez manuellement les bibliothèques Wicket 1.4 dans le projet.

Ce site m'a pris environ 2 heures pour écrire http://ratearear.co.uk - n'y allez pas du travail !! Et celui-ci dure environ 3 jours http://tnwdb.com

Bonne chance. Tim 

2
Tim Squires

L'outil web4j se présente comme simple et facile. Quelques points à ce sujet:

  • utilise un seul fichier XML (le fichier web.xml requis par tous les servlets)
  • aucune dépendance vis-à-vis de Maven (ou de tout autre outil/jar tiers)
  • full stack, open source (BSD)
  • le plus petit nombre de classes de tout framework Java full stack 
  • SQL placé dans des fichiers de texte brut 
  • encourage l'utilisation d'objets immuables
  • ensemble minimal d'outils requis (JSP/JSTL, Java, SQL)
2
John O

Je pense que j’en resterais à JSP, aux servlets et à JSTL Après plus de 12 ans d’exploitation de cadres Web dans plusieurs entreprises avec lesquelles je travaillais, je me retrouve toujours avec le bon vieux JSP . Oui, il ya certaines choses vous devez écrire vous-même que certains frameworks le font automatiquement ..__ Mais si vous l'approchez correctement et construisez des utilitaires basiques sur vos servlets, cela vous donnera la meilleure flexibilité et vous pourrez faire ce que vous voudrez facilement . Je n'ai trouvé aucun avantage réel à écrire dans aucun des cadres. Et je continue à chercher.

En regardant toutes les réponses ci-dessus, cela signifie également qu’il n’existe aucun cadre unique qui soit bon et réglementaire.

1
Ronen Morecki

Cadre de château

http://maven.castleframework.org/nexus/content/repositories/releases/

installer en utilisant maven.

1
Marcel Luna

Je ne l'ai pas utilisé par AppFuse est conçu pour faciliter la configuration compliquée fournie avec le développement Web Java.

1
davetron5000

essayez Vaadin! Très simple, vous pourrez également travailler facilement avec l'interface utilisateur! www.vaadin.com

1
stavrosma

Jetez également un coup d'oeil à activeweb . c'est simple, léger et utilise quelques autres choses que j'aime bien (guice, maven ...). Ses contrôleurs peuvent servir tout ce que vous voulez, y compris json, html, texte brut, pdfs, images ... Vous pouvez créer des contrôleurs reposants et même utiliser des annotations pour déterminer les méthodes http (POST, GET, ...) acceptées par une méthode de contrôleur.

1
joshua

essayez Wavemaker http://wavemaker.com Gratuit, facile à utiliser. La courbe d'apprentissage pour créer de superbes applications Java avec WaveMaker ne dure que quelques semaines!

1
Aurelio

J'ai trouvé un framework web Java très léger l'autre jour.

Il s’appelle Jodd et vous donne bon nombre des bases que vous pouvez attendre du printemps, mais dans un paquet vraiment léger qui fait moins de 1Mo.

http://jodd.org/

1
Hakkar
0
user188658

Avez-vous essayé DWR? http://directwebremoting.org

0
Eduardo Campañó

Essayez ceci: http://skingston.com/SKWeb

Cela pourrait se faire avec quelques fonctionnalités et améliorations supplémentaires, mais c'est simple et cela fonctionne.

0
Shane

Une propriété commune de Java applications Web est qu'elles utilisent généralement des servlets, ce qui signifie généralement que le serveur Web exécute également Java. Cela contribue à la complexité perçue, IMHO. Mais vous pouvez créer Java applications dans le style Unix traditionnel "faire une chose et bien le faire" sans que les performances en pâtissent.

Vous pouvez également utiliser SCGI , c'est beaucoup plus simple que FastCGI. J'essaierais ça en premier. Mais si ça ne marche pas:

Comment écrire une application FastCGI en Java

  1. Créez un répertoire de travail vide et entrez-le
  2. Téléchargez le devkit FastCGI: wget --quiet --recursive --no-parent --accept=Java --no-directories --no-Host-directories "http://www.fastcgi.com/devkit/Java/"
  3. mkdir -p com/fastcgi
  4. mv *.Java com/fastcgi
  5. Vous devez maintenant appliquer un petit correctif au devkit (remplacez l'opérateur == par <= à la ligne 175 ou utilisez ce script pour le faire):

    echo -e "175c\nif (count <= 0) {\n.\nw\nn\nq" | ed -s com/fastcgi/FCGIInputStream.Java

  6. Créez une application de test, TinyFCGI.Java (source ci-dessous)
  7. Tout compiler: javac **/*.Java (** ne fonctionnera probablement que dans zsh)
  8. Démarrez le serveur FastCGI: Java -DFCGI_PORT=9884 TinyFCGI (laissez-le en arrière-plan)
  9. Maintenant, configurez par exemple Apache pour utiliser le serveur:

    • Avec Apache 2.4, vous pouvez utiliser mod_proxy_fcgi comme ceci:
      1. Sous Ubuntu, effectuez une mise à niveau vers Apache 2.4 avec i.e. this PPA
      2. Activer le mod: Sudo a2enmod proxy_fcgi
      3. Créez /etc/Apache2/conf-enabled/your_site.conf avec le contenu ci-dessous
      4. Redémarrez Apache: Sudo Apache2ctl restart
  10. Vous pouvez maintenant accéder à l'application Web à l'adresse http://localhost/your_site

  11. Résultats de référence ci-dessous

TinyFCGI.Java

import 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>

Résultats de référence

wrk

$ ./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

siège

$ 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
0
Janus Troelsen

Récemment, j'ai trouvé le AribaWeb Framework qui semble très prometteur. Il offre une bonne fonctionnalité (même AJAX), une bonne documentation. écrit en Groovy/Java et inclut même un serveur Tomcat. Essayer d'entrer dans Spring m'a vraiment rendu fou. 

0
cuh

Je recommande Apache Click aussi ... .. Si vous réussissez le test de dix minutes (je pense que c'est le temps qu'il vous faudra pour lire le Guide de démarrage rapide ), vous ne reviendrez pas!

Cordialement,

Gilberto

0
Gilberto