HTTP协议请求行由三个标记组成:请求的HTTP方法、请求的URL、HTTP版本,中间用空格分开。HttpServletRequest对象可以对HTTP请求做出分析,它提供了一些方法来访问请求行的信息:
getMethod():获取HTTP的请求方法,例如GET、POST等
getRequestURI():获取请求的URI资源
getRequestURL():获取请求的URL,包含协议名、服务器名或IP、端口号和请求资源但不包括查询字符串参数
getQueryString():获取请求URL后面的查询字符串
getProtocol():获取HTTP的协议名和版本号
getContextPath():获取请求URI资源的上下文路径
getServletPath():获取Servlet的映射路径
在Servlet中,HTTP请求头可以通过调用HttpServletRequest对象的如下方法:
getHeader(name):返回指定的请求头的值
getHeaders(name) :返回一个Enumeration(枚举)包含请求头中的所有值
getHeaderNames():特定请求中接受到的所有请求头的名称
getIntHeader(name):获取特定请求头的值,并将其转化为int类型
getDateHeader(name):获取特定请求头的值,并将其转化为Date类型
获取所有请求头:
Enumeration enum = request.getHeaderNames();
while (enum.hasMoreElements()) {
String headerName = (String) enum.nextElement();
String headerValue = request.getHeader(headerName);
out.print("<b>"+headerName + "</b>: ");
out.println(headerValue + "<br>");
}
获取浏览器类型:
String userAgent = request.getHeader("User-Agent");
if((userAgent != null) && (userAgent.indexOf("MSIE")!=-1) )
{
message = "您正在使用MicroSoft IE浏览器";
}
else if((userAgent != null) &&
(userAgent.indexOf("Firefox")!=-1) )
{
message = "您正在使用FireFox火狐浏览器";
}
获取表单数据:
Enumeration enum = request.getParameterNames();
while (enum.hasMoreElements()) {
String pName = (String) enum.nextElement();
String[] pValues = request.getParameterValues(pName);
out.print("<b>"+pName + "</b>: ");
for (int i=0;i<pValues.length;i++) {
out.print(pValues[i]);
}
out.print("<br>");
}
获取原始表单数据:
POST请求不仅可以传输文本信息还可以传输二进制数据
使用HttpServletRequest对象提供的getInputStream()或getReader()方法直接访问表单数据
利用输入流分析原始的输入