网站首页 > 精选教程 正文
当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的。您可以查阅HTTP协议来获得更多的信息。
下表列出了浏览器端信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息:
信息 | 描述 |
---|---|
Accept | 指定浏览器或其他客户端可以处理的MIME类型。它的值通常为 image/png 或 image/jpeg |
Accept-Charset | 指定浏览器要使用的字符集。比如 ISO-8859-1 |
Accept-Encoding | 指定编码类型。它的值通常为 gzip 或compress |
Accept-Language | 指定客户端首选语言,servlet会优先返回以当前语言构成的结果集,如果servlet支持这种语言的话。比如 en,en-us,ru等等 |
Authorization | 在访问受密码保护的网页时识别不同的用户 |
Connection | 表明客户端是否可以处理HTTP持久连接。持久连接允许客户端或浏览器在一个请求中获取多个文件。Keep-Alive 表示启用持久连接 |
Content-Length | 仅适用于POST请求,表示 POST 数据的字节数 |
Cookie | 返回先前发送给浏览器的cookies至服务器 |
Host | 指出原始URL中的主机名和端口号 |
If-Modified-Since | 表明只有当网页在指定的日期被修改后客户端才需要这个网页。 服务器发送304码给客户端,表示没有更新的资源 |
If-Unmodified-Since | 与If-Modified-Since相反, 只有文档在指定日期后仍未被修改过,操作才会成功 |
Referer | 标志着所引用页面的URL。比如,如果你在页面1,然后点了个链接至页面2,那么页面1的URL就会包含在浏览器请求页面2的信息头中 |
User-Agent | 用来区分不同浏览器或客户端发送的请求,并对不同类型的浏览器返回不同的内容 |
HttpServletRequest类
request对象是javax.servlet.http.HttpServletRequest类的实例。每当客户端请求一个页面时,JSP引擎就会产生一个新的对象来代表这个请求。
request对象提供了一系列方法来获取HTTP信息头,包括表单数据,cookies,HTTP方法等等。
接下来将会介绍一些在JSP编程中常用的获取HTTP信息头的方法。详细内容请见下表:
序号 | 方法& 描述 |
---|---|
1 | Cookie[] getCookies()返回客户端所有的Cookie的数组 |
2 | Enumeration getAttributeNames()返回request对象的所有属性名称的集合 |
3 | Enumeration getHeaderNames()返回所有HTTP头的名称集合 |
4 | Enumeration getParameterNames()返回请求中所有参数的集合 |
5 | HttpSession getSession()返回request对应的session对象,如果没有,则创建一个 |
6 | HttpSession getSession(boolean create)返回request对应的session对象,如果没有并且参数create为true,则返回一个新的session对象 |
7 | Locale getLocale()返回当前页的Locale对象,可以在response中设置 |
8 | Object getAttribute(String name)返回名称为name的属性值,如果不存在则返回null。 |
9 | ServletInputStream getInputStream()返回请求的输入流 |
10 | String getAuthType()返回认证方案的名称,用来保护servlet,比如 "BASIC" 或者 "SSL" 或 null 如果 JSP没设置保护措施 |
11 | String getCharacterEncoding()返回request的字符编码集名称 |
12 | String getContentType()返回request主体的MIME类型,若未知则返回null |
13 | String getContextPath()返回request URI中指明的上下文路径 |
14 | String getHeader(String name)返回name指定的信息头 |
15 | String getMethod()返回此request中的HTTP方法,比如 GET,,POST,或PUT |
16 | String getParameter(String name)返回此request中name指定的参数,若不存在则返回null |
17 | String getPathInfo()返回任何额外的与此request URL相关的路径 |
18 | String getProtocol()返回此request所使用的协议名和版本 |
19 | String getQueryString()返回此 request URL包含的查询字符串 |
20 | String getRemoteAddr()返回客户端的IP地址 |
21 | String getRemoteHost()返回客户端的完整名称 |
22 | String getRemoteUser()返回客户端通过登录认证的用户,若用户未认证则返回null |
23 | String getRequestURI()返回request的URI |
24 | String getRequestedSessionId()返回request指定的session ID |
25 | String getServletPath()返回所请求的servlet路径 |
26 | String[] getParameterValues(String name)返回指定名称的参数的所有值,若不存在则返回null |
27 | boolean isSecure()返回request是否使用了加密通道,比如HTTPS |
28 | int getContentLength()返回request主体所包含的字节数,若未知的返回-1 |
29 | int getIntHeader(String name)返回指定名称的request信息头的值 |
30 | int getServerPort()返回服务器端口号 |
HTTP信息头示例
在这个例子中,我们会使用HttpServletRequest类的getHeaderNames()方法来读取HTTP信息头。这个方法以枚举的形式返回当前HTTP请求的头信息。
获取Enumeration对象后,用标准的方式来遍历Enumeration对象,用hasMoreElements()方法来确定什么时候停止,用nextElement()方法来获得每个参数的名字。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*" %><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body><h2>HTTP 头部请求实例</h2><table width="100%" border="1" align="center"><tr bgcolor="#949494"><th>Header Name</th><th>Header Value(s)</th></tr><%
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String paramName = (String)headerNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getHeader(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}%></table></body></html>
访问main.jsp,将会得到以下结果:
您可以在上面代码中尝试HttpServletRequest类的其它方法。
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
猜你喜欢
- 2024-11-05 关于 URL,说几个你不知道的点 url各部分含义
- 2024-11-05 避免自己写的 url 被diss!建议看看这篇RESTful API简明教程!
- 2024-11-05 IntelliJ IDEA 15款 神级超级牛逼插件推荐
- 2024-11-05 学习SpringMVC——如何获取请求参数
- 2024-11-05 java验证码生成(一) java生成验证码并验证
- 2024-11-05 Nice,终于有人把SpringMVC讲明白了,太简单了...
- 2024-11-05 Java代理IP设置指南:让你的网络请求更灵活
- 2024-11-05 请说说RPC的一个请求的流程是怎么样的?
- 2024-11-05 Javaweb 演示session的URL重写 java sessionid
- 2024-11-05 springboot2.2.X手册:构建全局唯一的短链接数据中心
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)