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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring的Request作用域是指在一次HTTP请求过程中,共享同一个Request对象的范围。在这个范围内,多个组件可以通过Request对象来进行数据的共享和交互。 在Spring中,可以通过@Scope注解来定义Request作用域。具体使用方法如下: 1. 在配置文件中添加以下内容: ``` <bean id="myBean" class="com.example.MyBean" scope="request"> </bean> ``` 2. 在Java类中使用@Scope注解: ``` @Component @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS) public class MyBean { // ... } ``` 其中,proxyMode属性是必须的,它指定了在Request作用域中使用代理模式来创建Bean对象。这是因为Request作用域是在Web环境下使用的,而Web环境是多线程的,每个线程都有自己的Request对象。如果没有使用代理模式,在不同的线程中获取同一个Bean对象,就会导致数据不一致的问题。 在使用Request作用域时,可以通过以下方式来获取Request对象: ``` HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); ``` 在Request对象中存储的数据可以通过以下方式来获取: ``` request.setAttribute("key", "value"); String value = (String) request.getAttribute("key"); ``` 需要注意的是,使用Request作用域时应该尽量避免存储大量的数据,以免影响性能。同时,存储的数据必须在一次请求结束后被清除,以免对后续的请求产生影响。可以通过实现HandlerInterceptor接口来在请求结束后清除数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值