Http(1)
#http协议版本
http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。
http1.1:当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(基本都使用1.1)
#请求资源
URL: 统一资源定位符。http://localhost:8080/day11/testImg.html。只能定位互联网资源。是URI的子集。
URI: 统一资源标记符。/day11/hello。用于标记任何资源。可以是本地文件系统,局域网的资(//192.168.14.10/myweb/index.html),可以是互联网。
#请求方式
常见的请求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE
常用的请求方式: GET(浏览器默认的请求方式) 和 POST
#请求头
Accept: text/html,image/* -- 浏览器接受的数据类型
Accept-Charset: ISO-8859-1 -- 浏览器接受的编码格式
Accept-Encoding: gzip,compress --浏览器接受的数据压缩格式
Accept-Language: en-us,zh- --浏览器接受的语言
Host: www.it315.org:80 --(必须的)当前请求访问的目标地址(主机:端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --浏览器最后的缓存时间
Referer: http://www.it315.org/index.jsp -- 当前请求来自于哪里
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --浏览器类型
Cookie:name=eric -- 浏览器保存的cookie信息
Connection: close/Keep-Alive -- 浏览器跟服务器连接状态。close: 连接关闭 keep-alive:保存连接。
Date: Tue, 11 Jul 2000 18:23:51 GMT -- 请求发出的时间
#请求实体
只有post请求才有实体。(post请求一般用于提交比较交敏感的数据)
HttpServletRequest对象
HttpServletRequest对象作用是用于获取请求数据
核心的API:
请求行:
request.getMethod(); 请求方式
request.getRequetURI() / request.getRequetURL() 请求资源
request.getProtocol() 请求http协议版本
请求头:
request.getHeader("名称") 根据请求头获取请求值
request.getHeaderNames() 获取所有的请求头名称
实体内容:
request.getInputStream() 获取实体内容数据
示例代码
1、jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="/HttpTest/HttpTest" method="get"> 用户名:<input type="text" name="name"></br> 密 码 :<input type="text" name="password"></br> <input type="submit" value="提交"> </form> </hr> </br> </br> <form action="/HttpTest/HttpTest" method="POST"> 用户名:<input type="text" name="name"></br> 密 码 :<input type="text" name="password"></br> <input type="submit" value="提交"> </form> </body> </html>
2、servlet代码
public class HttpTest extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //t1(request); // t2(request); } //接收post方式的请求 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { InputStream in=req.getInputStream(); //得到实体内容 byte[] buf=new byte[1024]; int len=0; while ((len=in.read(buf))!=-1) { String str=new String(buf,0,len); System.out.println(str); } } private void t2(HttpServletRequest request) { /** * 请求头 */ Enumeration<String> enums=request.getHeaderNames(); while (enums.hasMoreElements()) { String string = (String) enums.nextElement(); String value=request.getHeader(string); System.out.println(string+" : "+value); } } private void t1(HttpServletRequest request) { /** * 请求行 */ System.out.println("请求的方式:"+request.getMethod()); System.out.println("URI:"+request.getRequestURI()); System.out.println("URL:"+request.getRequestURL()); System.out.println("http:"+request.getProtocol()); } }
随机推荐
- TP缓存设计方案解析
TP的缓存主要依赖Cache类,Cache类其实是一个代理类,Cache类通过getInstance静态方法来获取缓存实例,而getInstance方式实际是调用Cache类的connect方法,该方 ...
- thinksns解析1
1.数据库 这儿是关于数据库的封装,还是挺厉害的,最终select中完成sql语句的封装,最后由query来完成底层api 2.初始化过程 sns也是通过框架完成显示调用,一开始通过i ...
- 为什么我们需要使用 touch 命令
为什么我们需要使用 touch 命令 既然 touch 命令描述的是改变时间戳,那么我们可能会想为什么我们需要去改变时间戳呢?这个问题会引发我们的深思.然而,我想有个理由可以解释为什么我们需要使用它. ...
- 知识管理(knowledge Management)2
①找到生命的主轴 ②跨领域知识管理
- 关于C# 调用 C dll时,抓获C的异常
最近一直被C# 调用native code时的内存错误,各种错误所困扰.而且在.net 4.0中非托管代码的异常不能被托管代码抓获,导致程序直接crash. 最终找到了.net 的方法.MSDN有关于 ...
- 运行从别处复制过来的linux可执行程序
1, 首先ldd看看缺不缺so文件,如果不缺可忽略下面的文字,直接执行 2, 先看看缺的这些库在系统上有没有,这些库可通过安装开发包,第三方软件进行安装 3, 找到可能会包含这些库的可执行程序,ldd ...
- C#使用字符串分割字符串
我们都会用字符分割字符串: string[] recvArr = recv.Split(';'); 如果用字符串分割呢?下面: string[] sArray = Regex.Split(recv, ...
- [BZOJ 1106] [POI2007] 立方体大作战tet 【树状数组】
题目链接:BZOJ - 1106 题目分析 从1到2n枚举每一个位置. 如果枚举到某一个数,这个数已经是第二次出现,那么就看它和第一次出现的位置之间有多少数还没有被匹配,有多少没有匹配的就要进行多少次 ...
- Origin null is not allowed by Access-Control-Allow-Origin
http://www.cnblogs.com/accessking/archive/2012/05/12/2497000.html http://bbs.csdn.net/topics/3903099 ...
- net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案
我使用的net.sf.json是json-lib-2.4-jdk15.jar,把json对象转换为普通java实体对象时候有个问题,josn对象转换为java对象之后,json串里面的那几个小数点的值 ...