有人能推荐一个简单的Java Web应用程序框架吗?

65

我希望开始开发一个使用Java编写的Web应用程序,但是我尝试过的大多数框架(如Apache Wicket、Liftweb)需要进行大量的设置、配置,并且在让整个项目与Eclipse协作时,还要理解Maven,以至于我花费了整个周末才试图达到第一行代码的编写点!

有没有人能够推荐一个简单的Java Web应用程序框架,不需要涉及Maven、极其复杂的目录结构或者无数必须手动编辑的XML文件?

33个回答

50

我并没有亲自尝试过,但我认为:

http://www.playframework.org/

有很大的潜力...

作为一个从php和classic asp过渡来的人,这是第一个听起来对我很有前途的java web框架。

由问题原始提问者编辑 - 2011-06-09

只想提供一下更新。

我选择了Play,它正是我所要求的。它需要非常少的配置,并且开箱即用。它的不同之处在于,它弃用了一些常见的Java最佳实践,而是以保持简单为重点。

特别是,它大量使用静态方法,甚至对传递给方法的变量名称进行了一些内省操作,这是Java反射API不支持的。

Play的态度是,它的首要目标是成为一个有用的web框架,坚持常见的Java最佳实践和习惯次要。这种方法对我来说很有道理,但是Java纯粹主义者可能不喜欢它,他们最好使用Apache Wicket

总之,如果你想在Java中构建一个Web应用程序,并且希望拥有类似于Ruby on Rails框架的便利和简洁性,并且还带有Java的工具(例如Eclipse)的好处,那么Play Framework是一个绝佳的选择。


7
Play框架难以学习并且破坏了JEE标准。它试图创建自己的生态系统,建议远离它。 - user452425
尝试调试Play 2.0框架代码。如果你不懂Scala,那么你将会很难处理它。 - Aliaksei Nikuliak

48

(已更新至Spring 3.0版本)

我同样使用Spring MVC

你需要从这里下载Spring。

web.xml中添加以下servlet以配置您的Web应用程序使用Spring。

<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的功能的冰山一角...

希望这能有所帮助。


27
春季框架无疑是一个好的广泛应用的框架,但有人要求一个简单的Java web应用程序框架。;-) - cuh
details.jsp应该放在哪里?我已按照说明进行设置,但收到以下警告: 2012-09-24 21:57:31.236:WARN:oejs.ServletHandler:/details.jsp java.lang.NullPointerException at java.net.URLEncoder.encode(URLEncoder.java:205) ... - kburns
5
这恰恰是原帖作者想要避免的问题。需要在这里写下大量的XML,那里写下另一个XML,大量的样板代码,使简单的任务变得复杂,而复杂的任务则变得不可能完成。难道不应该反过来吗? - András Aszódi

28

我非常喜欢Stripes,它是一个与传统配置不同的框架,只需要在应用程序的web.xml中复制粘贴一些XML代码即可使用。通过Java 1.5注解来覆盖默认行为,且无需额外配置。文档十分详尽,我大约花了1-2个小时阅读教程并完成了我的第一个应用程序。

虽然我还没有在Stripes中创建完整的大型应用程序(就像我在Struts中做的那样),因此无法进行深度比较,但是看起来Stripes可以很好地扩展到这个级别的架构。


1
http://www.stripesframework.org/display/stripes/Stripes+vs.+Struts - ScArcher2

20

谢谢,但我真的想要一个Java框架,或者最多也可以考虑Scala。我需要一些学习曲线较小的东西,而不是必须要学习全新的语言,无论它有多简单,这都不是我想要的。 - sanity
1
Groovy确实非常类似于Java,你可以编写实际上是Java语法的代码,然后随着更多信心的增长将其变得更加Groovy。Grails确实是一个用于快速原型制作网站的优秀框架。 - Peter Kelley
顺便说一句,你可以在Java中编写Groovy代码-它会很好地编译它。 - Tim Howland
你可以在Groovy中编写Java代码,反之亦然。Groovy类似于Java++。 - frankodwyer
1
@sanity,Groovy比Scala更接近Java。Grails也是基于Spring和Hibernate构建的,这是Java企业应用程序的事实标准,因为它非常可靠。 - Reverend Gonzo

8

看看WaveMaker,用它来快速构建简单的Web应用程序。 它具有基于浏览器的拖放式设计师,可用于Dojo / JavaScript小部件,后端完全由Java支持。


7

条纹(Stripes):非常不错。有一本关于它的书出版了,由实用程序员(pragmatic programmers)出版:http://www.pragprog.com/titles/fdstr/stripes。无需XML,需要Java 1.5或更高版本。

织带(Tapestry):我尝试过一个旧版本3.x。我被告知当前版本5.x处于Beta测试阶段,非常不错。

在处理Maven、没有XML和快速理解方面,条纹应该更好。

敬礼,
~A


6
Grails是为Groovy编写的,而不是Java。AppFuse仅仅减少了启动任意数量Web应用程序框架所需的设置时间,而不是推广其中任何一个。
我建议使用Spring MVC。在遵循良好编写的教程后,您将拥有一个简单、易于自动装配的模型(无需XML配置!),并可与您喜欢的任何视图技术一起使用。
想要将“删除”操作添加到客户列表中吗?只需将名为“delete”的方法添加到您的客户控制器中,它就会被自动装配到URL /customers/delete。
需要将请求参数绑定到对象上吗?只需将目标对象的实例添加到您的方法中,Spring MVC将使用反射来绑定您的参数,使编写逻辑像客户端传递强类型对象一样容易。
厌倦了所有强制MVC劳动分工吗?只需让您的方法返回void,并直接将响应编写到servlet的Writer中,如果这是您的风格的话。

5
请看Ninja Web Framework。它是一个无XML配置的纯Java MVC框架,遵循Rails传统风格。它提供了Session管理、安全管理、HTML渲染、JSON渲染和解析、XML渲染和解析等所有必备功能,可以让你立即开始开发。它还具有内置测试环境,并且与传统Servlet容器100%兼容。虽然它使用Maven,但是正确使用Maven可以使软件开发变得超级简单。此外,它允许您立即使用任何IDE :) 。顺便说一句,开发Ninja非常高效——修改代码后立即查看结果。请查看:http://www.ninjaframework.org

这让我想起了Rails。非常美丽。但是没有书籍或其他详细的参考资料。 - SanSolo

5

我喜欢Spring MVC,使用2.5版本的功能时,几乎不需要涉及XML。


5

Stripes Framework 是一个很棒的框架。唯一需要配置的就是在 web.xml 中粘贴几行代码。

它是一个非常简单易懂的基于请求的 Java Web 框架。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接