Liferay研究之二:引入Spring

[Liferay] 在 Liferay 使用 SpringMVC 的 @ResourceMapping 之前一篇介绍过 Portlet 的 Resource Serving 生命周期的概念以及使用方法, 因为使用不同的 MVC 框架,框架代码结构以及对 portlet 各个生命周期的调用方法都不一样, 之前的项目都是用 Liferay 自己的 Liferay MVC,这是个非常轻量级的 MVC 框架,有兴趣的可以研究下, 当然使用 Liferay SDK 开发 portlet 时可以选择 阅读详情

首先Suppose你已经搭建好了ext环境。

1、在Ext/ext-web/docroot/WEB-INF/web.xml中引入spring

   < display-name > Spring Portal </ display-name >
  
< description > Spring Portlet sample application </ description >
  
<!--
    - Location of the XML file that defines the root application context.
    - Applied by ContextLoaderServlet.
    
-->
  
< context-param >
 
< param-name > contextConfigLocation </ param-name >
 
< param-value > /WEB-INF/context/applicationContext.xml </ param-value >
  
</ context-param >  
  
< listener >
 
< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
  
</ listener >
  
< servlet >
     
< servlet-name > view-servlet </ servlet-name >
     
< servlet-class > org.springframework.web.servlet.ViewRendererServlet </ servlet-class >
     
< load-on-startup > 1 </ load-on-startup >
  
</ servlet >
  
< servlet-mapping >
     
< servlet-name > view-servlet </ servlet-name >
     
< url-pattern > /WEB-INF/servlet/view </ url-pattern >
  
</ servlet-mapping >  

 


2、在/WEB-INF/下建立一个目录(当然也可以不建)context,并在其下建立一个文件applicationContext.xml,配置spring的缺省行为,如下所示:

<!--  Default View Resolver  -->
< bean  id ="viewResolver"  class ="org.springframework.web.servlet.view.InternalResourceViewResolver" >
 
< property  name ="viewClass"  value ="org.springframework.web.servlet.view.JstlView" />
 
< property  name ="prefix"  value ="/WEB-INF/jsp/" />
 
< property  name ="suffix"  value =".jsp" />
</ bean >

<!--  This interceptor forwards the mapping request parameter from an ActionRequest to be used as a render parameter.  -->
< bean  id ="parameterMappingInterceptor"  class ="org.springframework.web.portlet.handler.ParameterMappingInterceptor" />

<!--  Abstract Default ExceptionHandler  -->
< bean  id ="defaultExceptionHandlerTemplate"  class ="org.springframework.web.portlet.handler.SimpleMappingExceptionResolver"  abstract ="true" >
 
< property  name ="defaultErrorView"  value ="error" />
 
< property  name ="exceptionMappings" >
  
< props >
   
< prop  key ="javax.portlet.PortletSecurityException" > unauthorized </ prop >
   
< prop  key ="javax.portlet.UnavailableException" > unavailable </ prop >
  
</ props >
 
</ property >   
</ bean >


3、编写一个Spring Portlet。 在ext-impl/新建一个Class,目录自选,命名为HelloWorldPortlet, 该类继承于GenericPortlet。

public   class  HelloWorldPortlet  extends  GenericPortlet  {

    
public void doView(RenderRequest request, RenderResponse response)
     
throws PortletException, IOException {
        System.out.println(
"Entering HelloWorldPortlet.doView");
        response.setContentType(
"text/html");
        PrintWriter out 
= response.getWriter();
        out.println(
"<h1>Hello World</h1>");
        out.println(
"<p>This portlet demonstrates how to delegate to "+
                
"an existing JSR-168 portlet via a HandlerAdapter</p>");
        out.println(
"<p>Portlet Name: " + this.getPortletName() + "</p>");
        out.println(
"<p>Init Parameters:</p><ul>");
        
for (Enumeration e = this.getInitParameterNames(); e.hasMoreElements();) {
            String name 
= (String)e.nextElement();
            out.println(
"<li>" + name + " = " + this.getInitParameter(name) + "</li>");
        }

        out.println(
"</ul>");
    }


}



4、编写HelloWorldPortlet对应的Spring bean配置。在context目录下建立一个helloworld.xml,并配置其内容如下:

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >

< beans >
 
< bean  id ="helloWorldPortlet"  class ="org.springframework.web.portlet.mvc.PortletWrappingController" >
  
< property  name ="portletClass" >
   
