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

时间:2008-09-22 19:31:00

标签: java web-frameworks

我正在尝试开始我希望在Java中使用相对快速的Web应用程序,但我尝试过的大多数框架(Apache Wicket,Liftweb)需要如此多的设置,配置,并且试图用我的头围绕Maven,同时让整个事情与Eclipse玩得很好,我花了整个周末才试图达到我编写第一行代码的程度!

有人可以推荐一个简单的Java webapp框架,它不涉及Maven,可怕的复杂目录结构,或者必须手动编辑的无数XML文件吗?

33 个答案:

答案 0 :(得分: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是一个很棒的选择。

答案 1 :(得分:48)

(针对Spring 3.0更新)

我也和Spring MVC一起去。

您需要从here

下载Spring

要将您的网络应用配置为使用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可以做什么的冰山一角......

希望这有帮助。

答案 2 :(得分:28)

真的开始Stripes。总体设置包括一些剪切和粘贴XML到您的应用程序的web.xml,然后你就关闭了。无需配置,因为Stripes是一种基于约定的约定框架。覆盖默认行为是通过Java 1.5注释完成的。文档很棒。我花了大约1-2个小时阅读教程并设置我的第一个应用程序。

我还不能与Struts或Spring-MVC进行深入的比较,因为我还没有构建一个完整的版本(正如我在Struts中所做的那样),但看起来它可以扩展到这个级别的架构非常好。

答案 3 :(得分:20)

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

使用groovy编写代码,这是一种基于Java的动态语言,可以与Java代码,类和库一起平滑运行。语法既不难学也不远离Java。尝试一下,只需几分钟即可启动并运行网站。只需关注http://grails.org/Installationhttp://grails.org/Quick+Start

即可

Greetz,GHad

答案 4 :(得分:8)

查看WaveMaker构建快速,简单的Web应用程序。他们为Dojo / JavaScript小部件设置了基于浏览器的拖放设计器,后端是100%Java。

答案 5 :(得分:7)

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

tapestry:尝试了旧版3.x.我被告知当前版本5.x处于测试版状态并且相当不错。

条纹应该是更好的照顾maven,没有xml和快速包裹你的头。

BR,
〜A

答案 6 :(得分:6)

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

我建议使用Spring MVC。按照精心编写的教程,您将拥有一个简单,简单的模型自动连接(没有XML配置!)到您喜欢的任何视图技术。

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

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

所有被迫的MVC分工都生病了吗?只是让你的方法返回void,并将你的响应直接写入servlet的Writer,如果这是你的事情。

答案 7 :(得分:6)

  

Apache Wicket,Liftweb)需要这么多的设置,配置

我不同意,我在我的所有项目中使用Wicket而且从不回头! 设置起来并不需要花费太多时间,甚至不需要一个小时来建立一个与Wicket合作的完整环境。

答案 8 :(得分:5)

我喜欢Spring MVC,使用2.5功能时涉及的XML很少。

答案 9 :(得分:5)

看看Ninja Web Framework。

它是Rails传统中的纯Java MVC框架。它不使用任何基于xml的配置,只需立即开始:会话管理,安全管理,html渲染,json渲染和解析,xml渲染和解析。它还具有内置测试环境,与传统的servlet容器100%兼容。

它使用Maven,但Maven使用正确使得软件开发变得非常简单。它还允许您立即使用任何Ide:)

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

退房:http://www.ninjaframework.org

答案 10 :(得分:5)

Stripes Framework是一个很好的框架。涉及的唯一配置是在web.xml中粘贴几行。

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

答案 11 :(得分:4)

我喜欢编写普通的旧servlet + winstone servlet容器。从那里开始,我将模板化(速度,XSLT等)和数据库访问(休眠,扭矩等)库作为我需要它们而不是用于实际框架。

答案 12 :(得分:3)

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

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

所以基本上步骤应该是:

  1. 安装maven
  2. 将M2_REPO类路径变量添加到eclipse
  3. 使用原型生成项目
  4. 将项目导入eclipse
  5. 至于Wicket,没有理由不在没有maven的情况下使用它。关于maven的好处是它可以处理所有依赖项,因此您不必这样做。另一方面,如果你想要做的唯一事情就是对几页进行原型设计而不是Wicket可能会有点过分。但是,如果您的应用程序增长,最终,Wicket的好处将继续显示每个添加的表单,链接或页面:)

