首页 文章

JSPG0036E:无法在Websphere中找到Liferay 4.3 Spring Portlet的资源/ WEB-INF / servlet /视图错误

提问于
浏览
1

我能够在websphere 6.1和7.0版本中成功部署liferay .

此外,我使用spring portlet mvc开发的portlet列在添加内容中 .

我使用以下视图解析器的spring框架将控件路由到相应的portlet jsps

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/html/"/>
<property name="suffix" value=".jsp"/>
</bean>

当我在页面下包含我的portlet时,我得到以下错误,这与未正确查找视图(即jsp)有关...但我能够调试并看到我的控制器被正确调用并且视图名称也是回 .

相同的设置在Jboss中运行正常,如果我遗漏了任何特定于websphere的内容,请提供帮助...

在此先感谢...期待您的回复

JSP处理错误HTTP错误代码:404错误消息:JSPG0036E:无法找到资源/ WEB-INF / servlet / view根本原因:java.io.FileNotFoundException:JSPG0036E:无法在以下位置找到资源/ WEB-INF / servlet / view com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.findWrapper(AbstractJSPExtensionProcessor.java:376)位于com.ibm.ws.webcontainer的com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.handleRequest(AbstractJSPExtensionProcessor.java:336) . webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java:673)在org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:137)在org.springframework.web.servlet.view.AbstractView.render(AbstractView . 的java:251)在org.springframework.web.servlet.ViewRendererServlet.renderView(ViewRendererServlet.java:111)在org.springframework.web.servlet.ViewRendererServlet.processRequest(ViewRendererServlet.java:84)在org.springframework.web.servlet .ViewRendererServlet.d oGet(ViewRendererServlet.java:65)位于javax.servlet.http.HttpServlet.service(HttpServlet.java:718)的javax.servlet.http.HttpServlet.service(HttpServlet.java:831)at com.ibm.ws.webcontainer .servlet.ServletWrapper.service(ServletWrapper.java:1655)在com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:937)在com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(用到ServletWrapper .com:500)在com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)com的com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java:673) . life.portlet.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:245)at com.liferay.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:87)at org.springframework.web.portlet.DispatcherPortlet.render(DispatcherPortlet.java:1081)在org.springframework.web.portlet.DispatcherPortlet.doRenderService(DispatcherPortlet.java:8 11)atg.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:475)at org.springframework.web.portlet.FrameworkPortlet.doDispatch(FrameworkPortlet.java:445)at javax.portlet.GenericPortlet.render(GenericPortlet) .java:233)位于com.ibm.ws的javax.servlet.http.HttpServlet.service(HttpServlet.java:831)的com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:107) . webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655)在com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:937)在com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest( ServletWrapper.java:500)在com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)在com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java:673)在COM .liferay.portlet.CachePortlet._invoke(CachePortlet.java:354)位于com的com.liferay.portlet.CachePortlet.render(CachePortlet.java:201) . ibm._jsp._render_5F_portlet._jspService(_render_5F_portlet.java:1324)位于com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:98)的javax.servlet.http.HttpServlet.service(HttpServlet.java: 831)com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655)位于com.ibm.ws的com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595) .webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:104)在com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)在com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter (WebAppFilterManager.java:908)位于com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:932)的com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500)at at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServ) letWrapper.java:121)at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:239)at atcom.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java:673)位于com.liferay.portal.util.PortalUtil.renderPortlet(PortalUtil.java:1517)的com.liferay.portlet.layoutconfiguration.util . Run.PopletUtil.processPortlet(RuntimePortletUtil.java:165)位于com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil.processPortlet(RuntimePortletUtil.java:102)的com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil.processTemplate(RuntimePortletUtil.java: 270)位于com.ibm.ws.jsp.runtime的com.ibm._jsp._portlet._jspService(_portlet.java:762)的com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil.processTemplate(RuntimePortletUtil.java:189) .httpJspBase.service(HttpJspBase.java:98),位于com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655)的javax.servlet.http.HttpServlet.service(HttpServlet.java:831) Com.ibm.ws.webcontainer.f上的com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595) il.WebAppFilterChain.doFilter(WebAppFilterChain.java:104)位于com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)的com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager . java:908)com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:932)at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500)at com.ibm位于com.ibm.ws.ps.jsp.webcontainerext.AbstractJSPExtensionServletWrapper的com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:121)中的.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) .handleRequest(AbstractJSPExtensionServletWrapper.java:239)位于com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java:673)的com.liferay.portal.action.LayoutAction.includeLayoutContent(LayoutAction.java:291)at at com.liferay.portal.action.LayoutAction.execute(LayoutAction .java:174)位于com.liferay.portal的org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)的org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) . struts.PortalRequestProcessor.process(PortalRequestProcessor.java:157)org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)位于com.liferay.portal.serval.MainServlet.service(MainServlet)的com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:287)的javax.servlet.http.HttpServlet.service(HttpServlet.java:718) .java:522)位于com.ibm.ws的com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655)的javax.servlet.http.HttpServlet.service(HttpServlet.java:831) . webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595)位于com.ibm.ws.webcontainer.filter.Web的com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:104) . comFilterChain._doFilter(WebAppFilterChain.java:77)位于com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908)的com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java: 932)com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500)位于com.ibm.ws的com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) .webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:341)at com.liferay.portal.servlet.FriendlyURLServlet.service(FriendlyURLServlet.java:130)at javax.servlet.http.HttpServlet.service(HttpServlet.java:831 )com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655)位于com.ibm.ws的com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595) . webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131)at com.liferay.filters.strip.StripFilter.doFilter(StripFilter.java:92)at at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)位于com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)的com.liferay.filters.compression . com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)中的CompressionFilter.doFilter(CompressionFilter.java:122) 116)位于com.ibm.ws.webcontainer的com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)的com.liferay.filters.secure.SecureFilter.doFilter(SecureFilter.java:144) .filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)位于com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java)的com.liferay.filters.doubleclick.DoubleClickFilter.doFilter(DoubleClickFilter.java:135) . :188)at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)at atcom.liferay.portal.servlet.filters.layoutcache.LayoutCacheFilter.doFilter(LayoutCacheFilter.java:188)在com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)在com.ibm.ws. webcontainer.filter.WebAppFilterChain.doFilter在com.ibm.ws.webcontainer.filter.FilterInstanceWrapper(WebAppFilterChain.java:116)在com.liferay.portal.servlet.filters.autologin.AutoLoginFilter.doFilter(AutoLoginFilter.java:117) . 的doFilter(FilterInstanceWrapper.java:188)在com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)在com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.doFilter(VirtualHostFilter.java: 166)在com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)在com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)在com.liferay.portal com.ibm.ws.webcontainer.filter.Filt上的.servlet.filters.sessionid.SessionIdFilter.doFilter(SessionIdFilter.java:85) erInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)位于com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)的com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java: 77)在com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908)在com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:932)在com.ibm.ws .webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500)at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest (CacheServletWrapper.java:91)在com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864)在com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)在com.ibm . ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.han dleDiscrimination(HttpInboundLink.java:455)在com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)在com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback . 完成(HttpICLReadCallback.java:83)在com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)在com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)在com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)在com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)在com.ibm.io.async.ResultHandler.complete (ResultHandler.java:204)在com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)在com.ibm.io.async.ResultHandler $ 2.run(ResultHandler.java:905)在com.ibm .ws.util.ThreadPool $ Worker.run(ThreadPool.java:1550)

