我正在尝试开始我希望在Java中使用相对快速的Web应用程序,但我尝试过的大多数框架(Apache Wicket,Liftweb)需要如此多的设置,配置,并且试图用我的头围绕Maven,同时让整个事情与Eclipse玩得很好,我花了整个周末才试图达到我编写第一行代码的程度!
有人可以推荐一个简单的Java webapp框架,它不涉及Maven,可怕的复杂目录结构,或者必须手动编辑的无数XML文件吗?
答案 0 :(得分:50)
我自己没试过,但我想
有很多潜力...
来自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/Installation和http://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真的很有效率 - 更改代码并立即查看结果。
答案 10 :(得分:5)
Stripes Framework是一个很好的框架。涉及的唯一配置是在web.xml中粘贴几行。
这是一个非常直接的基于请求的Java Web框架。
答案 11 :(得分:4)
我喜欢编写普通的旧servlet + winstone servlet容器。从那里开始,我将模板化(速度,XSLT等)和数据库访问(休眠,扭矩等)库作为我需要它们而不是用于实际框架。
答案 12 :(得分:3)
我真的没有看到让maven + eclipse工作有什么大不了的,只要你不必过多地更改pom.xml:)
用户maven的大多数框架都有可以生成存根项目的maven原型。
所以基本上步骤应该是:
至于Wicket,没有理由不在没有maven的情况下使用它。关于maven的好处是它可以处理所有依赖项,因此您不必这样做。另一方面,如果你想要做的唯一事情就是对几页进行原型设计而不是Wicket可能会有点过分。但是,如果您的应用程序增长,最终,Wicket的好处将继续显示每个添加的表单,链接或页面:)
答案 13 :(得分:3)
它就像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工具让自己变得简单易行。关于它的一些观点:
答案 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)
答案 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)
答案 31 :(得分:0)
试试这个:http://skingston.com/SKWeb
它可以使用更多功能和改进,但它很简单并且有效。
答案 32 :(得分:0)
Java Web-apps的一个共同特性是它们通常使用servlet,这通常意味着Web服务器也运行Java。这有助于感知复杂性,恕我直言。但是你可以用传统的Unix风格构建Java应用程序“做一件事,做得好”而不会让性能受损。
您也可以使用SCGI,它比FastCGI简单得多。我先尝试一下。但如果它没有成功:
wget --quiet --recursive --no-parent --accept=java --no-directories --no-host-directories "http://www.fastcgi.com/devkit/java/"
mkdir -p com/fastcgi
mv *.java com/fastcgi
现在您需要将一个小补丁应用于devkit(在第175行用==
替换运算符<=
或使用此脚本执行此操作):
echo -e "175c\nif (count <= 0) {\n.\nw\nn\nq" | ed -s com/fastcgi/FCGIInputStream.java
TinyFCGI.java
(来源如下)javac **/*.java
(**
可能仅适用于zsh
)java -DFCGI_PORT=9884 TinyFCGI
(让它在后台运行)现在设置为Apache使用服务器:
mod_proxy_fcgi
:
sudo a2enmod proxy_fcgi
/etc/apache2/conf-enabled/your_site.conf
sudo apache2ctl restart
现在,您可以访问http://localhost/your_site
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