Request[ "id" ]的作用

Request.QueryString 替我们件事情:每次接受到参数后,都做 UrlEncode ,并且是按照 UTF-8编码做的 UrlEncode 。 这在大多数情况下没有任何问题,但是一些情况下,会给我们带来麻烦,本文就是分析这些可能给我们带来麻烦的场景,以及解决方法。

Request.QueryString["id"] 只能读取通过地址栏参数传递过来的名为id的参数。
Request["id"]是一个复合功能读取函数。
它的优先级顺序为
QueryString > Form > Cookies > ServerVariables

也就是说,如果存在名为id的地址栏参数,Request[ "id" ] 的效果和 Request.QueryString["id"] 是样的。
如 果不存在名为id的地址栏参数,Request.QueryString["id"]将会返回空,但是Request[ "id" ]会继续检查是否存在名为id的表单提交元素,如果不存在,则继续尝试检查名为id的Cookie,如果不存在,继续检查名为id的服务器环境变量。它将 最多做出4个尝试,只有四个尝试都失败,才返回空。


以下是Request[ "id" ]的内部实现代码:
public string this[string key]
    {
        get
        {
            string str = this.QueryString[key];
            if (str != null)
            {
                return str;
            }
            str = this.Form[key];
            if (str != null)
            {
                return str;
            }
            HttpCookie cookie = this.Cookies[key];
            if (cookie != null)
            {
                return cookie.Value;
            }
            str = this.ServerVariables[key];
            if (str != null)
            {
                return str;
            }
            return null;
        }
    }

转载于:https://www.cnblogs.com/beidao/archive/2012/06/05/2536878.html

### 请求ID (RequestId) 在Web开发中的角色 请求ID(`requestId`)通常用于唯一标识一次HTTP请求,在分布式系统和微服务架构中尤为重要。通过为每次请求分配唯一的标识符,可以方便地追踪日志、调试问题并监控性能。 在Java Web环境中,虽然标准的Servlet API并没有直接提供内置的`requestId`属性,但是开发者可以通过多种方式来管理和利用这一概念: - **自动生成**:可以在过滤器(Filter)或者拦截器(Interceptor)层面为每一个进入系统的HTTP请求生成一个全局唯一的UUID作为其`requestId`。 - **传递机制**:一旦创建好这个ID之后,应该将其附带在整个处理链路当中,比如放入ThreadLocal变量里供后续业务逻辑调用;也可以放在HttpServletResponse header里面返回给客户端以便前端记录下来再次发送回服务器端形成闭环跟踪[^1]。 - **日志关联**:为了便于排查问题,所有的日志输出都应该带上当前线程对应的`requestId`信息,这样当出现问题时能够快速定位到具体的请求上下文环境。 ```java // 创建一个新的Filter类来设置Request ID public class RequestIdFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) req; HttpServletResponse httpResponse = (HttpServletResponse) res; String requestId = UUID.randomUUID().toString(); MDC.put("requestId", requestId); // 使用Logback的日志管理工具 try { httpResponse.setHeader("X-Request-ID", requestId); chain.doFilter(req, res); } finally { MDC.remove("requestId"); } } } ``` 上述代码展示了如何在一个简单的Servlet过滤器中实现`requestId`的功能。这里采用了Apache Commons Logging框架下的MDC(Mapped Diagnostic Contexts),它允许我们将额外的信息附加到每条日志消息上,从而使得不同请求之间产生的日志更容易区分和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值