答案 13 :(得分:3)

尝试Apache Click

它就像Wicket,但效率更高,更容易学习。

答案 14 :(得分:2)

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

答案 15 :(得分:2)

您可以尝试JRapid。使用域驱动设计,您可以定义应用程序,并为您的Web应用程序生成完整堆栈。它使用已知的开源框架,并生成一个非常好的,随时可用的UI。

答案 16 :(得分:2)

如果你想轻松地完成CRUD并创建一个快速的原型应用程序,那么Grails就是你要走的路。按照http://grails.org/Tutorials中的“构建您的第一个Grails应用程序”教程,您可以在不到一个小时的时间内启动并运行自己的应用程序。

答案 17 :(得分:2)

web4j工具让自己变得简单易行。关于它的一些观点:

  • 使用单个xml文件(所有servlet所需的web.xml文件)
  • 不依赖于Maven(或任何其他第三方工具/ jar)
  • 完整堆栈,开源(BSD)
  • 任何完整堆栈java框架的最小数量的类
  • SQL放在纯文本文件中
  • 鼓励使用不可变对象
  • 所需的最小工具集(JSP / JSTL,Java,SQL)

答案 18 :(得分:2)

经过Struts,Tapestry 3/4,JSF,JBoss Seam,GWT的许多痛苦经历后,我将坚持使用Wicket。 Wicket Bench for Eclipse非常方便但不是100%完整,但仍然有用。用于部署到Tomcat的MyEclipse插件是ace。 No 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

祝你好运。蒂姆

答案 19 :(得分:2)

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

答案 20 :(得分:1)

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

答案 21 :(得分:1)

答案 22 :(得分:1)

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

答案 23 :(得分:1)

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

它被称为Jodd并为您提供了许多您期望从Spring获得的基础知识,但是在一个非常轻的包中,它<1MB。

http://jodd.org/

答案 24 :(得分:1)

另请查看activeweb。它简单,轻巧,并使用我喜欢的一些其他东西(guice,maven ......)。它的控制器可以提供你想要的任何东西,包括json,Html,纯文本,pdf,图像...你可以制作安静的控制器甚至使用注释来确定控制器方法接受哪些http方法(POST,GET,...)。 / p>

答案 25 :(得分:1)

我认为要坚持使用JSP,servlets和JSTL 在与我合作的几家公司处理Web框架超过12年后,我总是发现自己回到了旧的JSP。 是的,您需要自己编写某些框架自动执行的操作。 但是如果你正确地处理它,并在servlet之上构建一些基本的工具,它会提供最大的灵活性,你可以轻松地做任何你想做的事情。 我没有找到在任何框架中编写的真正优势。我一直在寻找。

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

答案 26 :(得分:1)

AppFuse我没有使用它,旨在促进Java Web Development带来的令人讨厌的设置。

答案 27 :(得分:0)

答案 28 :(得分:0)

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

答案 29 :(得分:0)

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

答案 30 :(得分:0)

我也推荐Apache Click。 如果你通过了十分钟的考试(我认为你需要阅读Quick Start Guide的时间),你将不会回来!

此致

吉尔伯托

答案 31 :(得分:0)

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

它可以使用更多功能和改进,但它很简单并且有效。

答案 32 :(得分:0)

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

您也可以使用SCGI,它比FastCGI简单得多。我先尝试一下。但如果它没有成功:

如何用Java编写FastCGI应用程序

  1. 制作一个空的工作目录并输入
  2. 下载FastCGI devkit: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(在第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
      2. 升级到Apache 2.4
      3. 启用mod:sudo a2enmod proxy_fcgi
      4. 使用以下内容创建/etc/apache2/conf-enabled/your_site.conf
      5. 重启Apache:sudo apache2ctl restart
  10. 现在,您可以访问http://localhost/your_site

  11. 上的网络应用
  12. 以下基准测试结果
  13. 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

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