当HTTP转发给Web容器处理时,Web容器会收集相关信息,并产生HttpServletRequest对象,使用这个对象可以取得所有HTTP请求中的信息,可以在Servlet中进行处理,也可以转发给其他的Servlet/Jsp处理。

1. 请求信息的取得

  getQueryString()方法可以取得HTTP请求的查询字符串。
  getParameter()方法能指定请求参数名称来取得相应的值,如取得下面请求参数为name 的值:

http://localhost:8080/WebApp1/hello.do?name=acmagic;

获取到的name 的值就为acmagic,如果请求中没有参数的名称,则返回null.
   如果窗口上一个参数名称有多个值,此时可以用getParameterValues()方法取得一个String数组。例如:

http://localhost:8080/WebApp1/hello.do?choose=sans&choose=lily&choose=jack
String[] names = request.getParameterValues("choose");

如果要知道有多少请求参数,可以使用getParameterNames()方法,他会返回一个Enumeration对象,其中包括所有请求参数的名称。例如:

Enumeration<String> e = request.getParameterNames();
while (e.hasMoreElements()) {
    String param = (String) e.nextElement();
    out.println(param + "<br>");
}

如果要知道浏览器请求的标头,可以用getHeader()方法,也可以使用getHeaderNames()获取浏览器请求的所有标头值。  
       完整代码:

package com.web.http;

import java.awt.print.Printable;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetRequestMessage extends HttpServlet {

/**
     *
     */
    private static final long serialVersionUID = 1L;

protected void getRequestMessage(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 传送给浏览器utf-8编码的文字
        response.setContentType("text/html;charset=utf-8");
        //请求字符编码,如果有中文才不会乱码
        request.setCharacterEncoding("utf-8");
        PrintWriter output = response.getWriter();
        output.println("<html>");
        output.println("<head>");
        output.println("<title>getRequestMessage</title>");
        output.println("</head>");
        output.println("<body>");
        // 取得应用程序的路径
        output.println("<h1>This WebApp at :" + request.getContextPath() + "</h1>");
        // 取得请求字符串
        output.println("<p>Request string: " + request.getQueryString() + "</p>");
        // 取得参数中对应的值
        output.println("<p>name = " + request.getParameter("name") + "</p>");
        // 一个参数对应几个值
        String[] chooses = request.getParameterValues("choose");
        output.print("<p>chooses are: " + chooses[1] + "</p>");
        // 请求参数的个数
        Enumeration<String> e = request.getParameterNames();
        while (e.hasMoreElements()) {
            String param = (String) e.nextElement();
            output.println(param + ":" + request.getParameter(param) + "<br><br>");
        }

// 获取所有标头名
        Enumeration<String> h = request.getHeaderNames();
        while (h.hasMoreElements()) {
            String head = (String) h.nextElement();
            output.println(head + ": " + request.getHeader(head) + "<br>");
        }

output.println("<body>");
        output.println("</html?");
        output.close();
    }

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        getRequestMessage(request, response);
    }

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        getRequestMessage(request, response);
    }

}</font></font>

运行结果如下:

(未完。。。)

更多相关API请访问官方文档:http://docs.oracle.com/javaee/6/api/

HttpServletRequest的使用的更多相关文章

  1. java中HttpServletRequest常用获取url、资源名等方法总结

    HttpServletRequest客户端获取请求,客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中.所以我们能够从对象中获取相应信息   端口 request.get ...

  2. eclipse开发servlet,HttpServletRequest报红叉解决方案

    eclipse开发servlet,HttpServletRequest报红叉解决方案 今天突然间有兴致,想打一会代码,于是开发一个Servlet,代码和配置路径都没问题,HttpServlet居然报错 ...

  3. java web学习总结(十) -------------------HttpServletRequest对象

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  4. java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()Z 的解决

    jetty 9 嵌入式开发时,启动正常,但是页面一浏览就报错如下: java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest ...

  5. The method getDispatcherType() is undefined for the type HttpServletRequest

    在使用百度的ueditor的时候,老是报错: The method getDispatcherType() is undefined for the type HttpServletRequest 原 ...

  6. HttpServletRequest获取请求参数

    private static String getRequestParameter(HttpServletRequest request, HttpServletResponse response) ...

  7. 解决httpServletRequest.getParameter获取不到参数

    用httpServletRequest.getParameter接收post请求参数,发送端content Type必须设置为application/x-www-form-urlencoded:否则会 ...

  8. Struts1.x有两个execute方法,不要重写错哦HttpServletRequest才是对的(转)

    Struts1.x 的 Action 有两个 execute 哦,小心搞错! by agate - Published: 2008-05-01 [9:42 下午] - Category: 程序编码 不 ...

  9. httpServletRequest对象、filter、servlet、servlet容器、catalina、tomcat、以及web容器之间的关系

    学习servlet的时候经常感到疑惑 HttpServletRequest是服务器创建的?还是servlet容器创建的? 过滤器是服务器创建的?还是servlet容器创建的? serlet容器和tom ...

  10. HttpServletRequest的Attribute和Parameter区别

    HttpServletRequest类既有getAttribute()方法,也由getParameter()方法,这两个方法有以下的组件通过getParameter()方法来获得请求参数,例如假定we ...

随机推荐

  1. python解析json数据

    现在的API接口多为xml或json,json解析更简洁相对xml来说 以豆瓣的API接口为例,解析返回的json数据: https://api.douban.com/v2/book/1220562 ...

  2. Git for Windows之日志查看与版本切换

    1.查看本地版本库的修改日志 (1).通过log指令查看完整日志 (2).通过 log --pretty=oneline查看简易版日志 2.版本切换 (1).切换到本地版本库最新的版本,通过reset ...

  3. SpringBoot + docker + neo4j

    下拉镜像 docker pull neo4j 启动镜像 docker run -d -p 7473:7473 -p 7687:7687 -p 7474:7474 neo4j 打开浏览器:http:// ...

  4. discuz 数据库文件密码修改

    网站系统需要修改的位置有两处 Discuz 和 UC-center ①路径:/wwwroot/config/config_global.php 这个根据你网站安装的路径而定. 打开 config_gl ...

  5. Linux宝塔软件安装

    yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && ...

  6. java CAS算法

    CAS算法是硬件对于并发操作的支持,其中包含了三个操作数:内存值,预估值和更新值.没当要执行更新操作时,会先在同步方法中比较内存值和预估值是否相等,如果相等才会用更新值替换内存值,否则什么也不做. p ...

  7. MVC源码分析 - View续之Razor

    过完年, 大家都忙碌起来了, 我也不例外. 不过并不是忙碌于去面试找工作, 而是忙碌于现在手上的工作. 闲话不多说了, 进入今天的主题. 一.Index页面在哪里 很奇怪, 在目录bin下面的dll文 ...

  8. 局域网的路由器&网卡

    网卡 唯一的标志 MAC地址:14:21:S8:8B:44:89 昵称:TP-Link-4489 如何获取局域网IP? DHCP(动态主机配置协议) DHCP 服务器可以动态的分配地址. 1)网卡(T ...

  9. nginx报错整理

    一. 1.线上有个域名出现一个访问报错: 413 Payload Too Large 这里贴一下关于这个报错的解释: The 413 (Payload Too Large) status code i ...

  10. HTTPS加密越来越流行,为何要加密?

    继谷歌之后,国内最大的搜索引擎百度在2015年5月实现了全站HTTPS加密.搜狗搜索.360搜索.bing搜索.淘宝.天猫.知乎等也都实现了全站HTTPS加密,互联网即将迎来全网HTTPS加密时代. ...