< value > com.ext.portlet.helloworld.HelloWorldPortlet </ value >
  
</ property >
  
< property  name ="useSharedPortletConfig" >
   
< value > false </ value >
  
</ property >
  
< property  name ="portletName" >
   
< value > wrapped-hello-world </ value >
  
</ property >
  
< property  name ="initParameters" >
   
< props >
    
< prop  key ="HarryPotter" > The magic property </ prop >
    
< prop  key ="JerrySeinfeld" > The funny property </ prop >
   
</ props >
  
</ property >
 
</ bean >
 
 
<!--  Handler Mapping  -->
 
 
< bean  id ="portletModeHandlerMapping"  class ="org.springframework.web.portlet.handler.PortletModeHandlerMapping" >
  
< property  name ="portletModeMap" >
   
< map >
    
< entry  key ="view" >< ref  bean ="helloWorldPortlet" /></ entry >
   
</ map >
  
</ property >
 
</ bean >  

 
<!--  Exceptions Handler  -->

 
< bean  id ="defaultExceptionHandler"  parent ="defaultExceptionHandlerTemplate" />  
</ beans >


注意,此处需要配置一个缺省的handler.
5、至此,一个Spring Portlet就开发好了,剩下的,就是需要将其配置成为一个Liferay的Portlet,具体步骤如下:

6、先在portlet-ext.xml中定义Portlet:

< portlet >
    
< portlet-name > helloworld </ portlet-name >
    
< portlet-class > org.springframework.web.portlet.DispatcherPortlet </ portlet-class >
    
< init-param >
 
< name > contextConfigLocation </ name >
 
< value > /WEB-INF/context/helloworld.xml </ value >
    
</ init-param >
    
< supports >
        
< mime-type > text/html </ mime-type >
        
< portlet-mode > view </ portlet-mode >
    
</ supports >
    
< portlet-info >
        
< title > Hello World </ title >
    
</ portlet-info >       
</ portlet >

注意,上面加粗部分显示了liferay如何将spring bean定义配置文件导入的。有一些文章介绍需要在portal-ext.properties中配置,可能是版本升级了,在我测试过程中,没有用那种方式。


7、然后在将其定义给Liferay,在liferay-portlet-ext.xml中定义:
<portlet>
 <portlet-name>helloworld</portlet-name>
</portlet>   


8、将其显示到Add Content列表中。 在liferay-display.xml中定义:
<category name="category.sample">
 <portlet id="helloworld" />
</category>


至此,Spring Portlet开发完成。最后,还需要将spring-portlet.jar拷贝到classpath中。OK, ant deploy→login→add content→sample.helloworld。
打完,收工! 

 原文: http://blog.youkuaiyun.com/smilingleo/archive/2007/10/31/1859922.aspx
全面Liferay学习资料与应用指南 本文还有配套的精品资源,点击获取 简介:Liferay是一个功能全面的企业级开源门户平台,支持从安装部署、波特开发、主题定制到工作流管理等多方面的学习。本资料详细介绍了Liferay的基础概念、架构设计、以及如何进行定制化开发和安全管理。通过本资料的学习,开发者将能够熟练使用Liferay构建和维护企业级Web应用程序和服务。 1. Liferay基础概念和特性 ... 阅读详情

相关推荐

Liferay配置二次开发环境——Eclipse

jikes.exe的压缩包。 博文链接:https://kt8668.iteye.com/blog/133224

Liferay研究之廿六:5.1更新分析

1、Portlet Container Implement.Add sun container implement for furture. JSR268? 2、ThemeAdd a shortcut icon for a theme。A flag to decorate portlets by default. 3、Springremove active-mq from spri

smilingleo的专栏 1251

liferay + struts2 + spring + ibatis整合开发案例

liferay + struts2 + spring + ibatis整合开发案例,可以正常运行,供大家参考和学习

liferay spring mvc的实现

1 首先推荐一本liferay的书    Portlet  In Action,   本例是按照这本书进行配置的,原文在 Getting started with Spring Portlet MVC中进行了介绍,原理里面讲解的很清楚 2 首先需要导入的包 3 我项目存在一个插件类型为 Protlet的名称为MyFirstPortlet的portlet 工程

jianfpeng241241的专栏 1584

liferay门户调用webservice依赖jar包

这个版本会有变化。需要版本对应 如果版本不对,还需自己下载相对版本

