IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    JSP内置对象——request对象

    果冻想发表于 2015-12-01 12:46:12
    love 0

    简述request对象

    内置request对象是javax.servlet.ServletRequest类的实例,代表客户端发起的请求;这是一个非常重要的对象。在B/S架构中,客户端一般都是浏览器,用户通过浏览器向服务器发送请求,从而达到访问服务器的目的。而浏览器具体怎么访问服务器,得到自己需要的数据呢?这个过程复杂的去了,大体上分为以下三步:

    1. 用户通过浏览器发送request;
    2. 服务器处理request;
    3. 将response传给客户端,由浏览器渲染显示。

    这三大步,每一步分开总结都能成一篇文章;而这里只是对JSP中的内置request对象进行扫盲性总结。用户通过浏览器发送请求,浏览器会将请求信息都包装在一个请求中,发送给服务器端;服务器得到这个请求以后,会从这个请求从得到所有的请求信息,将这些请求信息封装成一个request对象,也就是JSP中内置的这个request对象。也就是说,这个request对象是对客户请求数据的封装,那么这个request对象到底封装了哪些数据呢?

    request到底有哪些数据?

    对于一个请求中的数据主要分为两部分:

    • 请求头,这部分数据通常由浏览器自动添加;
    • 请求参数,这部分由用户自己在页面上添加;

    下面通过一个最简单的页面来输出所有的请求头数据。一个最简单的HTML页面,给服务器发送一个不带任何请求参数的请求,到达服务器以后,服务器将所有的请求头数据返回客户端输出。

    index.html主要代码:

    <body>
        <form action="page1.jsp">
            <input type="submit" value="获取请求头参数" />
        </form>
    </body>
    

    page1.jsp主要代码:

    <body>
        <%
        // 获得所有的请求头
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements())
        {
            String headerName = headerNames.nextElement();
    
            // 获得请求头对应的参数
            out.println("[" + headerName + "] => [" + request.getHeader(headerName) + "]<br />");
        }
        %>
    </body>    
    

    客户端向服务器发送的每一次请求都会把上述输出的请求头带上。而光有这些请求头数据,对于服务器来说用处不大,而我们需要收集用户的真正需求。

    对于百度首页的那个搜索框来说,那只是一个简单的表单,用来收集用户的搜索信息,一旦用户提交了请求,表单里输入的搜索信息就会提交给百度的后台处理程序。此时你输入的搜索信息就是请求参数,对于服务器来说,这个请求参数才是我们需要的,下面就通过一个简单的程序来获取用户提交的请求参数。

    index.html主要代码:

    <body>
        <form action="page1.jsp" method="get">
            <input type="text" name="search" />
            <input type="submit" value="百度一下" />
        </form>
    </body>
    

    page1.jsp主要代码:

    <%
    // 获得输入的搜索字符串
    out.println("你搜索的内容为:");
    out.println(request.getParameter("search"));
    %>
    

    我们可以通过调用内置request对象的getParameter函数获取用户输入的信息,从而再完成其它一些功能。关于表单form中的method,有GET和POST两种,关于二者的区别请参见这篇文章《详解HTTP中GET和POST的区别》。

    request的属性

    对于内置的request对象,也提供了以下两个函数:

    • setAttribute(String attrName, Object value); 设置本次请求关联的属性值
    • getAttribute(String attrName); 取本次请求关联属性值

    具体使用方法请参见《JSP内置对象——application对象》这篇文章中关于内置application对象属性的用法。

    总结

    只要进行Web应用的开发,不管是PHP、Python和C#等,你都无法避开request这个概念。抛开语言层面的东西,我们需要理解的是request这个概念。在这里推荐一篇好文《一次完整的HTTP事务是怎样一个过程?》。

    果冻想-一个原创技术文章分享网站。

    2015年11月09日 于呼和浩特。

    未经允许不得转载:果冻想 » JSP内置对象——request对象



沪ICP备19023445号-2号
友情链接