Skip to main content

Can anyone recommend a simple Java web-app framework?



I'm trying to get started on what I'm hoping will be a relatively quick web application in Java, yet most of the frameworks I've tried (Apache Wicket, Liftweb) require so much set-up, configuration, and trying to wrap my head around Maven while getting the whole thing to play nice with Eclipse, that I spent the whole weekend just trying to get to the point where I write my first line of code!





Can anyone recommend a simple Java webapp framework that doesn't involve Maven, hideously complicated directory structures, or countless XML files that must be manually edited?


Comments

  1. Haven't tried it myself, but I think

    http://www.playframework.org/

    has a lot of potential...

    coming from php and classic asp, it's the first java web framework that sounds promising to me....

    Edit by original question asker - 2011-06-09

    Just wanted to provide an update.

    I went with Play and it was exactly what I asked for. It requires very little configuration, and just works out of the box. It is unusual in that it eschews some common Java best-practices in favor of keeping things as simple as possible.

    In particular, it makes heavy use of static methods, and even does some introspection on the names of variables passed to methods, something not supported by the Java reflection API.

    Play's attitude is that its first goal is being a useful web framework, and sticking to common Java best-practices and idioms is secondary to that. This approach makes sense to me, but Java purists may not like it, and would be better-off with Apache Wicket.

    In summary, if you want to build a web-app with convenience and simplicity comparable to a framework like Ruby on Rails, but in Java and with the benefit of Java's tooling (eg. Eclipse), then Play Framework is a great choice.

    ReplyDelete
  2. (Updated for Spring 3.0)

    I go with Spring MVC as well.

    You need to download Spring from here

    To configure your web-app to use Spring add the following servlet to your 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>


    You then need to create your Spring config file /WEB-INF/spring-dispatcher-servlet.xml

    Your first version of this file can be as simple as:

    <?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 will then automatically detect classes annotated with @Controller

    A simple controller is then:

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


    And the 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>


    This is just the tip of the iceberg with regards to what Spring can do...

    Hope this helps.

    ReplyDelete
  3. I am really grooving to Stripes. Total setup includes some cut-and-paste XML into your app's web.xml, and then you're off. No configuration is required, since Stripes is a convention-over-configuration framework. Overriding the default behavior is accomplished via Java 1.5 annotations. Documentation is great. I spent about 1-2 hours reading the tutorial and setting up my first app.

    I can't do an in-depth comparison to Struts or Spring-MVC yet, since I haven't built a full-scale in it yet (as I have in Struts), but it looks like it would scale to that level of architecture quite well.

    ReplyDelete
  4. Your're searching for http://grails.org/

    You code it with groovy, a dynamic language based upon Java and runs smoothly together with Java code, classes and libraries. The syntax is neither hard to learn nor far away from Java. Give it a try, it's some minutes to get a web site up and running. Just follow http://grails.org/Installation and http://grails.org/Quick+Start

    Greetz, GHad

    ReplyDelete
  5. Apache Wicket, Liftweb) require so much set-up, configuration


    I disagree, I use Wicket for all my projects and never looked back!
    it doesn't take much to set up, not even an hour to set up a full environment to work with Wicket..

    ReplyDelete
  6. Check out WaveMaker for building a quick, simple webapp. They have a browser based drag-and-drop designer for Dojo/JavaScript widgets, and the backend is 100% Java.

    ReplyDelete
  7. Stripes : pretty good. a book on this has come out from pragmatic programmers : http://www.pragprog.com/titles/fdstr/stripes. No XML. Requires java 1.5 or later.

    tapestry : have tried an old version 3.x. I'm told that the current version 5.x is in Beta and pretty good.

    Stripes should be the better in terms of taking care of maven, no xml and wrapping your head around fast.

    BR,
    ~A

    ReplyDelete
  8. Grails is written for Groovy, not Java. AppFuse merely reduces the setup time required to get any number of Webapp frameworks started, rather than promoting any one of them.

    I'd suggest Spring MVC. After following the well-written tutorials, you'll have a simple, easy model auto-wired (with no XML configuration!) into any view technology you like.

    Want to add a "delete" action to your list of customers? Just add a method named "delete" to your customer controller, and it's autowired to the URL /customers/delete.

    Need to bind your request parameters onto an object? Just add an instance of the target object to your method, and Spring MVC will use reflection to bind your parameters, making writing your logic as easy as if the client passed a strongly-typed object to begin with.

    Sick of all the forced MVC division of labor? Just have your method return void, and write your response directly to the servlet's Writer, if that's your thing.

    ReplyDelete
  9. The Stripes Framework is an excellent framework. The only configuration involved is pasting a few lines in your web.xml.

    It's a very straight forward request based Java web framework.

    ReplyDelete
  10. I like Spring MVC, using 2.5 features there is very little XML involved.

    ReplyDelete
  11. I really don't see what is the big deal with getting maven + eclipse to work, as long as you don't have to change the pom.xml too much :)

    Most frameworks that user maven have maven archetypes that can generate stub project.

    So basically the steps should be:


    Install maven
    Add M2_REPO class path variable to eclipse
    Generate project with the archetype
    Import project to eclipse


    As for Wicket, there is no reason why you couldn't use it without maven. The nice thing about maven is that it takes care of all the dependencies so you don't have to. On the other hand, if the only thing you want to do is to prototype couple of pages than Wicket can be overkill. But, should your application grow, eventually, the benefits of Wicket would keep showing with each added form, link or page :)

    ReplyDelete
  12. I like writing plain old servlets+winstone servlet container. From there I bolt on templating (velocity, XSLT, etc) and DB access (hibernate, torque, etc) libraries as I need them rather than going in for an actual framework.

    ReplyDelete
  13. Tapestry 5 can be setup very quickly using maven archetypes. See the Tapestry 5 tutorial:
    http://tapestry.apache.org/tapestry5/tutorial1/

    ReplyDelete
  14. After many painful experiences with Struts, Tapestry 3/4, JSF, JBoss Seam, GWT I will stick with Wicket for now. Wicket Bench for Eclipse is handy but not 100% complete, still useful though. MyEclipse plugin for deploying to Tomcat is ace. No Maven just deploy once, changes are automatically copied to Tomcat. Magic.

    My suggestion: Wicket 1.4, MyEclipse, Subclipse, Wicket Bench, Tomcat 6. It will take an hour or so to setup but most of that will be downloading tomcat and the Eclipse plugins.

    Hint: Don't use the Wicket Bench libs, manually install Wicket 1.4 libs into project.

    This site took me about 2 hours to write http://ratearear.co.uk - don't go there from work!! And this one is about 3 days work http://tnwdb.com

    Good luck. Tim

    ReplyDelete
  15. Try Apache Click

    It is like Wicket, but much more productive and easy to learn.

    ReplyDelete
  16. The correct answer IMO depends on two things:
    1. What is the purpose of the web application you want to write?
    You only told us that you want to write it fast, but not what you are actually trying to do. Eg. does it need a database? Is it some sort of business app (hint: maybe search for "scaffolding")? ..or a game? ..or are you just experimenting with sthg?
    2. What frameworks are you most familiar with right now?
    What often takes most time is reading docs and figuring out how things (really) work. If you want it done quickly, stick to things you already know well.

    ReplyDelete
  17. The web4j tool markets itself as simple and easy. Some points about it:


    uses a single xml file (the web.xml file required by all servlets)
    no dependency on Maven (or any other 3rd party tool/jar)
    full stack, open source (BSD)
    smallest number of classes of any full stack java framework
    SQL placed in plain text files
    encourages use of immutable objects
    minimal toolset required (JSP/JSTL, Java, SQL)

    ReplyDelete
  18. You can give JRapid a try. Using Domain Driven Design you define your application and it generates the full stack for your web app. It uses known open source frameworks and generates a very nice and ready to use UI.

    ReplyDelete
  19. try Vaadin! Very simple and you'll be able to work the UI with ease as well! www.vaadin.com

    ReplyDelete
  20. I haven't used it by AppFuse is designed to facilitate the nasty setup that comes with Java Web Development.

    ReplyDelete
  21. Oracle ADF http://www.oracle.com/technology/products/jdev/index.html

    ReplyDelete
  22. Recently i found the AribaWeb Framework which looks very promising. It offers good functionality (even AJAX), good documentation. written in Groovy/Java and even includes a Tomcat-Server. Trying to get into Spring really made me mad.

    ReplyDelete
  23. Castleframework

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

    install using maven.

    ReplyDelete
  24. I recommend Apache Click as well.
    If you pass the test of ten minutes(I think that's the time you will take to read the Quick Start Guide) you won't come back!

    Regards,

    Gilberto

    ReplyDelete
  25. Really simple (but smarter than many others) is HybridJava - only about 15 printed pages to read. http://www.hybridserverpages.com/

    ReplyDelete

Post a Comment

Popular posts from this blog

[韓日関係] 首相含む大幅な内閣改造の可能性…早ければ来月10日ごろ=韓国

div not scrolling properly with slimScroll plugin

I am using the slimScroll plugin for jQuery by Piotr Rochala Which is a great plugin for nice scrollbars on most browsers but I am stuck because I am using it for a chat box and whenever the user appends new text to the boxit does scroll using the .scrollTop() method however the plugin's scrollbar doesnt scroll with it and when the user wants to look though the chat history it will start scrolling from near the top. I have made a quick demo of my situation http://jsfiddle.net/DY9CT/2/ Does anyone know how to solve this problem?

Why does this javascript based printing cause Safari to refresh the page?

The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex