帮助我们完成 浏览器与服务器的交互。
处理请求和响应。
一、HTTP协议
超文本传输协议。规定了B/S结构中,网络双方数据交互的格式。
两部分
请求协议 最重要 请求参数
请求行
请求方式 资源路径 协议/版本
请求头
都是键值对,代表着是浏览器给服务器的一些信息。
有个cookie内容。
请求体
只有post才有,里面放的是浏览器带给服务器的访问参数。
响应协议 最重要 响应内容
响应行
协议/版本 状态码
需要知道常见的状态码,自己以后出现的新的状态码记得收集。
比如你们后面会出现的 400 403 405 (面试题)
响应头
服务器给浏览器的,也是键值对儿。
setCookie
content-type 设置当前数据的MIME类型 以及编码格式
响应体
响应正文 ,也就是服务器响应浏览器的内容。
怎么在浏览器观察传输的内容呢? F12 network--->
二、Servlet
是什么?
服务器端小程序,用来处理请求与响应的。
浏览器可以通过地址访问到servlet.
想访问到指定的servlet
协议//ip:端口号/项目虚拟路径/访问的servlet的虚拟路径
面试题
说一下Servlet生命周期
创建 默认情况下 当浏览器访问指定的Servlet时候,服务器会通过反射形式创建该Servlet对象,
并调用其init方法,立即调用service方法,提供服务。
作用 每次访问都会调用service方法。Servlet是单例的,在一个程序中只有一个。
销毁 当服务器关闭或者项目移除的时候,该Servlet会先调用destroy方法,然后销毁。
默认当一个请求来了,服务器会先去检查有没有这个servlet,如果没有就返回404,
如果有就创建该Servlet对象,调用init,调用service.将来再来请求的时候就不会再
创建Servlet对象了,只是会执行service方法,当项目移除或者服务器关闭的时候,就
会执行destroy方法,完成销毁动作。
完成Servlet入门案例
1:创建一个类直接或者间接实现Servlet.
2:重写service方法,或者是doGet/doPost
3:完成注册与虚拟路径的配置。
xml 注解
三、request 请求对象
里面封装了所有跟请求相关的内容。
获取请求行信息
getMethod()
获取请求头的信息
getHeader(…)
获取请求参数的方法
String getParameter(name)
String[] getParameterValues(name)
Map<String,String[]> getParameterMap()
扩展了一个知识点
BeanUtils
populate(bean,map) 可以完成对象属性的封装。
reqeust是一个域对象(面试)
生命周期
创建 当浏览器发起对服务器的访问,到达了服务器,就代表一次请求出现了。
作用域 只要响应不回来,请求一直有效。
销毁 当响应到达浏览器,这次请求就结束了。
针对域对象,不管哪个域,都可以使用XXXAttribute方法。
小知识点:
请求参数中有了编码问题,怎么解决滴
request.setCharacterEncoding("utf-8")
案例体现
要债案例帮助我们理解请求转发!
request.getRequestDispatcher("请求转发的那个servlet/jsp虚拟路径")
.forward(request,response);
注册案例:
不仅仅体现了reqeust的使用,还有数据库的使用。
四、response 响应对象
把有关响应的内容都做了封装。
响应:服务器回馈给浏览器的内容。
响应行 setStatus(状态码)
响应头 setHeader(“content-type”,"")
setContentType(“text/html;charset=utf-8”)
响应体
获取字符流 getWriter()
获取字节流 getOutputStream()
重定向 通过借钱案例理解。
涉及API
setStatus(302) setHeader("location","重定向地址")
简化 sendRedirect("重定向地址")
面试题
请求转发和重定向的区别
1:请求转发是一次请求一次响应,重定向至少两次请求两次响应,一次主动,其余自动。
2:请求转发属于服务内部行为,重定向属于服务器外部行为。
3:请求转发的地址栏不会改变,重定向会发生改变。
4:请求转发由request对象完成的,重定向由response对象完成。
案例:
下载操作(理解 下载的流程 本质是 IO流的文件复制)
登录案例
五、ServletContext对象
它是什么,当tomcat一启动,就会为每一个web项目创建一个ServletContext对象。
只能获取 在Servlet getServletContext()
它是一个域对象,代表着当前的web项目容器。
作用
1:获取项目的初始化参数。web.xml配置的数据。
2:获取到项目相关的内容 getContextPath() 项目的虚拟路径
3:实现多个servlet之间通信。
4:获取文件的真实路径位置。getRealPath();
ServletContext域对象 xxxAttribute
生命周期
创建 服务器一启动,tomcat就会为每个web项目创建ServletContext对象。
作用域 只要web项目存在,它就存在,就有作用域。
销毁 服务器关闭,或者项目移除。
六、cookie
是什么?存在于浏览器端的会话技术。用来保存会话过程中产生临时数据。
作用:可以把数据存储到浏览器,浏览器可以解析到页面。
API
创建cookie new Cookie(name,value)
放到response中,response.addCookie(cookie)
获取所有cookie
Cookie[] cookies = request.getCookies()
获取cookie的键 cookie.getName()
获取cookie的值 cookie.getValue()
cookie的设置
设置路径 cookie.setPath(路径)
设置存活时间 cookie.setMaxAge(秒)
cookie删除 设置一个同名同路径的cookie,设置存活时间为0.
案例体现:记住用户名密码案例!
体现了cookie可以在浏览器端进行获取展示!
七、session
是什么 服务器端的会话技术。
作用 用来标识不同的用户。
当浏览器访问了服务器,就代表一次会话产生了,服务器就会为这次会话创建一个sesison对象,
在这次会话中进行多次请求和响应,多次请求和响应可以共享session中的数据。
出了这次会话,数据就不会共享了。
用在哪里呢?
1:验证码的校验。
2:用户的购物车可以是session形式的(web黑马商城中体现)。
3: session可以保存用户的状态。(web黑马商场中体现)。
SessionAPI
1:获取session request.getSession()
如果请求没有jessionid,那么就创建一个新的session对象。
如果有,就根据id去session池中获取。
2: 是一个域对象
xxxAttribute
3: 销毁功能
session对象setMaxInactiveInterval(秒);
seesion对象.invalidate()
tomcat配置 30分钟之后
服务器关闭