玩转Matlab-Simscape(初级)-01-从一个简单模型开始学习之旅

本文从初学者的角度分享的关于Matlab simscape 的基础内容,简单分享了Simscape搭建模型,创建子系统,修改定义参数等内容,为将来深入学习和使用simscape做铺垫。

万金油笑匠的博客 6517

Liferay研究之廿九:Liferay5.2基础架构变动

前几天Liferay正式发布了5.2, 抽空Down下来研究了一天,感觉还是有不少变化的,很多底层的东西都发生了变化。因为现在重点关注于MDD的研究,所以这次研究重点在基础架构(liferay infrastructure)方面,其他方面略有涉及,简单总结如下:http://www.smilingleo.cn原创,转载请标明出处。一、环境变动将更多的配置内容放到了portal.prop

smilingleo的专栏 5281

ESXI 7 :创建统信V20_1050d服务器系统虚拟机

记录一下在 X86 架构创建统信V20_1050d 虚拟机遇到的问题。已遇到的问题有①:常规服务器环境下网络连接失败重点:按照桌面版本,有问题处理简单。

guyuelin123的博客 1967

Liferay研究之一:Ext环境的搭建

前一阵子因为一直沉浸在刚出生的小东西身上,没有太多功夫来写东西。近来由于项目需要,手下这帮兄弟太累,我只好也亲自上手,帮他们搞搞门户系统,Liferay.随后会有几篇关于Liferay的文章,也是学习Liferay的一个过程记录。本篇主要介绍如何搭建Ext开发环境。网上也有很多介绍,不过这里和别的还是有些不同的。我用的版本是最新的4.3.3。1、在portal源码目录下建立:relea

smilingleo的专栏 5149

【python】geopandas库安装出现各种问题?可以看看这篇文章

geopandas的安装方法

jgsecurity的博客 3887

GATK SNP过滤参数优化:从标准到个性化调整的实践指南

本文深入探讨了GATK SNP过滤参数的个性化调整策略,强调不应盲目套用官方标准参数。文章详细拆解了QD、FS、SOR等关键过滤参数的含义,并提供了通过数据分布分析、文献调研和迭代测试来确定适合自身数据(如动植物重测序)最佳阈值的实践方法,旨在帮助研究者在保留真实变异与剔除假阳性信号之间找到最优平衡。

weixin_29216049的博客 275

Liferay研究-smilingleo

http://blog.youkuaiyun.com/smilingleo/article/details/1859908 Liferay研究之一:Ext环境的搭建 本篇主要介绍如何搭建Ext开发环境。网上也有很多介绍,不过这里和别的还是有些不同的。我用的版本是最新的4.3.3。 1、在portal源码目录下建立:release.Leo.properties,其中Leo是我在Windowx XP中的账号

走马观花 5974

使用W5500与外网通信故障解决(MAC地址问题)

在蒲城项目的调试时,AMS500发现一个致命的问题,就是:在局域网跨网段通信时候和中心服务器不能通信,但是在一个HUB下是没有问题的,以前的串口服务器有过类似的问题出现,解决方法说是芯片的问题,结果也不了了之,换了芯片正常。 我们的网络通信芯片选择W5500,其中的MAC地址采用的是CPU的序列号作为Mac地址的问题就出在这,我们在使用的时候MAC地址的第一个必须是偶数,我们忽视了。 现象描...

zxm8513优快云博客 7755

Liferay研究之廿二:怪异的updateUser(user)方法

今天有网友问到关于Liferay的updateXxxx(entity)方法比较怪异的问题,比如UserPersistanceImpl.update(user, false).光看源码,好像根本就没有执行save or saveOrUpdate或者merge等Hibernate的方法,那又是如何保存的呢?分析了一下,做了一个简单的research,发现还真是很有意思的。http://ww

smilingleo的专栏 2075

手把手教您 Claude 桌面端无需账号订阅,免费接入国产自定义大模型(Claude Desktop 绕过订阅限制,接入任意自定义 AI 模型)

无需官方账号,也能畅玩Claude桌面端!本文详解Claude Desktop如何跳过登入接入自定义大模型,轻松解锁Cowork、Code等强大功能🚀

XiaoqiangClub的博客 5411

QT开发串口程序与单片机通讯

