65

我正在尝试开始我希望在 Java 中相对快速的 Web 应用程序,但是我尝试过的大多数框架(Apache Wicket、Liftweb)都需要大量的设置、配置和尝试把我的头绕在 Maven 上,同时让整个事情与 Eclipse 一起玩得很好,我整个周末都在试图达到我写第一行代码的地步!

谁能推荐一个不涉及 Maven、极其复杂的目录结构或无数必须手动编辑的 XML 文件的简单 Java webapp 框架?

4

33 回答 33

50

自己没试过,但我觉得

http://www.playframework.org/

有很大的潜力...

来自 php 和经典的 asp,它是第一个听起来对我很有希望的 java web 框架......

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

只是想提供一个更新。

我选择了 Play,这正是我所要求的。它只需要很少的配置,开箱即用。不同寻常的是,它避开了一些常见的 Java 最佳实践,而倾向于使事情尽可能简单。

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

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

总而言之,如果您想构建一个方便和简单的 Web 应用程序,它可以与 Ruby on Rails 之类的框架相媲美,但在 Java 中并受益于 Java 工具(例如 Eclipse),那么 Play Framework 是一个不错的选择。

于 2009-10-25T19:15:57.547 回答
48

(针对 Spring 3.0 更新)

我也使用Spring MVC

你需要从这里下载 Spring

要将您的 Web 应用程序配置为使用 Spring,请将以下 servlet 添加到您的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 可以做什么的冰山一角……

希望这可以帮助。

于 2008-09-22T20:47:32.303 回答
28

真的很喜欢Stripes 。整个设置包括一些将 XML 剪切并粘贴到您的应用程序的 web.xml 中,然后您就可以离开了。不需要配置,因为 Stripes 是一个约定优于配置的框架。覆盖默认行为是通过 Java 1.5 注释完成的。文档很棒。我花了大约 1-2 小时阅读教程并设置我的第一个应用程序。

我还不能与 Struts 或 Spring-MVC 进行深入比较,因为我还没有在其中构建完整的模型(就像我在 Struts 中所做的那样),但看起来它会扩展到那个级别建筑相当不错。

于 2008-09-22T20:28:13.550 回答
20

您正在搜索http://grails.org/

您可以使用 groovy 对其进行编码,这是一种基于 Java 的动态语言,并且可以与 Java 代码、类和库一起顺利运行。语法既不难学,也与 Java 相差甚远。试一试,让网站启动并运行需要几分钟。只需按照http://grails.org/Installationhttp://grails.org/Quick+Start

格瑞兹,GHad

于 2008-09-22T19:35:53.100 回答
8

查看 WaveMaker 以构建快速、简单的 web 应用程序。他们有一个基于浏览器的 Dojo/JavaScript 小部件拖放设计器,后端是 100% Java。

于 2008-09-22T20:19:02.167 回答
7

条纹:很不错。务实的程序员出版了一本关于这方面的书:http: //www.pragprog.com/titles/fdstr/stripes。没有 XML。需要 java 1.5 或更高版本。

Tapestry:尝试过旧版本 3.x。有人告诉我,当前版本 5.x 处于 Beta 版并且相当不错。

在照顾 maven、没有 xml 和快速环绕你的头方面,条纹应该更好。

BR,
~A

于 2008-09-22T20:34:03.897 回答
6

Grails 是为 Groovy 而不是 Java 编写的。AppFuse 只是减少了启动任意数量的 Webapp 框架所需的设置时间,而不是推广其中的任何一个。

我建议使用 Spring MVC。遵循编写良好的教程后,您将拥有一个简单易用的模型,该模型自动连接(无需 XML 配置!)到您喜欢的任何视图技术中。

想要在您的客户列表中添加“删除”操作?只需将一个名为“delete”的方法添加到您的客户控制器,它就会自动连接到 URL /customers/delete。

需要将您的请求参数绑定到一个对象上吗?只需将目标对象的实例添加到您的方法中,Spring MVC 将使用反射来绑定您的参数,使编写逻辑就像客户端传递一个强类型对象一样简单。

厌倦了所有强制的 MVC 分工?只需让您的方法返回 void,然后将您的响应直接写入 servlet 的 Writer,如果那是您的事情。

于 2008-09-22T20:10:09.460 回答
5

我喜欢 Spring MVC,使用 2.5 特性几乎没有涉及 XML。

于 2008-09-22T20:18:45.413 回答
5

Stripes 框架是一个优秀的框架。所涉及的唯一配置是在 web.xml 中粘贴几行。

这是一个非常直接的基于请求的 Java Web 框架。

于 2008-09-22T20:25:23.417 回答
5

Apache Wicket、Liftweb)需要如此多的设置、配置

