从最近几周开始,我开始在 Liferay 工作。我有几个关于 liferay 插件开发的问题,它们是
- 我们可以在插件中包含一个 servlet 吗?
- 如果是,那么哪一个可以拥有插件?它是一个portlet 还是一个钩子,还是一个ext?
- 如何
http://liferayhost:8090/url/callback像在 web.xml 中那样将 servlet 映射到? - 我们可以为 portlet 或 hook 编写 web.xml 吗?
请帮助我理解这些主题。
我们可以在插件中包含一个 servlet 吗?
如果您正在创建Liferay Hook,您的doRun方法将获取Request和Response对象,您可以使用它们分别处理Request和Response。
例如,您可以通过 Request 对象获取 Session Id、Cookie 等。
session=request.getSession(false);
Cookie[] cookies = request.getCookies();
您可以使用Response对象进行重定向,
response.sendRedirect("/PathToYourPage");
因此,您可以获得几乎所有可以作为 Servlet 获得的东西。
如果您正在开发一个Portlet插件,那么请记住它是Portlet您正在开发的,而不是Servlet. 如果Portlet你想要Request和Response对象,你可以使用下面的代码
javax.servlet.http.HttpServletRequest request = (javax.servlet.http.HttpServletRequest) (FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("com.liferay.portal.kernel.servlet.PortletServletRequest"));
javax.servlet.http.HttpServletResponse response = (javax.servlet.http.HttpServletResponse) (FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("com.liferay.portal.kernel.servlet.PortletServletResponse"));
在同一行中,您可以尝试Exts
如果你正在开发一个Theme插件,我真的不明白你想在那里实现什么Servlet。
但是您仍然可以做的是,在您的主题vm文件templates夹下的文件中包含一个 JSP 页面。
$theme.include($themeServletContext, "/myJSP.jsp")
这个 JSP 页面可以放在WebContent文件夹下。在此myJSP.jsp,通过 JSTL/Scriplets 可以获取Request/Response对象
我希望这也能回答你的第二个问题。
如何像在 web.xml 中那样将 servlet 映射到 http:/liferayhost:8090/url/callback?
8090将是您通过提及索引在应用程序服务器中配置的端口号。
url值将是您在 Web 服务器(例如 Apache)中配置的 Web 应用程序名称(war 文件)名称uriworkers.properties。callback将是您在应用程序中Servlet配置的 URL 模式。web.xml
我们可以为 portlet 或 hook 编写 web.xml 吗?
你可以同时web.xml写Portlet和Hook。在 Hooks 的情况下,虽然如果你有基本配置不会抛出异常web.xml,但我不明白你想在那里做什么。