说明:Java如何作为Web应用程序工作?

时间:2012-03-13 15:56:01

标签: java web-applications

好的,我知道这是一个模糊的问题,我期待一个模糊/基本的答案。

我精通PHP驱动的MVC框架以及提供页面的过程如何工作。我对学习Java很感兴趣,我认为学习它的唯一方法就是学习它。但是,在逐页阅读之后,当我阅读时,它会变得更加混乱。

我正在进入GWT(前端),Hibernate(ORM连接?),Spring Architecture,Spring Roo(这是什么?),JBoss(servelet),JPA(ORM),POJO(一种常规使用方式)与orm的java对象?),Maven?

我的基本问题是所有这些如何组合在一起?我喜欢使用框架的想法,因为它过去在PHP中运行良好。如何在java中使用此功能?假设我想构建一个带有关系数据存储的Web应用程序。 java如何通过动态内容进行身份验证,启动会话和提供页面?这个过程是什么?

在回复时,请不要说“坚持你所知道的”(正如我在其他页面上看到的那样),因为我对java很感兴趣而且我正在努力学习。

9 个答案:

答案 0 :(得分:7)

我完全听到你的声音 - 随着Java EE的发展,已经支持了太多的缩写词。

我会尝试解释 Java是语言 Java EE(Java Enterprise Edition)是用于封装有助于使用Java创建企业/ Web应用程序的所有Java技术的通用术语

因此,使用Java的典型Web应用程序如下所示:

前端

  • 使用JSP或JSF进行服务器端处理和呈现(JSP和JSF 提供使用HTML和服务器端标签定义UI的功能 与Java Bean轻松绑定)但是他们确实倾向于将UI与 后端如果没有正确实施
  • 您还可以使用纯HTML和任何客户端工具包进行渲染(例如jquery,dojo,extjs或flex)并获取数据 来自Java EE服务器。
  • 你甚至可以将两者混合在一起(在JSP中使用客户端框架以实现两者的最佳效果)或者使用像GWT这样的工具包,它通过javascript和Java API提供客户端丰富性,并且易于访问java bean

中间层

  • Java Servlets为使用Java EE的所有服务器端处理提供了基础(Servlet提供会话持久性,HTTP请求处理,响应处理),并且通常将业务处理卸载到模型bean(可以是POJO或spring bean)。 Servlet是您编写的Java程序,在所谓的Java EE容器中执行。流行的容器是tomcat,IBM websphere,BEA Weblogic

为了帮助实现一个好的MVC架构,在Servlet之上提供了几个框架和工具:

  • Struts2和Spring MVC就是这种框架的例子
  • 为了方便实现Web服务,Restlet / Jersey帮助使用基于REST的Web服务,JAX-WS / APache Axis帮助使用基于SOAP的Web服务

与后端数据库/持久存储

的集成
  • 您可以在POJO或其他模型bean中使用JDBC来使用Java访问数据库。
  • 或者使用其中一个框架(如Hibernate),以便轻松与DB后端进行交互

Sun的petstore应用程序是一个开始学习如何组合在一起的好地方

http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eedocs-419425.html#7522-petstore-1.1.2-oth-JPR

构建和部署

  • Ant和Maven是用于构建应用程序和管理依赖关系的工具
  • 应用程序打包为WAR或EAR文件,可以放入任何Java EE容器中进行部署。部署后,可以使用URL
  • 访问它
  • Eclipse,Netbeans,Oracle JDeveloper等工具提供集成的IDE,以帮助进行本地部署和测试

Java EE的优点在于您可以选择要用于构建Web应用程序的组件。

答案 1 :(得分:5)

Java存在的问题是它相当陈旧,并且有很多框架和包与其他包做类似的事情。然而,最核心的是Servlet,它指定了Java如何通过HTTP协议作为服务器。

使用这个基本构建块,有很多Web框架,如Struts和Spring MVC,它们通过使用许多优秀的OO开发模式(如Fiters,Delegates,Factories,MVC等)来构建功能层,以允许开发人员将一个将Web请求作为输入并将Web响应作为输出返回的应用程序组合在一起。

这些框架通常构建在其他框架或包之上,以便为应用程序开发人员提供应用程序不同层的更多功能。这包括像ORM(如Hibernate)与关系数据库交谈,或者查看合成框架(如Tiles或Velocity)以帮助将HTML页面组合在一起作为响应的一部分。