我不同意,我将 Wicket 用于我所有的项目,并且从未回头!设置不需要太多,甚至不需要一个小时来设置一个完整的环境来使用 Wicket..

于 2008-09-24T00:52:29.553 回答
5

看看 Ninja Web 框架。

它是Rails 传统的纯Java MVC 框架。它不使用任何基于 xml 的配置,并且拥有您立即开始所需的一切:会话管理、安全管理、html 呈现、json 呈现和解析、xml 呈现和解析。它还具有内置的测试环境,并且与传统的 servlet 容器 100% 兼容。

虽然它使用了 Maven——但正确使用 Maven 使软件开发变得超级简单。它还允许您立即使用任何 Ide :)

顺便说一句 - 开发 Ninja 真的很有效率 - 更改您的代码并立即查看结果。

查看:http ://www.ninjaframework.org 。

于 2013-06-07T09:25:23.550 回答
4

我喜欢编写普通的旧 servlet+ winstone servlet 容器。从那里我在需要时使用模板(速度、XSLT 等)和数据库访问(休眠、扭矩等)库,而不是进入实际框架。

于 2008-09-22T19:35:12.930 回答
3

试试Apache 点击

它类似于 Wicket,但效率更高且易于学习。

于 2010-02-01T21:51:04.030 回答
2

Tapestry 5 可以使用 maven 原型快速设置。请参阅 Tapestry 5 教程: http ://tapestry.apache.org/tapestry5/tutorial1/

于 2008-09-22T23:29:39.497 回答
2

我真的不明白让 maven + eclipse 工作有什么大不了的,只要你不必过多地更改 pom.xml :)

用户 maven 的大多数框架都具有可以生成存根项目的 maven 原型。

所以基本上步骤应该是:

  1. 安装maven
  2. 将 M2_REPO 类路径变量添加到 eclipse
  3. 使用原型生成项目
  4. 将项目导入eclipse

至于 Wicket,没有 maven 就没有理由不能使用它。maven 的好处是它会处理所有依赖项,因此您不必这样做。另一方面,如果您只想制作几个页面的原型,那么 Wicket 可能就有点过分了。但是,如果您的应用程序最终增长,Wicket 的好处将随着每个添加的表单、链接或页面继续显示 :)

于 2008-09-23T09:11:43.417 回答
2

正确答案 IMO 取决于两件事: 1. 您要编写的 Web 应用程序的目的是什么?您只是告诉我们您想快速编写它,而不是您实际尝试做的事情。例如。它需要数据库吗?它是某种商业应用程序(提示:也许搜索“脚手架”)?..还是游戏?..或者你只是在尝试某种东西?2. 你现在最熟悉的框架是什么?通常花费最多时间的是阅读文档并弄清楚事情(真正)是如何工作的。如果您想快速完成,请坚持您已经熟悉的事情。

于 2008-09-23T10:18:01.933 回答
2

在经历了 Struts、Tapestry 3/4、JSF、JBoss Seam、GWT 的许多痛苦经历之后,我现在会坚持使用 Wicket。Eclipse 的 Wicket Bench 很方便,但不是 100% 完成,但仍然有用。用于部署到 Tomcat 的 MyEclipse 插件是 ace。没有 Maven 只需部署一次,更改会自动复制到 Tomcat。魔法。

我的建议:Wicket 1.4、MyEclipse、Subclipse、Wicket Bench、Tomcat 6。设置需要一个小时左右,但其中大部分将是下载 tomcat 和 Eclipse 插件。

提示:不要使用 Wicket Bench 库,手动将 Wicket 1.4 库安装到项目中。

这个网站花了我大约 2 个小时来写http://rateearear.co.uk - 不要下班去那里!而这个工作大约需要 3 天http://tnwdb.com

祝你好运。蒂姆

于 2008-09-23T10:43:04.807 回答
2

web4j工具将自己推销为简单易用。关于它的几点:

  • 使用单个 xml 文件(所有 servlet 所需的 web.xml 文件)
  • 不依赖 Maven(或任何其他 3rd 方工具/jar)
  • 全栈,开源(BSD)
  • 任何全栈 Java 框架的最少类数
  • 放在纯文本文件中的 SQL
  • 鼓励使用不可变对象
  • 所需的最少工具集(JSP/JSTL、Java、SQL)
于 2009-10-27T00:42:03.070 回答
2

如果您喜欢轻松地进行 CRUD 并创建一个快速原型应用程序,那么 Grails 是您的最佳选择,它也与 Eclipse 配合得很好。按照此处http://grails.org/Tutorials的“构建您的第一个 Grails 应用程序”教程,您可以在不到一个小时的时间内启动并运行您自己的应用程序。

