06 September 2013

我们已经编写出了一个比较简单的servlet,并把它部署到Tomcat容器当中。本节将对HTTP请求做一个简单介绍。
### HTTP请求格式

<request line>
<headers>
<blank line>
[<request body>]

其中第一行为请求行,按空格分为三段:请求方法、URL、HTTP协议版本。接下来为header,说明请求的附加信息如浏览器版本、操作系统等。然后是一个空行。空行之后可能有请求体。
请求方式包括GET、POST等。其区别主要在于GET方式把请求数据放在URL中,而POST把数据放在请求体中。相对来说,POST的数据传送更为隐秘一些。
headers包含多行,每行以冒号分隔,之前是字段名,之后是字段值。
所有HTTP请求里的数据都可以通过HttpServletRequest的对象取得。 ### HttpServletRequest 在上一节的Servlet例子中,我们看到doGet方法的第一个参数就是HttpServletRequest类型的。所以通过这个参数,我们可以打印出相应请求的细节信息。以下是一个示例。

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

public class EchoController extends HttpServlet {
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        PrintWriter writer = resp.getWriter();

        Map<String, String> info = new HashMap<String, String>();
        info.put("Content Type", req.getContentType());
        info.put("Method", req.getMethod());
        info.put("QueryString", req.getQueryString());
        info.put("Request URI", req.getRequestURI());
        info.put("Path Info", req.getPathInfo());
        info.put("Character Encoding", req.getCharacterEncoding());

        writer.println("some request info<br/>");
        for (Map.Entry<String, String> e : info.entrySet()) {
            writer.println(e.getKey() + ": " + e.getValue() + "<br/>");
        }
    }
}


blog comments powered by Disqus