围绕Web框架构建了许多其他首字母缩略词,工具和层,但实际上它们都只是编程工具,具有预先构建的有用功能,只需要使用。

如果您正在寻找一个更具有凝聚力且不会让您感到迷失的更加打包的Web应用程序开发框架,您可能需要查看Grails。它位于Groovy,但它在语言方面与Java非常接近,并且实际上构建在您听过的许多其他工具之上。

Grails本身建立在SpringSpring MVC框架以及Hibernate之上,因此它使用与其他更纯粹的Java框架相同的技术,但它将丑陋的细节抽象化所以除非你愿意,否则你不必担心它们。然后,您可以通过plugins捆绑其他功能,例如身份验证/安全性。如果您精通基于PHP的MVC框架以及它们如何从架构的角度工作,那么您将感受到像Grails或Spring MVC这样的类似MVC环境中的家。 Grails User Guidestart的好地方,documentation的其余部分也很好。

如果您是Java语言的新手,我强烈建议您使用一些小应用程序(不是Web应用程序,只需简单的应用程序)来学习该语言并熟悉其工作原理。 Java与PHP非常不同,因为PHP将许多基本功能捆绑到语言中,而Java有一种相当稀疏的语言,其中大部分常用功能来自库。

一旦你掌握了Java语言,我就会跳到Grails框架,我会首先跳过servlet,ORM和Hibernate等所有细节,因为你不需要要知道这一切,那里有太多可以妨碍实际理解事物。

然后,当您开始使用Grails构建应用程序时,您将逐渐深入了解Grails构建的技术,以便执行更复杂和更强大的功能。慢慢地,你将逐步进入Spring和Hibernate并建立对事物如何组合在一起的理解,但你可以更快地做事,因为你没有 知道所有事情从一开始就可以快速使用Grails中的Web应用程序正常工作,特别是在了解响应Web请求的应用程序的MVC架构模式时。

答案 2 :(得分:5)

哇,这不仅是一个开放式的问题,而且可能有页面和页面的答案。我在大约7年前没有框架工作,所以我会尝试指出你的一些起点并比较我的经验(这是过时的,没有框架!)

您需要一个应用程序服务器,就像您的Java Web应用程序的Apache服务器一样,例如Tomcat,Jboss或Glassfish。这些服务器处理服务动态内容。

在服务器之上,您有自己的Web框架,您已经提到过GWT,Spring和Spring Roo。 Spring Roo就像Rails,但在Java中。 GWT全力以赴,并将根据您的Java代码编写您的html / javascript代码。

在Spring中您可以定义要在表单中使用的对象,然后在提交它们时,将传回整个对象,以减少工作量。我记得收到很多$ _POST []东西的日子,我很感激在使用spring时不必这么做。您可以使用Spring Security进行身份验证。

Web框架配置为连接到数据库,然后是数据库抽象ORM,Hibernate。在PHP中,我使用EZSQL进行抽象,它几乎不包含Hibernate所具有的功能。 Hibernate有着陡峭的学习曲线,但值得学习。

对于动态GUI,您可能希望研究JSP,但可能对学习JSF感兴趣。

如果我是你,我会选择一个应用程序服务器,也许是tomcat,然后是一个可以玩的Web框架,我个人会选择Spring。该框架可能具有动态GUI示例,因此您将获取jsp / jsf。然后可能添加ORM和构建工具以从IDE外部构建,例如Maven,Ant或Gradle。

答案 3 :(得分:2)

首先,我建议你从http协议的知识开始,是JSP技术。虽然你可能会使用像JSF2这样的框架,但重要的是从JSP开始,以便很好地理解技术以及如何使用它来处理请求/响应(当然这是我的拙见)。

熟悉JSP之后,比如JSF 2.0(您可以在该主题上找到大量文档),下一步就是尝试连接数据源。在Java EE技术中,有一个名为JPA(Java Persistence API)的规范。 JPA只是ORM的规范(粗略地说,将对象java模型与一组DB表映射)

让您的Web应用程序使用某些基本页面和数据库上的某些操作后,您可以强制实施应用程序的安全性,从而引入一些安全机制。

this是所有这些主题的非常好的参考和起点,等等。这是一条漫长的道路,需要一些时间。但是,相信我,这是值得的!

祝你好运!

答案 4 :(得分:2)

