Servlet 客户端 HTTP 请求

HttpServletRequest 读取请求行、请求头、Cookie 与参数的方法。

Beginner
Key Points请求行用 getMethod/getRequestURI/getQueryString 读,请求头用 getHeader,参数用 getParameter。

请求行

MethodReturns
getMethod()GET / POST / ...
getRequestURI()/myapp/hello
getQueryString()name=Ada&age=20
getProtocol()HTTP/1.1
getContextPath()/myapp
getServletPath()/hello

请求头

Java
@WebServlet("/headers")
public class HeaderServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain;charset=UTF-8");
        try (PrintWriter out = resp.getWriter()) {
            out.println("User-Agent : " + req.getHeader("User-Agent"));
            out.println("Accept     : " + req.getHeader("Accept"));
            out.println("Host       : " + req.getHeader("Host"));
            out.println("Lang       : " + req.getHeader("Accept-Language"));

            out.println("--- 全部请求头 ---");
            Enumeration<String> names = req.getHeaderNames();
            while (names.hasMoreElements()) {
                String n = names.nextElement();
                out.println(n + " = " + req.getHeader(n));
            }
        }
    }
}

getHeader is case-insensitive, so getHeader("user-agent") equals getHeader("User-Agent"). When a header repeats, use getHeaders(name) to get all values.

读取 Cookie

Java
Cookie[] cookies = req.getCookies();
if (cookies != null) {
    for (Cookie c : cookies) {
        System.out.println(c.getName() + " = " + c.getValue());
    }
}

安全地取参数

Java
private static String param(HttpServletRequest req, String key, String dflt) {
    String v = req.getParameter(key);
    return (v == null || v.isBlank()) ? dflt : v.trim();
}

private static int intParam(HttpServletRequest req, String key, int dflt) {
    try {
        return Integer.parseInt(param(req, key, String.valueOf(dflt)));
    } catch (NumberFormatException e) {
        return dflt;
    }
}
Never concatenate a getParameter value into SQL or HTML — that is injection or XSS. Parameters are untrusted input and must go through prepared statements and escaping.

Friends & Partners