grails - 在Weblogic中部署时,Grails无法呈现GSP

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

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

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

我的 Controller 操作代码如下:

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

    render (view: 'myhome')
}

我试图使用相同的 Controller 操作在浏览器上呈现纯文本,并且效果很好。即使在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-执行了[testCall1],结果为[null], View 名称为[/ myHome / index]
::: [2c5cb87d-29ad-4006-8294-4a1f355e124e]:[Lokajit_Tikayatray]:AbstractGrailsControllerHelper-处理了操作[testCall1],创建了Spring模型并查看了[ModelAndView:对名称为'/ myHome / myhome'的 View 的引用;型号为{}]
::: [2c5cb87d-29ad-4006-8294-4a1f355e124e]:[Lokajit_Tikayatray]:SimpleGrailsController-[SimpleGrailsController]转发模型和 View [ModelAndView:引用名称为'/ myHome / myhome'的 View ;型号为{}],类为[/ myHome / myhome]
::: [2c5cb87d-29ad-4006-8294-4a1f355e124e]:CompositeInterceptor-postHandle SecurityContextHolderAwareRequestWrapper [org.springframework.security.web.context.HttpSessionSecurityContextRepository $ Servlet3SaveToSessionRequestWrapper.320c8con .., HttpSessionSecurityContextRepository $ SaveToSessionResponseWrapper @ 52ea05a0,org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController@4720353f,ModelAndView:对名称为'/ myHome / myhome'的 View 的引用;型号为{}
::: [2c5cb87d-29ad-4006-8294-4a1f355e124e]:[Lokajit_Tikayatray]:GrailsDispatcherServlet-呈现 View [org.codehaus.groovy.grails.web.sitemesh.SitemeshLayoutView:未命名;名称为'grails'的DispatcherServlet中的URL [null]]
::: [2c5cb87d-29ad-4006-8294-4a1f355e124e]:[Lokajit_Tikayatray]: JSTLView-转发到资源[/WEB-INF/grails-app/views/myHome/myhome.jsp] in InternalResourceView'null'
::: [2c5cb87d-29ad-4006-8294-4a1f355e124e]:[Lokajit_Tikayatray]:GrailsDispatcherServlet-错误呈现 View [org.codehaus.groovy.grails.web.sitemesh.SitemeshLayoutView:未命名;名称为'grails'的DispatcherServlet中的URL [null]]
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)
在grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
在grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
在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)
在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)
在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)

最佳答案

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

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

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

Tomcat并非如此。 Tomcat不使用URL区分大小写。无论如何,它都能找到URL路径。这就是为什么即使URL为/ my H ome / **但我的 View 文件夹名称为'my h ome'时,我的应用程序仍能与tomcat一起正常工作的原因。由于tomcat能够正确识别URL路径,因此weblogic不会对URL路径进行区分大小写的搜索(直到我用尽所有可能的选项来解决问题为止)并不使我感到惊讶。

关于grails - 在Weblogic中部署时,Grails无法呈现GSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903156/

相关文章:

jboss - 将配置与 Puppet 部署的 WAR/EAR 分开

javascript - Webkit 将 "#"转换为 %23 导致 404 错误?

ajax - 前端 ajax 框架与 Grails 一起使用

java - 如何在Intellij Idea中组织一个大型java项目

java - 访问映射网络驱动器时出现问题

java - Weblogic - 主应用程序中的Web应用程序

iOS swift : Can't create pinterest pin with PinterestSDK

javascript - Repl.it 上的自定义 404-Not Found 页面

grails - 更改使用 spring security 验证旧密码的密码表单

grails - 我可以在Grails中为抽象域类自定义列名吗?