【问题标题】:How to create a top-level servlet in liferay如何在 liferay 中创建顶级 servlet
【发布时间】:2014-01-23 21:35:22
【问题描述】:

我想在 liferay 中创建一个 servlet,它正在侦听诸如

之类的 URL
http://localhost:8080/my-servlet

我尝试将其添加到 portlet 但我有 URL

http://localhost:8080/my-portlet/my-servlet

我尝试将我的 servlet 描述添加到 ext-web 的 web.xml 中,但没有成功。 有没有办法添加这样的servlet?

【问题讨论】:

  • 你不能创建 web 项目并部署在 liferay tomcat 上吗?
  • 这是顶级的还是会在 url 前面加上它自己的名字?
  • 项目名称为前缀
  • 是的,感谢您的回答,但我真的希望它是顶级的。
  • 按照此示例了解如何在 liferay 插件中创建 servlet 路径:github.com/liferay/liferay-plugins/tree/master/hooks/…

标签: java servlets liferay liferay-6


【解决方案1】:

Liferay 也是“Servlet”——应用程序——但它是一个非常非常大的应用程序。而 Liferay 需要一些 servlet 容器,例如 tomcat、jetty、jboss 等。

但是,您可以简单地创建 servlet 项目并将其直接部署到运行 liferay 的 servlet 容器。

编辑:并通过 servlet-mapping 像“/*”这样的直接访问将其放入 web.xml。

【讨论】:

  • 确实如此。有时解决方案真的很简单:portal-service.jar 仍然可以使用... :)
【解决方案2】:

如果您想访问 Liferay 服务 API,您可以考虑使用 PortalDelegateServlet :将以下内容添加到您的 web.xml:

<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>com.liferay.portal.kernel.servlet.PortalDelegateServlet</servlet-class>
    <init-param>
        <param-name>servlet-class</param-name>
        <param-value>org.example.MyServlet</param-value>
    </init-param>
    <init-param>
        <param-name>sub-context</param-name>
        <param-value>myservlet</param-value>
    </init-param>
</servlet>

将使您的servlt可以通过

访问

http://example.org/delegate/myservlet

在您的 servlet 类中,您然后执行诸如提取登录用户并检查权限之类的操作:

package org.example;

public class MyServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    User user = PortalUtil.getUser(request);
    PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.create(user);
    ...

【讨论】:

  • 听起来棒极了!感谢提示
  • 访问url时如何防止“找不到页面”??
猜你喜欢
  • 2017-08-12
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多