Liferay中的自定义Servlet

时间:2015-10-09 02:56:06

标签: liferay

我创建了一些自定义servlet,并调用它:

https://[domain]/delegate/getpefrentry?param1=blabla&param2=sdsada

它工作正常,但如果我重新启动服务器,我会收到此错误:

  

服务器遇到内部错误(),导致无法完成此请求。

异常

javax.servlet.ServletException: No servlet registred for context getpefrentry
      com.liferay.portal.kernel.servlet.PortalDelegatorServlet.service(PortalDelegatorServlet.java:79)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
      com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
      com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:121)
      com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.processFilter(VirtualHostFilter.java:208)

我需要热部署servlet的war文件以使其再次工作。

我的Liferay-hook.xml:

<servlet>
<display-name>WSPEFR</display-name>
<servlet-name>WSPEFR</servlet-name>
<servlet-class>com.liferay.portal.kernel.servlet.PortalDelegateServlet</servlet-class>
<init-param>
  <param-name>servlet-class</param-name>
  <param-value>com.ncs.phm.ws.PhmWebServicePefr</param-value>
</init-param>
<init-param>
  <param-name>sub-context</param-name>
  <param-value>getpefrentry</param-value>
</init-param>
<init-param>
  <param-name>method</param-name>
  <param-value>get-latest-pefr-entry</param-value>
</init-param>
<load-on-startup>0</load-on-startup>

我的web.xml:

(define rmdup (lambda list (cond ((null? list) '()) ((eq? (car list) (car (cdr list)) (rmdup(cdr list))) (else( cons (car list) (rmdup(cdr list)))))))

我还在portal.properties中添加了这个: auth.public.paths = /委托/ *

2 个答案:

答案 0 :(得分:0)

这是由于com.liferay.portal.kernel.servlet.PortalDelegatorServlet的service()中的以下代码所致。

String[] paths = uri.split(StringPool.SLASH);
HttpServlet delegate = _delegates.get(paths[1]);
if (delegate == null) {
     throw new ServletException("No servlet registred for context " + paths[1]);
}

期望uri中的第二个字符串应该出现在委托列表中。例如:/ delegate / servlet-name

您是否在init()PortalDelegateServlet中注册了门户委托人?如果不尝试这个。 它确保在servlet容器加载servlet后添加委托。

servlet.init(config);
PortalServletDelegationManager.addDelegate(subContext, servlet);

让我知道它的结果。

答案 1 :(得分:0)

非常确定问题是liferay-hook.xml中的这一行:

<load-on-startup>0</load-on-startup>

0表示false

将其更改为1以在启动时加载您的servlet。