2 回答

  • 0

    当进行servlet转发调用而不是servlet include时,在新版本中也会发生此错误 .

    我在WebSphere 8.5上使用Apache Tiles 2和Spring Portlet MVC 4.3观察到了这一点 . 在这种情况下 - 如果您正在使用Spring的 viewResolver bean,您可以将其配置为强制servlet -include:

    <bean id="viewResolver" class="org.springframework.web.servlet.view.tiles2.TilesViewResolver">
        <property name="alwaysInclude" value="true" />
    </bean>
    

    请注意,Spring MVC 4.3中不推荐使用Tiles 2支持 . 我刚刚添加了此解决方案,以防有人遇到现有代码问题 .

    关于Tiles,另一种方法是手动强制servlet-include . 您需要将请求属性 ServletUtil.FORCE_INCLUDE_ATTRIBUTE_NAME 设置为 true . 但是,如果您在portlet请求中设置它,我不知道这是否有效,因为servlet请求中的portlet请求属性可能不再可用 . 据我所知,没有正式的方法从portlet请求对象获取servlet请求对象 . 因此,here有人建议为"*.tiles"创建一个设置属性的servlet过滤器 . 但是,我没试过 .

  • 1

    解决方案找到:): -

    扩展Spring DispatcherPortlet类并编写自己的自定义portlet类 .

    覆盖render方法,大多数实现与基类render方法实现相同 .

    在方法的最后添加这些行 -

    HttpServletRequest httpRequest = PortalUtil.getHttpServletRequest(request);
    HttpServletResponse httpResponse = PortalUtil.getHttpServletResponse(response);
    //constant below indicate the url pattern of view renderer servlet configured in web.xml
    RequestDispatcher portletRequestDispatcher = httpRequest.getRequestDispatcher("/WEB-INF/servlet/view");
    
    portletRequestDispatcher.include(httpRequest, httpResponse);
    

    注意:不要忘记在portlet.xml中为portlet配置自定义portlet类 .

    希望它对你也有用 .

相关问题