GWAN的自定义404响应



当人们请求在csp文件夹中找不到的servlet时它将显示"404未找到"响应

未找到

在此服务器上找不到请求的URL。

有没有一种方法可以检查servlet是否存在,以创建自定义404页面?

就像吉尔说的那样。您可以使用HDL_HTTP_ERRORS拦截HTTP错误。为了更清楚,这里有一个示例连接处理程序,它用自定义错误消息替换404错误。

#include "gwan.h" 
int init(int argc, char *argv[])
{
   u32 *states = (u32*)get_env(argv, US_HANDLER_STATES);
   *states =  (1 << HDL_HTTP_ERRORS);
   return 0;
}
int main(int argc, char *argv[])
{
   if((long)argv[0] != HDL_HTTP_ERRORS)
      return 255; // Continue if not an error
   // get the HTTP reply code
   int *status = (int*)get_env(argv, HTTP_CODE);
   if(!status || *status != 404)
      return 255; // Continue if not a 404 error
   static char custom_err[] = 
      "<!DOCTYPE HTML><html><head><title>404 Not Found</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link href="/imgs/errors.css" rel="stylesheet" type="text/css"></head>"
      "<body><h1>Not Found</h1>"
      "<p>This is a custom 404 not found error. What makes you think that this link exist?!!</p></body></html>";
   static char header[] = 
      "HTTP/1.1 %srn"
      "Server:  G-WANrn"
      "Date: %srn"
      "Content-Type:  text/html; charset=UTF-8rn"
      "Content-Length: %urnrn";
   int len = sizeof(custom_err)-1;
   char *date = (char*)get_env(argv, SERVER_DATE);
   // Set our http reply headers
   build_headers(argv, header,
             http_status(*status),
             date, // current server date
             len); // Reply length
   // Set our reply using our custom error
   set_reply(argv, custom_err, len, *status);
   return 2; // End request then send reply
}
void clean(int argc, char *argv[]) {}

如果您从servlet返回404错误,请注意。确保你做了

xbuf_empty(get_reply(argv));

清空应答缓冲区的内容。如果应答缓冲区中有任何内容,它将不会到达HDL_HTTP_ERRORS。它只会使用回复缓冲区中的任何内容进行回复。

内容类型和连接处理程序都可以在提供资源之前检查资源是否存在。

但是连接处理程序HDL_HTTP_ERRORS状态允许您截获HTTP错误,以更改G-WAN生成的默认回复。它在记录的G-WAN API处理程序状态中进行了定义。

这很可能就是你想要的。

相关内容

  • 没有找到相关文章

最新更新