有一些非常成熟的java库,每个库都针对Web应用程序中的一个非常小的需求。这意味着有关该主题的许多教程必须为每个需求挑选和选择库。对于刚刚离开你职位的人来说,这可能很糟糕。

然后,我搜索了“java full stack framework”并找到了:Full stack framework for Java

完整堆栈框架的好处是您不必选择每个组件。该框架对ORM如何完成,如何进行模板化,如何将URL映射到函数或操作等方面提出了强烈的(可能是僵硬的)意见。

关于技术和首字母缩略词的列表:

GWT - 谷歌的一个框架,专注于前端。说得不好,用Java编写你的前端功能,让它神奇地转换成javascript。

Hibernate(ORM连接?) - 是的,在应用程序中存储和加载对象。

Spring体系结构 - Spring非常接近完整的堆栈框架,但它没有那么多关于事物的严格意见。你可以换掉模板引擎,换掉ORM等等。但不是一个糟糕的框架。您可能只想按照Spring上的教程(参见下面的Roo),并使用本教程建议的组件。只要知道你以后可能会发现其他东西填满了特定的利基。

Spring Roo(这是什么?) - Spring Roo采取Spring并变得自以为是(使用我们所说的)。这样可以减少代码,因为它提供了集成各种组件的代码。当你想要改变某些东西时,它仍然具有相当大的灵活性。奖金,它带有一个很好的教程。

JBoss(servelet) - 通常我认为JBoss是一个应用程序容器。由于Java EE规范比简单的CGI要复杂一些 - Web服务器需要设置很多东西(加载类,加载配置文件,连接废话) - JBoss就是这么做的。替代品是Tomcat或Jetty。

JPA(ORM) - 是的,它是各种序列化提供商可能实现的一组通用接口。它可能是一个数据库,也可能是其他东西。但这个想法是你的存储和检索对象的代码看起来是一样的。

POJO(使用带有orm的常规java对象的样式?) - 在上下文中,可能。 “普通的旧Java对象”适用于任何库。有时,框架可能要求您从某个特殊类(如Model或Controller)继承您的类以正常工作(也称为HTTPServlet)。这不好,因为它限制了您自己的类层次结构设计,并使您自己的代码不那么灵活。因此,与POJO一起使用的东西被认为是更好的。

Maven - Maven是一个帮助管理依赖关系的工具。没有它,java有自己的DLL地狱形式。库A依赖于库B的1.1版,但库C依赖于库B的1.5版本。哦,废话,是时候阅读关于类加载器的教程了。不过不用担心,任何关于java web应用程序的教程都可能告诉你你需要下载和使用的内容。

答案 5 :(得分:2)

我建议您点击这些关键字并查找一些书籍和教程。

<强>的Maven 是一个用于管理Java项目和工件(JAR,WAR等)的工具。我首先开始学习Maven,这样你就有了创建Java项目的基础。它还处理您的依赖关系管理:您只需在应用程序中指定所需的JAR,Maven就会为您下载它们。

JPA (Java Persistence API)处理实体的对象关系映射。您可以编写POJO(普通的旧Java对象)并将它们映射到数据库表。

Hibernate 是JPA提供程序(即JPA的实现)。通常你不必那么多处理Hibernate,大多数时候你可以直接使用JPA。您只需在persistence.xml配置文件中配置JPA提供程序。

CDI (上下文和依赖关系注入)请参阅description。 CDI将应用程序的组件“连接”在一起。

Springframework 作为一个提供依赖注入功能的框架而开始,但今天它远不止于此。春天的WebMVC模块对你来说可能很有意思。您可以编写控制器和视图(例如,使用JSP)。

Servlet API servlet就像一个小服务器,处理HTTP请求并生成响应。您可以编写自己的servlet或使用Web框架来完成它的工作,例如Spring的DispatcherServlet或Java Server Faces,或者任何框架。

JSP 是一种为HTML文件编写模板的技术。 JSP文件正在编译为Java类,可以包含HTML代码,特定于JSP的XML代码和Java代码。 例如:

<ul>
    <c:forEach items="${countries}" var="country">
        <li>${country}</li>
    </c:forEach>
</ul>

呈现国家/地区列表,其中${countries}可能是国家/地区对象的集合(在这种情况下为字符串)。