于 2009-12-14T23:03:04.613 回答
2

你可以试试JRapid。使用领域驱动设计,您可以定义您的应用程序,它会为您的 Web 应用程序生成完整的堆栈。它使用已知的开源框架并生成一个非常漂亮且易于使用的 UI。

于 2010-11-26T01:39:36.310 回答
1

AppFuse我没有使用过它,它旨在促进 Java Web 开发附带的令人讨厌的设置。

于 2008-09-22T19:42:57.497 回答
1

试试 Wavemaker http://wavemaker.com免费,易于使用。使用 WaveMaker 构建美观的 Java 应用程序的学习曲线只需几周!

于 2010-10-01T08:21:59.283 回答
1

城堡框架

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

使用 maven 安装。

于 2011-06-27T13:21:11.053 回答
1

试试瓦丁!非常简单,您也可以轻松地使用 UI!www.vaadin.com

于 2011-08-04T16:48:47.273 回答
1

前几天我发现了一个非常轻量级的 Java Web 框架。

它被称为 Jodd,它为您提供了 Spring 所期望的许多基础知识,但它是一个小于 1MB 的非常轻量级的包。

http://jodd.org/

于 2012-06-07T23:42:55.650 回答
1

也看看activeweb。它简单,轻量级,并利用了我喜欢的其他一些东西(guice,maven ...)。它的控制器可以提供您想要的任何内容,包括 json、Html、纯文本、pdf、图像...您可以制作 restful 控制器,甚至使用注释来确定控制器方法接受哪些 http 方法(POST、GET、...)。

于 2012-07-28T10:43:29.433 回答
1

我会考虑坚持使用 JSP、servlet 和 JSTL 在与我共事的几家公司处理 Web 框架超过 12 年之后,我总是发现自己回到了良好的旧 JSP。是的,有些事情您需要自己编写,而某些框架会自动完成。但是如果你正确地处理它,并在你的 servlet 之上构建一些基本的实用程序,它会提供最好的灵活性,你可以轻松地做任何你想做的事情。我没有发现在任何框架中编写的真正优势。我一直在寻找。

看了上面所有的答案也意味着没有一个真正的框架是好的和规则的。

于 2013-06-05T09:49:10.047 回答
0

你试过 DWR 吗?http://directwebremoting.org

于 2008-09-22T19:43:48.913 回答
0

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

于 2009-10-25T19:23:53.760 回答
0

最近我发现了看起来很有前途的AribaWeb框架。它提供了良好的功能(甚至是 AJAX)、良好的文档。用 Groovy/Java 编写,甚至包括一个 Tomcat-Server。试图进入春天真的让我很生气。

于 2010-10-01T08:36:33.370 回答
0

我也推荐Apache Click。如果您通过了十分钟的测试(我认为这是您阅读快速入门指南的时间),您将不会回来!

问候,

吉尔伯托

于 2012-01-11T18:37:44.530 回答
0

试试这个:http ://skingston.com/SKWeb

它可以做一些更多的功能和改进,但它很简单而且很有效。

于 2012-06-23T09:26:51.747 回答
0

Java Web 应用程序的一个共同属性是它们通常使用 servlet,这通常意味着 Web 服务器也运行 Java。这有助于感知复杂性,恕我直言。但是您可以以传统的 Unix 风格“只做一件事,把它做好”来构建 Java 应用程序,而不会影响性能。

你也可以使用SCGI,它比 FastCGI 简单得多。我会先试试。但如果不成功:

如何用 Java 编写 FastCGI 应用程序

  1. 创建一个空的工作目录并进入它
  2. 下载 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. 现在您需要对 devkit 应用一个小补丁(将 operator 替换==<=第 175 行或使用此脚本来执行此操作):

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

  6. 创建一个测试应用程序,TinyFCGI.java(来源如下)
  7. 编译一切:(javac **/*.java可能**只适用于zsh
  8. 启动 FastCGI 服务器:(java -DFCGI_PORT=9884 TinyFCGI让它在后台运行)
  9. 现在设置例如 Apache 以使用服务器:

    • 使用 Apache 2.4,您可以mod_proxy_fcgi像这样使用:
      1. 使用 Ubuntu,使用 ie this PPA升级到 Apache 2.4
      2. 启用模组:sudo a2enmod proxy_fcgi
      3. /etc/apache2/conf-enabled/your_site.conf使用以下内容创建
      4. 重启阿帕奇:sudo apache2ctl restart
  10. 现在您可以在以下位置访问 webapphttp://localhost/your_site

  11. 下面的基准测试结果

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>

基准测试结果

工作

$ ./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 -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
于 2013-02-22T21:48:41.233 回答