Grails在weblogic中部署时无法呈现GSP

时间:2015-01-12 13:32:02

标签: grails weblogic http-status-code-404 render

当我将grails(2.4.0)项目战部署到weblogic 12.1.2时,我遇到了一个问题。当部署到tomcat时,战争完全正常。问题是,当战争部署在weblogic中时。用户登录后,使用LDAP的身份验证过程也可正常运行。接下来应该使用GSP页面呈现主页,但似乎weblogic无法呈现GSP页面。它在浏览器上抛出了404.

一旦我登录到应用程序,如果我直接使用浏览器中的任何URL,流程将转到Controller并在控制器中执行所有必需的代码执行,但无法返回查看和呈现GSP页面在"渲染"中提到块。

我的控制器操作代码如下:

def index(){
    log.debug("**********Reached MyHomeController**********")
    MyHome myHome = new MyHome()
    myHome.setMessageId(1)
    myHome.setMessageText("***TEST MESSAGE***")

    render (view: 'myhome')
}

我尝试使用相同的控制器操作在浏览器上呈现纯文本,它工作正常。即使在weblogic部署中,我也可以看到在浏览器上呈现的消息没有问题。

def index(){
    log.debug("**********Reached MyHomeController.testCall**********")
    render ("*@***Reached MyHomeController.testCall**********")
}

我已经验证了grails网站([此处] [1])中的weblogic问题,并完成了那里提到的补救措施。但我认为,问题是请求被提交给正确的Controller但是当回到UI时,weblogic无法找到GSP(tomcat没有问题)。

请帮助解决在weblogic中部署时如何渲染GSP的问题。 以下是weblogic在浏览器上抛出404时的日志异常: 不确定为什么要尝试查找* .jsp文件。

:MyHomeController - **********到达MyHomeController ********** ::: [2c5cb87d-29ad-4006-8294-4a1f355e124e] [Lokajit_Tikayatray]:OptimizedAutowireCapableBeanFactory - 返回单例bean的缓存实例' groovyPagesUriService' ::: [2c5cb87d-29ad-4006-8294-4a1f355e124e] [Lokajit_Tikayatray]:AbstractGrailsControllerHelper - 用result [null]执行的Action [testCall1]和视图名称[/ myHome / index] ::: [2c5cb87d-29ad-4006-8294-4a1f355e124e] [Lokajit_Tikayatray]:AbstractGrailsControllerHelper - Action [testCall1]处理,创建Spring模型和视图[ModelAndView:引用视图名称' / myHome / myhome' ;模型是{}] ::: [2c5cb87d-29ad-4006-8294-4a1f355e124e] [Lokajit_Tikayatray]:SimpleGrailsController - [SimpleGrailsController]转发模型和视图[ModelAndView:引用视图名称' / myHome / myhome&#39 ;;类是[/ myHome / myhome]的模型是{}] ::: [2c5cb87d-29ad-4006-8294-4a1f355e124e] [Lokajit_Tikayatray]:CompositeInterceptor - postHandle SecurityContextHolderAwareRequestWrapper [org.springframework.security.web.context.HttpSessionSecurityContextRepository$Servlet3SaveToSessionRequestWrapper@320c8103],org.springframework.security.web.context。 HttpSessionSecurityContextRepository $ SaveToSessionResponseWrapper @ 52ea05a0,org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController@4720353f,ModelAndView:引用名称' / myHome / myhome';模型是{} ::: [2c5cb87d-29ad-4006-8294-4a1f355e124e] [Lokajit_Tikayatray]:GrailsDispatcherServlet - 渲染视图[org.codehaus.groovy.grails.web.sitemesh.SitemeshLayoutView:unnamed; DispatcherServlet中的URL [null]],名称为' grails' ::: [2c5cb87d-29ad-4006-8294-4a1f355e124e] [Lokajit_Tikayatray]: JstlView - 在InternalResourceView中转发资源[/WEB-INF/grails-app/views/myHome/myhome.jsp] '空' ::: [2c5cb87d-29ad-4006-8294-4a1f355e124e] [Lokajit_Tikayatray]:GrailsDispatcherServlet - 渲染视图错误[org.codehaus.groovy.grails.web.sitemesh.SitemeshLayoutView:unnamed; DispatcherServlet中的URL [null]],名称为' grails' 显示java.lang.NullPointerException     在weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.run(StubSecurityHelper.java:280)     在weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.run(StubSecurityHelper.java:254)     在weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)     在weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341)     在weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)     在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)     在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)     在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)     在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)     在weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:574)     在weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:272)     在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)     at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)     at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)     at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)     在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)     在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)     在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)     在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)     在weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.wrapRun(WebAppServletContext.java:3367)     at weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.run(WebAppServletContext.java:3333)     在weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)     在weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)     在weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)     在weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220)     at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146)     在weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124)     在weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564)     在weblogic.servlet.provider.ContainerSupportProviderImpl $ WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)     在weblogic.work.ExecuteThread.execute(ExecuteThread.java:295)     在weblogic.work.ExecuteThread.run(ExecuteThread.java:254)

1 个答案:

答案 0 :(得分:0)

最后,部署使用weblogic并正确地从一个页面导航到另一个页面。问题在于视图文件夹的命名约定。似乎weblogic需要视图文件夹名称与框架生成的URL完全相同(区分大小写)。

日志打印:
转发资源[/WEB-INF/grails-app/views/myHome/myhome.jsp]

所以,weblogic试图找到“我的家”。 GSP文件位于"我的 H ome"文件夹(大写为H)但我的所有视图文件夹名称都是小写的。因此,weblogic无法在URL中找到GSP。即使我将类似的JSP复制到所需的路径仍然无法找到它。从日志中获取线索,我将视图文件夹名称更改为与URL完全相同的情况,并且工作正常。 :)

Tomcat的情况与此不同。 Tomcat不会将URL用作区分大小写。它可以在任何情况下找到URL路径。这就是为什么我的应用程序与tomcat一起工作正常,即使URL是/我 H ome / **但我的视图文件夹名称是'我的 h ome&#39 ;。由于tomcat能够正确识别URL路径,因此我并不认为weblogic将对URL路径进行区分大小写的搜索(直到我用尽所有可能的选项来解决问题:))。