文章目录
java学习之路(2),http协议,request类
1.一个httpServlet的多个地址定义
对于httpServlet可以定义一个数组,数组可以定义多个地址,即对于一个servlet可以通过多个地址访问。
如:
路径定义规则:/xxx
:多层路径:/xxx/xxxx
:/xxx/* 其中 星符号表示统配符,即可以/xxx/可以任意字符。
如果说星的情况包含了其他路径,只有在其他路径访问不到的时候才会访问星。即通配的优先级是较低的。
:*.something 注意不要加/。这是前面任意,后面加.something的意思。something是一个随便的单词。
2.我们访问一个页面时http做的事情
http协议基于tcp协议。在http1.1中,http协议可以保持一段时间。注意,当我们访问一段简单的页面的时候,我们可能有多次request的过程。图片,html资源都是单独的请求。
下图是我们访问bing网站的时候,http协议传送的内容。可以利用火狐或者chrome的F12键查看。
3.http:数据格式
概念:Hyper Text Transfer Protocol 超文本传输协议
传输协议:定义了,客户端和服务器端通信时,发送数据的格式
特点:
1. 基于TCP/IP的高级协议
2. 默认端口号:80
3. 基于请求/响应模型的:一次请求对应一次响应
4. 无状态的:每次请求之间相互独立,不能交互数据
* 两版本的区别:
* 1.0:每一次请求响应都会建立新的连接
* 1.1:复用连接
-
请求消息数据格式
1. 请求行
请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1请求方式: HTTP协议有7种请求方式,常用的有2种 GET: 1. 请求参数在请求行中,在url后。 2. 请求的url长度有限制的 3. 不太安全 POST: 1. 请求参数在请求体中 2. **请求的url长度没有限制的** 3. 相对安全
2. 请求头:客户端浏览器告诉服务器一些信息
请求头名称: 请求头值- 常见的请求头:
- User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
- 可以在服务器端获取该头的信息,解决浏览器的兼容性问题
- User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
-
Referer:http://localhost/first.html
-
指示请求来源
-
作用:
1 . 防盗链:判断流量来源
- 统计工作:比如广告,看广告的效果。
-
-
3. 请求空行
空行,就是用于分割POST请求的请求头,和请求体的。
4. 请求体(正文):-
封装POST请求消息的请求参数的
-
字符串格式:
POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1username=zhangsan
- 常见的请求头:
4.html内容回顾:form表单是如何做的
<form action="form_action.asp" method="get">
First name: <input type="text" name="fname" />
Last name: <input type="text" name="lname" />
<input type="submit" value="Submit" />
</form>
5.故障排除:部署tomcat后静态资源如html出现404的情况。
解决方法:html的路径配置错误。应当放在web文件夹中。
6.Request对象:
1.原理:
1tomcat根据请求创建对应对象,tomcat会创建两个对象,request封装请求消息。
2.tomcat将request两个对象传递给service方法,并且调用service方法。
3.程序员可以操作两个对象,request是来接收消息,responce是做出响应的对象。
重点:request和response都是服务器来创建的,我们就是在service中操作他们。
- 获取请求方式 :GET
- String getMethod()
- 获取虚拟目录
- String getContextPath()
- 获取Servlet路径:
- String getServletPath()
- 获取get方式请求参数:name=zhangsan
- String getQueryString()
- 获取请求URI:
- String getRequestURI():
- StringBuffer getRequestURL() :http://localhost/demo
- 获取协议及版本:HTTP/1.1
- String getProtocol()
- 获取客户机的IP地址:
- String getRemoteAddr()
- 获取请求头数据
- 方法:
- (*)String getHeader(String name):通过请求头的名称获取请求头的值
- Enumeration getHeaderNames():获取所有的请求头名称
- 方法:
- 获取请求体数据:
- 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
- 步骤:
- 获取流对象
- BufferedReader getReader():获取字符输入流,只能操作字符数据
- ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
- 在文件上传知识点后讲解
- 再从流对象中拿数据
- 获取流对象
- 重点掌握:虚拟目录,URL.
7.无法建立package的方法:右键–>new –> Mark Directory As –> Sources Root 就可以啦 ”
不过有一点,就是其实很多时候无法建立就是哪里之前不对或者确实不应该在这里建立啦(对于小白的我来说:))