在Liferay Server中设置一个简单的servlet

时间:2016-09-29 07:35:59

标签: java tomcat servlets liferay

我在Tomcat服务器上安装了Liferay 6服务器。

事情是,我正在编辑我的一个公共页面(欢迎版),因此从管理控制台读取JavaScript。它只是将脚本放在页面的末尾,无论你想要什么。这很好用,我可以在页面的角落看一个弹出窗口(典型的弹出窗口,用于对页面发表意见)。

现在弹出窗口已经准备就绪,我需要一个servlet来发送来自其处方集的请求,但我不知道如何在Liferay Server中创建一个简单的Java servlet。

我想我必须独立创建它,并将其部署到Tomcat中,不是吗?但是,我该如何部署它,以及如何设置钩子以便它不会与Liferay的环境发生冲突?

谢谢!

2 个答案:

答案 0 :(得分:1)

你必须使用Liferay的PortalDelegateServlet包裹你的servlet - 见Usage of PortalDelegateServlet in Liferay

答案 1 :(得分:0)

我从未尝试过这样的事情,但this answer似乎是一种逻辑上正确的方法,但这并不是Liferay处理这种情况的方法。

这将是使用Struts Action Hooks创建一个可在整个门户网站中全局访问的新操作。

此类型的Hook可用于覆盖核心门户(例如c/portal/login)和portlet struts操作(例如/login/forgot_password),Liferay Portal的此操作在struts-config.xml文件中指定在其WEB-INF文件夹中。要覆盖操作:

  1. liferay-hook.xml下的hook插件的docroot/WEB-INF文件中,在hook元素中添加struts-action元素。
  2. struts-action元素内,添加指定您要覆盖的操作路径的struts-action-path和指定自定义操作类的struts-action-impl。这看起来像:

    <struts-action-path>/login/login</struts-action-path>
        <struts-action-impl>
        com.myhook.action.ExampleStrutsPortletAction
        </struts-action-impl>
    </struts-action>
    
  3. 创建扩展BaseStrutsPortletAction的Struts portlet操作类。这个类的一个例子是:

    public class ExampleStrutsPortletAction extends BaseStrutsPortletAction {
    
            public void processAction(StrutsPortletAction originalStrutsPortletAction,
                    PortletConfig portletConfig, ActionRequest actionRequest,
                    ActionResponse actionResponse) throws Exception {
    
                System.out.println("Custom Struts Action");
    
                originalStrutsPortletAction.processAction(originalStrutsPortletAction,
                        portletConfig, actionRequest, actionResponse);
            }
    
        public String render(StrutsPortletAction originalStrutsPortletAction,
                PortletConfig portletConfig, RenderRequest renderRequest,
                RenderResponse renderResponse) throws Exception {
    
            System.out.println("Custom Struts Action");
    
            return originalStrutsPortletAction.render(null, portletConfig,
                    renderRequest, renderResponse);
        }
    }
    

    调用被覆盖的方法(如originalStrutsPortletAction.processAction)并不是强制性的,而是保持Action的行为不受Liferay Portal影响的最佳实践。 这种类型的钩子也可用于添加新的Struts动作,它与修改现有动作相同,在这种情况下liferay-hook.xml将是:

    <struts-action>
        <struts-action-path>/my/custom/path</struts-action-path>
        <struts-action-impl>
        com.myhook.action.ExampleStrutsAction
        </struts-action-impl>
    </struts-action>