HTTP(day14-1里)
*概念:超文本传输协议
*传输协议:定义了,客户端和服务器端通信时,发送数据的格式
*特点:
1.基于TCP/IP的高级协议
2.默认端口号是80
3.基于请求/响应模型的 一次请求对应一次响应
4.无状态的:每次请求之间相互独立,不能去交互数据
*历史版本:
1.0:每一次请求响应都会建立新的连接
1.1:复用连接
*请求消息数据格式
1.请求行
请求方式 请求url 请求协议/版本
GET/login.html HTPP/1.1
*请求方式:常见2种
(最重要是第一点区别!!!!!)
*GET:
1.请求参数在请求行种,在url后
2.请求的url长度有限
*POST:
1.请求参数在请求体种
2.请求的url长度没有限制
2.请求头:客户端浏览器告诉服务器的一些信息
请求头名称:请求头值
*常见请求头:!!!!!
1.User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
2.Referer:
*告诉服务器,当前请求从哪里来?
*作用:
1.防盗链
2.统计工作
3.请求空行
就是一个空行,做分割post请求头和请求体的
4.请求体(正文)
*响应消息数据格式
Request
下面图片为1原理的内容
1.request对象和response对象的原理
1.这两个对象是由服务器创建的。我们来使用它们
2.request对象是来获取请求消息,response是来设置响应消息的
2.request对象继承体系结构:
ServletRequest -----接口
|(继承)
HttpServletRequest ------接口
|
org.apache.catalina.connector.RequestFacade 类(tomcat)
3.request功能:!!!!!!
1.获取请求消息数据
1.获取请求行数据
*GET/day14/demo1?name=zhangsan HTPP/1.1
*方法:(重点掌握2和5)!!!!
1.获取请求方式:GET
2.获取虚拟目录:/day14
*String getContextPath()
3.获取Servlet路径:/demo1
4.获取get方式的请求方式:name=zhangsan
5.获取请求的URI:/day14/demo1
*String getRequestURI() : /day14/demo1
*StringBuffer getRequestURL() : http://localhost//day14/demo1
*URL:统一资源定位符 http://localhost//day14/demo1
//相当于中华人民共和国
*URI:统一资源标识符 /day14/demo1
//相当于共和国
--->URI范围更大
6.获取协议及版本:HTPP/1.1
7.获取客户机的IP地址:
*String getRemoteAddr()
2.获取请求头数据
*方法:
*(这个重点掌握!)String getHeader(String name) :
//通过请求头的名称获取请求头的值!!!
*getHeaderNames():
//获取所有请求头名称
3.获取请求体数据
*请求体只有POST请求方式才有,在请求体中封装了POST请求的请求参数
*步骤:
1.获取流对象
2.再从流对象中拿数据
2.其他功能!!(都非常重要呢,尤其1,4)
1.获取请求参数通用方式(通用!!!):不论get还是post都可以使用
1.String getParameter(String name): 根据参数名称获取来获取参数值
2.String[] getParameterValues(String name):
根据参数名称获取来获取参数值 eg: hobby=xx&hobby=game
一个键两个值
3.getParameterNames():获取所有请求的参数名称
4.Map<String,String[]> getParameterMap():
获取所有参数的map集合
*中文乱码问题!!!
*get方式不会乱码,tomcat解决了
*post方式会乱码
*解决:在获取参数前,设置request的编码
request.setCharacterEncoding("utf-8");
2.请求转发:一种在服务器内部的资源跳转方式
1.步骤:
1.通过request对象获取请求转发器对象:
//RequestDispatcher request.getRequestDispatcher(String path)
2.使用RequestDispatcher()对象进行转发
//forward方法
2.特点(要记住,经常有面试题来问你):!!!
1.浏览器地址栏路径没有发生变化
2.只能转发到当前的服务器内部中
3.转发是一次请求
3.共享数据
*域对象:一个有作用范围的对象,可以在范围内共享数据
*request域:代表一次请求的范围,一把用于请求转发的多个资源中共享数据
*方法:
1.void setAttribute(String name,Object o):存储数据
2.Object getAttitude(String name):通过键来获取值
3.void removeAttribute(String name):通过建来移除键值对
4.获取ServletContext
*getServletContext()
案例:用户登录
*用户登录案例需求
1.编写login.html登陆页面
username & password,两个输入框
2.使用Druid数据库连接池技术,操作mysql,day14数据库中的user表
3.使用JdbcTemplate技术封装JDBC
4.登陆成功跳转到SuccessServlet展示:登陆成功!用户名,欢迎您
5.登陆失败跳转到FailServlet展示:登陆失败,用户名或密码错误