如果有对象对这个信号感兴趣,想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。的内容,虽然实现的功能很简单,但是QT上位机开发的步骤基本就是这些步骤,通过这个基础实例把这些套路摸透我们就可以接着进行后续更多QT程序地开发学习了。QWidget类:所有用户界面对象的基类,窗口部件是用户界面的一个基本单元,它从窗口系统接收鼠标,键盘和其他消息,并在屏幕上绘制自己。我们上面运行的上位机都是在Qt Creator中编译运行的,如果我们需要把编写好的可执行文件发送给别人使用的话还需要进行打包。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 946

Liferay研究之廿九:Liferay5.2基础架构变动收藏

前几天Liferay正式发布了5.2, 抽空Down下来研究了一天,感觉还是有不少变化的,很多底层的东西都发生了变化。因为现在重点关注于MDD的研究,所以这次研究重点在基础架构 (liferay infrastructure)方面,其他方面略有涉及,简单总结如下:http://www.smilingleo.cn原创,转载请标明出处。一、环境变动 * 将更多的配置内容放

yanghw0510的专栏 496

阿里云 Docker 镜像加速收费后:这些免费替代方案值得收藏

阿里云Docker镜像加速服务收费后,国内开发者急需免费替代方案。本文推荐2025年仍可用的7个免费镜像源,包括轩辕镜像、DaoCloud、网易云等,并提供多源配置方案以提高稳定性。建议开发者在CI/CD环境中配置多个镜像源,避免构建失败。文章还提供了详细的配置步骤和使用建议,适合个人和团队开发者参考。

sg_knight的专栏 1928

Liferay研究(一):初步在新Tomcat下部署

Liferay研究(一):初步在新Tomcat下部署 从现在开始,会把我最近在研究的开源Portal Liferay一些心得贴出来。研究Liferay版本:Liferay Professional 4.0.0 柯自聪兄弟写过一系列的Liferay Portal开发文章,参考http://www.blogjava.net/eamoi/。所以基础性内容,本文不再细说,可参考柯自聪的文章或Blog。 (

sumongh我们在一起 1719

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

实例讲解liferay的portlet开发,spring+hibernate(with db)

  最近公司想将产品方向转向Liferay,做了两个星期的Liferay研究,写点经验和成果和大家分享下。   一,认识   学习一个新的东西,往往都不知如何入手,除非这个东西像橘子一样,扒开皮就知道是可以吃的。Liferay确实对开发者来说还是算友好的!从6.0开始提供可eclipse可视化的插件之后就更加的友好,开发一个portlet或者一个hook都只需点点鼠标即可完成,这在官方w...

网逸人耕地 280

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Liferay研究之卅一:Database Sharding(数据库分片)

Database Sharding是什么? 其实就是一种分布式计算,通过业务逻辑将不同的分类的数据保存到不同的数据库(具有相同的表结构)中。简单的说是一种负载均衡技术,因为每个表中的数据少了,查询速度就快了,系统能承受的负载也就大了。很多大公司都在用这种技术,比如Google, Facebook, Wikipedia等等。 Liferay的实现策略是什么?Liferay实现的是

smilingleo的专栏 6020

Liferay Portal评估报告

Liferay Portal评估报告Portal    这里所说的Portal是指JCP-JSR168规范所描述的:Portal是一个基于Web的应用,通常它提供个性化、单点登录、内容集成和显示等功能。Portal技术包括三个方面:1)  Portal服务器(Portal Server);2)  Portlet容器;(Portlet Container)3)  Portlet。

二七老泉 3875

liferay portal研究分析

  看liferay portal相关的文档也有近2个礼拜了,感觉这是一个java技术的集合体。目前主要看的是pro版的,基础框架有struts、spring、jsr-168、tiles、tomcat服务器、js、webservices等等...虽说这些东西以前都接触过,但都仅仅停留在使用的角度上,没有深入的研究其原理,工作量看来还是很大。经验不足,看来是需要恶补一段时间了。   因最终的目标是将...

lgl8826的专栏 239

1.Liferay新手如何入门

公司开始做CMS,跟随新技术,找了Liferay 5.2.3 来做二次开发。 都是跟着前辈的脚步,自己想着创新…… http://liaojunyong.spaces.live.com/blog/cns!8485F0C14B3152CD!239.trak(引用博文)  一、Liferay能做什么相信第一次看到Liferay的朋友,被其吸引的基本上是其对页面的定制能力

wgy2750的专栏 5305
上一篇: JVM启动参数
下一篇: 事务的特性(简称ACID)
m_yeah
博客等级 码龄19年 17粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值