我创建了一些自定义servlet,并调用它:
https://[domain]/delegate/getpefrentry?param1=blabla¶m2=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 = /委托/ *
答案 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。