LIFERAY作为一个发展平台

谷歌翻译来源


如果您一直在阅读所有内容,那么您已经了解了Liferay Portal的架构,模块化和技术。剩下的就是告诉你如何使用Liferay的平台作为你的网站的基础,通过自定义或开发应用程序。该平台旨在使这个简单而愉快,并与开发人员每天使用的工具集成。


但是,你可能不会对这个问题感兴趣。继续阅读以了解详细信息。


WEB应用程序和PORTLETS
作为一个开发平台,Liferay通过在单个页面上容易地拥有多个应用程序,为管理员和开发人员提供了灵活性。以这种方式编写的应用程序被称为portlet,并且是Liferay平台的中流砥柱。您可以使用Liferay的MVC Portlet框架或Spring MVC或JSF等通用框架编写Portlet。如果您打算为您的应用程序提供基于Web的界面,并且希望其管理员能够灵活地配置它,Portlet提供了非常强大的模型。在这个模型中,您可以创建多个portlet而不是更大的应用程序,并让管理员选择如何将其与其他预先存在的portlet结合到一个更大的界面中。


这并不是说你没有别的选择。由于Liferay将其业务逻辑从它的UI(在单独的模块中提供)中解耦,您可以自由地在任何其他技术中实现UI。


因此,您可以使用Liferay作为无头平台,因为可以很容易地创建基于Service Builder,JAX-RS和JAX-WS的Web服务。然后,您可以使用任何您喜欢的前端技术或移动技术来构建独立的Web应用程序。


可扩展性
正如你所想象的那样,上面介绍的系统包含了所有必要的工具,使得设计良好的系统不仅允许开发人员创建基于模块的应用程序,而且还扩展了系统的现有功能。 Liferay现在可以从中受益,因为它所依赖的平台是为了应用程序开发和定制而设计的。


组件使开发扩展和自定义方便。如果您将此模型与其他未定制设计的产品进行比较,您将会看到它的便利性。


要定制一个现有的服务,唯一需要做的就是部署一个扩展现有实现的组件。如果你想删除你的实现并恢复到默认的行为,你只需解除部署你的组件。


与传统的定制软件的方式相比,下载源代码并维护一组补丁。每次软件更新时,您都必须重新下载源代码,重新应用您的修补程序,然后重新编译软件。


使用Liferay,您的自定义代码保存在您自己的模块中,容器根据您提供的元数据来处理这些模块。


开发者工具
如上所述,Liferay的OSGi容器为您提供了以下好处:


容器可以启动和停止组件。
一个组件实现了一个OSGi服务。
组件可以使用或使用OSGi服务。
框架管理组件消耗的服务的绑定(就像Spring或EJB一样,但动态地)。
如果所有这些对你来说听起来都很棒(就像我们这样做),剩下的只有一件事了:你怎么开始开发组件?我们相信为新开发人员提供了一个简单的途径,同时为具有强大工具偏好的经验丰富的开发人员保留了灵活性。为此,Liferay提供了一些很好的工具,如果你是一个有经验的开发人员,这些工具也将融入你可能已经使用的东西。如果您使用任何标准构建工具(如Gradle或Maven),任何文本编辑器或常用Java IDE(如Eclipse,intelliJ或NetBeans)或任何测试框架(如Spock或JUnit),则可以将它们与Liferay一起用于开发组件。


Liferay的工具增加了一些重要的增强功能:


Blade CLI通过从模板创建基于Gradle的Liferay项目来提高您的速度。
Liferay Workspace是基于Gradle的自定义SDK,它使用Blade CLI将您的项目和运行时间集成到一个方便,可分发和可共享的地方。
Liferay IDE是一个基于Eclipse的开发环境,它将Blade CLI和Liferay Workspace的所有便利功能集成到一个最好的图形环境中,并带有您期望的所有功能。
Liferay Developer Studio提供Liferay IDE提供的所有功能,以及企业开发人员需要的其他工具。
Liferay Service Builder通过从单个XML文件生成所有数据库表,本地服务和Web服务,帮助您更快地创建后端。
您可以选择使用或忽略Liferay的工具。关键是你有这样的自由,因为Liferay提供了一个开放的开发框架,旨在满足你在哪里。我们憎恨专有锁定,因为我们的工具旨在补充您已经使用的工具,而不是替换它们。


除了构建工具和IDE之外,还将使用构建应用程序的框架。 Liferay的开发框架包括许多功能(评论,社交关系,用户管理等等),以加速应用程序的开发。它们帮助您从经过良好测试的现代可扩展可换肤构建块构建应用程序。您不仅可以获得一个功能强大的应用程序,而且还可以花费较少的时间开发,看起来您想要的方式,并且表现良好。这并不意味着你只限于Liferay所提供的内容。再次,如果您喜欢,您可以使用第三方框架。


为了开发portlet,Liferay提供了一个方便易用的MVCPortlet框架,使编写Portlet变得简单,但开发人员可以自由使用Spring MVC等其他框架来创建Portlet。 MVCPortlet使用组件来处理请求,受益于上述所有特性(生命周期,可扩展性,易于组合等)。如果您对使用哪个框架没有强烈的意见,我们建议您尝试一下。


Liferay还包含一个名为Service Builder的实用程序,可以轻松创建后端数据库表,使用Java访问它们的对象关系图以及放置业务逻辑的地方。它还可以生成JSON或SOAP Web服务,为开发人员提供了一个完整的堆栈,用于使用Web或移动客户端存储和检索数据。但是,这并不妨碍您使用Java持久性(JPA)和生成JAX-WS Web服务。


除了工具之外,Liferay还提供了许多可重用的框架。


