从最近几周开始,我开始在 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"));
在同一行中,您可以尝试Ext
s
如果你正在开发一个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
,但我不明白你想在那里做什么。