当前位置: 首页 > 知识库问答 >
问题:

Grails应用程序中使用IIS 7/Tomcat连接器托管的错误页面

宦翔
2023-03-14

我有一个Grails应用程序,在IIS 7下的Tomcat 7中运行,使用的是雅加达Isapi Tomcat连接器版本1.2.30,我很难让错误处理按我希望的方式运行。Tomcat连接器在uriworkermap中配置。属性将应用程序URL下的所有请求转发到Tomcat:

/OrderSubmission/* = worker1

Grails应用程序有自己的自定义错误页面,当应用程序在没有IIS/Tomcat连接器的开发机器上运行时,这些页面可以正常工作,但在服务器上,如果在IIS中打开自定义错误页面,这些页面总是覆盖Grails应用程序中的错误页面。这意味着我有一个特定的页面来处理特定的异常类型,例如在UrlMappings中。groovy

"500"(controller: 'error', action: 'itemNotFound', exception: ItemNotFoundException)

...相反,我看到的是静态500错误页面,我指的是IIS。

如果我打开IIS中的详细错误,我会从Grails应用程序中获得正确的错误页面——但是,如果请求在应用程序上下文之外的URL,我会看到详细的IIS 404页面,这是不可接受的。如果我更改Tomcat连接器的uriworkermap。属性要包含从根目录到下的所有内容,我会看到一个默认的Tomcat 404错误页面。我试图通过在isapi\u重定向中设置error\u page选项,使Tomcat连接器默认为自定义页面。属性指向我的IIS静态自定义页面,如下所示:

error_page=/%d.htm

...但是这行不通,我也找不到任何地方使用这个设置的例子。

我需要做的是显示自定义Grails错误页面-除非请求的URL在应用程序之外或应用程序关闭,此时我需要显示自定义静态错误页面。

有人做到了吗?

蒂亚

共有1个答案

常博裕
2023-03-14

我最终让我的错误页面控制器方法返回200(OK)的状态,除非处理AJAX请求:

class ErrorController {
    def pageNotFound() {
        if (!request.xhr){
            response.status = 200
        }
    }
}

IIS设置为“自定义错误页”。

这可以防止IIS介入并提供我提供的自定义静态页面,除非请求的URL不在Grails应用程序的范围内。

为AJAX请求保留错误状态,以允许调用者正确处理结果。

我不确定在应用程序出错时返回200是否是一种令人满意的做法,尤其是在搜索引擎方面。不过,Fiddler表示,即使没有这种更改,当出现错误并最终从IIS返回到浏览器时,它的状态似乎也是200。

 类似资料:
  • Meteor Accounts包触发会话令牌过期的间隔。我不卖这是一个蔚蓝的东西,也许它是。 source/accounts-base.js https://github.com/meteor/meteor/blob/f9f94e21d10676aaa4a8a6809cb3bbc2f60f536/packages/accounts-base/accounts_server.js#l53 具体地说,

  • 我有一个Grails(2.5.3版)应用程序,当我通过选项:要部署的WAR文件在Tomcat中部署时,选择WAR文件,会出现以下错误。如果我尝试一个更简单的应用程序(大小、复杂度等),它运行得很好。 但是,如果在从manager运行应用程序时手动将war文件的内容复制到Tomcat路径:pathTomcat/webapps/myApplication,则效果良好。出现任何错误。 错误: Grail

  • 我正在尝试在Function App中编写一个函数来操作CosmosDB中的数据。如果我在环境变量中删除读写键,它就会工作。为了使它更健壮,我希望它作为托管标识应用程序工作。该应用程序在Cosmos DB上具有“DocumentDB帐户贡献者”角色。 但是,CosmosClient构造函数不接受凭据,需要读写密钥。我一直在追查azure的兔子洞。管理。宇宙数据库。有一个带有list\u keys(

  • 我们必须通过配置用户名、密码和公钥,使用代理服务器internet.ford.com从应用程序连接到外部SFTP服务器。 预期与外部SFTP服务器的连接成功。

  • 在阅读了Tomcat NIO连接器之后,我仍然不明白一件事:如果应用程序代码阻塞,即它阻塞从数据库读取、读取文件系统和调用外部web服务,那么NIO连接器是否有益? 例如,您有一个类似REST的API,它接收一个请求,从数据库中读取一些内容,并返回一个响应。它不使用Servlet3异步,它只是写入响应。 我没有找到NIO连接器使用的线程池的完整描述,但我认为它有一个处理请求的线程池,因此每个请求最

  • 我创建了一个jsp web应用程序。真正的任务是我必须使用WINSCP在大学服务器上托管我的项目。但是当我使用大学域名测试这个项目时,我得到了这个错误 类型异常报告 消息无法为JSP编译类: 说明服务器遇到内部错误,无法满足此请求。 异常org.apache.jasper.JasperExctive:无法为JSP编译类:在生成的java文件中的行:[15]处发生错误:[C:\tomcat\work