框架和APIS
Liferay的开发平台为应用程序开发提供了一个很好的框架,并提供了API。其中很多。可以通过利用Liferay的许多框架来创建应用程序,这些框架封装了当今应用程序通常需要的功能。例如,评论系统允许开发人员对他们定义的任何资产附加评论,不管他们是开发的资产还是系统随附的资产。资产由系统共享,用于表示许多常见元素,例如用户,组织,站点,用户组,博客条目,甚至文件夹和文件。

Liferay还包括许多用于资产运营的框架。工作流程系统可以轻松创建需要审批流程的应用程序,供用户遵循。回收站在指定的时间段内存储已删除的资产,使用户无需管理员干预即可轻松恢复数据。具有多个可用后端的文件存储API使存储和共享文件变得微不足道。搜索也是内置于系统中的,它是为开发人员将其与应用程序集成而设计的。开发复杂应用程序时可能需要的许多框架已经存在;您只需要利用它们:社交网络API,带有数据列表的用户生成表单,消息总线,审计系统等等。


例如寿命项目
足够的理论。是时候练习了。在Liferay的平台上获得开发的一个好方法是向你展示一些项目。首先,您将看到一个使用MVCPortlet开发的portlet,展示组件的使用。一旦你看到了,下一个最好的事情就是看到一个扩展。这两个例子都是为了向您展示在模块化范例之后构建功能是多么容易。


很高兴向您展示标准的Hello World项目,Liferay风格,但这太容易了:Blade或Liferay IDE创建的默认模板已经在默认情况下实现了。相反,您将看到Hello You portlet。除了将用户的名字添加到消息之外,它和Hello World一样。如果你的名字是John,那么John会回来。


以下是项目布局的样子:


Hello You portlet有一个简单的项目结构。


在Liferay的Blade CLI工具生成这个项目之后,没有新的文件被创建,所以这个过程很简单。 你有你的portlet类,这是在.java文件中。 您也有两种不同的资源:语言属性和JSP文件。 最后,bnd.bnd文件描述了OSGi容器的应用程序元数据,build.gradle文件构建了该项目。


任何熟悉Java的Web开发人员都可以理解JSP,但是由于风格的原因,有些解释是有序的。 Liferay的编码风格定义了一个init.jsp,其中包含前端所需的所有导入和标记库初始化。 这样,任何JSP都可以简单地包含init.jsp,并且所有的导入都是满足的。 该项目的init.jsp没有从生成的项目中修改,它看起来像这样:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/portlet\_2\_0" prefix="portlet" %>

<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>

<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>

<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>

<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>

<liferay-theme:defineObjects />

<portlet:defineObjects />
正如你所看到的,它所做的只是声明你可能想要使用的标签库,然后调用一些标签,使portlet框架中的对象可用。 由于这里没有什么真正有趣的地方,所以下一步你需要查看view.jsp:
<%@ include file="/init.jsp" %>

<jsp:useBean id="userName" type="java.lang.String" scope="request" />

<p>

    <b>Hello, <%=userName %>!</b>

</p>

现在我们有了一些东西。 portlet类(MVC术语中的Controller)在请求中提供了一个userName字符串,并且这个JSP检索并用它向用户打招呼。 因此,真正的功能在portlet类中:

@Component(
    immediate = true,
    property = {
        "com.liferay.portlet.display-category=category.sample",
        "com.liferay.portlet.instanceable=true",
        "javax.portlet.display-name=hello-you Portlet",
        "javax.portlet.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/view.jsp",
        "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user"
    },
    service = Portlet.class
)
public class HelloYouPortlet extends MVCPortlet {

    @Override
    public void render(RenderRequest renderRequest, 
                    RenderResponse renderResponse)
            throws IOException, PortletException
    {
        ThemeDisplay themeDisplay = (ThemeDisplay)
                    renderRequest.getAttribute(WebKeys.THEME\_DISPLAY);

        User user = themeDisplay.getUser();

        renderRequest.setAttribute("userName", 
                    user.getFirstName());



        super.render(renderRequest, renderResponse);
    }

}

现在我们在谈论这是真正的东西。最上面是@Component注解,它告诉OSGi容器如何处理这个模块。通过指定immediate = true,你就是说当这个模块被部署并且所有的依赖都满足时,它应该被立即启动,而不是被延迟加载。接下来是几个特定于portlet的属性:Liferay的用户界面中应该出现的类别,显示名称,默认视图等等。最后,定义了它所实现的服务(它只是一个Java接口),它是portlet类。


接下来,您将拥有该类本身,它扩展了Liferay的MVCPortlet类(扩展了实现Portlet的GenericPortlet)。唯一重写的方法是render()方法,Liferay的API用于获取用户的名字并将其放入名为userName的请求属性中。


所以你可以看到这是如何工作的:portlet运行并检索用户的名字,将其放入请求中,然后通过使用@Component注释中指定的模板路径和视图模板属性,将处理转发到view.jsp ,其中用户的名字被检索并显示。


唯一感兴趣的其他项目是bnd.bnd文件:

Bundle-SymbolicName: com.liferay.docs.hello.you
Bundle-Version: 1.0.0

这声明了模块的名称(有时也称为一个包)。 命名空间是一个很好的习惯,以避免容器中的名称冲突。 该版本也被声明,允许容器管理依赖到模块的版本级别。 这就是所谓的语义版本化,本身就是一个讨论。


这就是这个portlet。 接下来,您将看到一个扩展,在许多情况下甚至比portlet更简单。


Liferay的用户界面分为几个区域。 有控制菜单和产品菜单,其中包含添加菜单和模拟菜单。 如果要扩展UI,可以通过部署添加所需内容的模块来实现。 在这个例子中,您将添加一个链接到产品菜单,这是菜单默认位于浏览器的右上角:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值