JSF (Java Server Faces)是另一个用于构建Web应用程序的框架,它使用JSP和/或XHTML来定义后端部分的视图和后台bean。我会开始学习JSP而不是JSF,它更容易学习。

大多数框架都是JavaEE标准组合的一部分。对于像CDI这样的东西,你需要一个应用服务器(比如JBoss AS)或至少一个带有servlet容器的服务器(比如Apache Tomcat或Jetty)和Spring。

Spring和Hibernate不是标准的,但它们现在实现了许多标准API。

**编辑:**您可能还想了解Java代码中的注释。它们自Java 5以来就存在,并且被广泛用作基于XML的配置的替代方案。


所以我的建议是你开始学习Maven(不是必需的,你也可以手动管理你的项目),然后Spring和JSP能够创建一个简单的Web应用程序然后JPA / Hibernate来使你的数据持久化。

在我看来,学习Spring比学习整个JavaEE API要容易得多,因为Spring非常好documented

答案 6 :(得分:1)

关于GWT的一个好处是,你可以用Java获得客户端代码,它具有所有好处,如果你有服务器代码,那么也可以使用Java,你可以分享一些源代码,即使前端最终以JavaScript运行。

答案 7 :(得分:1)

要构建一个基本的Java Web应用程序,请阅读本教程,因为它将使用标准Java EE平台解释核心基础技术,以及如何使用它们开发真实的东西。

http://netbeans.org/kb/docs/javaee/ecommerce/intro.html

它将演示标准的Java Web技术,例如EJB,Servlet,JSP,JPA,以及如何将IDE用于Netbeans。

大多数初学者都被Java EE框架中的数千种不同技术和平台所淹没。 Java迎合了一种非常“开源”的社区类型,这意味着您有很多不同的选择和路线图,可以构建应用程序。这与.NET世界非常不同,在这里,一切都非常简单,并且有一个非常干净的cookie切割路径。

通过本教程学习了这些基础知识后,您将掌握Java EE框架的内容。一旦您了解了这些基础知识,您就可以开始了解Maven或Spring以及这些类型的技术如何帮助您构建更好的应用程序,并且您可以做出更好,更有教育的决策。

GWT - Web界面工具。一些竞争技术:Spring,JSF,Wicket

Hibernate - 数据库的ORM映射。竞争技术:JPA

Spring Architecture - Web框架。竞争技术:JSF,Wicket,GWT

Spring Roo - Spring的MVC风格。

JBoss - 应用程序托管。竞争技术:Glassfish,Tomcat

JPA - 数据库的ORM映射。竞争技术:Hibernate

POJO - 普通的旧java对象。只是一个简单的对象。

Maven - Maven是一种管理项目使用的库或依赖项的方法。有一个中央服务器托管其中许多库,如果您需要导入一个新的库以供项目使用,它就像搜索服务器一样简单,然后将他们提供给您的配置设置复制并粘贴到XML文档中称为POM文件或pom.xml

答案 8 :(得分:1)

维杰上面的答案非常明显。我将详细阐述几点。

你提到的大多数“fameworks”,spring,roo(这只是一种使用spring的方式),gwt,struts等都在“Java EE”之上工作。 Java EE是Sun(现在是oracle)的术语,用于处理Web应用程序的“标准”方式。 Java EE还包括许多企业内容,如EJB,JMS,JMX,除非你做的很高端,否则你不需要关心自己。

JSP是来自PHP最熟悉的部分,它是一种在HTML页面中嵌入代码的方法。

Servlet是中间层,即创建数据库连接和应用程序逻辑的地方。事实证明,JSP在编译时被转换为Servlet。

所有Java EE内容都在“servlet容器”或“应用程序服务器”中运行。这是java和php之间的最大区别。你在这里的选择通常是Tomcat,JBoss或Jetty。

Maven是一个构建系统,可以帮助您管理第三方jar文件(库)并编译和运行您的测试代码。它有插件将您的代码部署到tomcat / jboss / jetty。

POJO代表“普通的旧java对象”。大多数现代框架试图保护您免受引擎盖下发生的事情的复杂性,让您使用“POJOS”。当使用像spring或hibernate这样的东西时,这就起到了作用。您可能还会看到“java bean”这个术语被抛出,这是定义“pojos”的标准方法,它只是建立了一个关于如何命名getter / setter方法和构造函数的约定。

我建议你找一本关于JSPs / Servlets入门的书,然后从那里开始。