【问题标题】:Setting a simple servlet in Liferay Server在 Liferay Server 中设置一个简单的 servlet
【发布时间】:2016-09-29 07:35:59
【问题描述】:

我有一个 Liferay 6 服务器,在一个 Tomcat 服务器中。

问题是,我正在编辑我的一个公共页面(欢迎页面),所以 JavaScript 是从管理控制台读取的。它只是将脚本放在页面末尾,随心所欲。这很好用,我正在页面的角落看到一个弹出窗口(用于对页面发表意见的典型弹出窗口)。

现在弹出窗口已经准备好了,我需要一个 servlet 来发送来自其公式的请愿书,但我不知道如何在 Liferay Server 中创建一个简单的 Java servlet。

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

谢谢!

【问题讨论】:

    标签: java tomcat servlets liferay


    【解决方案1】:

    您必须使用 Liferay 的 PortalDelegateServlet 包装您的 servlet - 请参阅 Usage of PortalDelegateServlet in Liferay

    【讨论】:

      【解决方案2】:

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

      那就是使用 Struts Action Hooks 创建一个可以在整个门户中全局访问的新操作。

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

      1. docroot/WEB-INF 下的钩子插件的liferay-hook.xml 文件中,在钩子元素中添加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,不是强制性的,但在 Liferay Portal 方面保持 Action 的行为不变的最佳实践。 这种类型的钩子也可以用来添加新的 Struts Actions,它与修改现有的 action 相同,在这种情况下 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>
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-17
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多