黑马程序员技术交流社区
标题: 【石家庄校区】HTTP&Servlet笔记 [打印本页]
作者: 说什么好 时间: 2018-5-21 15:11
标题: 【石家庄校区】HTTP&Servlet笔记
HTTP&Servlet
HTTP协议:
概述:
超文本传输协议:(HTTP,HyperText Transfer Protocol)一种网络协议,所以的WWW文件都必须遵守这个标准
用来规范浏览器和服务器之间的数据传递
HTTP协议的特点:
基于请求和响应的模型:
必须先有请求后有响应
请求和响应必须成对出现
默认的端口是80
HTTP协议的版本:
1.0:每次响应后即可关闭了连接
1.1:不是每次响应后管段,等待长时间以后没有请求会挂断
HTTP协议详解:
请求部分:
请求行:
提交方式:
提交方式很多,常用的get和post
get和post的区别:
get的提交的参数会显示到地址栏上,而post不显示
get有大小限制,而post没有大小限制
get没有请求体,而post有请求体
提交路径:
协议版本:
请求头:
都是键值对的形式显示,一般一个Key对应一个value,也有个别的一个Key对应多个value
User-Agent : 代表浏览器的类型
Referre : 代表网页的来源 防盗链
If-Modified-Since : 通常与响应中的头Last-Modified一起查找本地缓存
请求体:
就是POST提交方式提交的参数,
响应部分:
响应行:
协议版本:
状态码:
200:成功
302:重定向
304:查找本地缓存
404:资源不存在
500:服务器内部错误
状态码描述
响应头:
键值对,一般一个key一个value,也有一个key对应多个value
Last-Modified :与轻取中的If-Modified-Since一起查找本地缓存
Content-Dispostion :文件现在的时候使用的一个头信息
Location :重定向跳转的路径
Refresh :定时刷新/定时跳转
响应体:
显示浏览器页面的内容
Servlet
概述:
运行在web服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议
是sun公司提供的一个动态网页开发技术
作用:
处理从客户端浏览器发送的请求,并可以对请求做出响应
使用:
编写一个类实现Servlet接口
将编写的这个类配置到服务器中
使用Servlet接收参数:
getParameter(String name):接收一个名称对应一个值的数据
getParameterValues(String name):接收一个名称对应多个值的数据
Map getParameterMap():接收表单中的所有数据,Map的key提交的参数的名称,value:提交参数的值
Enumeration getParameterNames():获取表达中提交的所有的参数的名称
Servlet的实现的关系:
Servlet ----- GenericServlet ----- HttpServlet 编写一个类继承HttpServlet,重写doGet和doPost方法
接口 ------- 通用的Servlet ------ HttpServlet
Servlet的生命周期:
用户在第一次访问Servlet的时候,服务器会创建一个Servlet实例,然后Servlet中的init方法就会执行,每请求一次服务器都会创建一个新线程访问Servlet中的service方法,service方法会根据请求方式的不同调用不同的doXxx方法,当Servlet中服务器被移除,或者关闭服务器的时候Servlet的实例就会被销毁,同时执行destory方法,整个过程中,Servlet实例只会被创建一次。
ServletConfig:
getServletName():获得Servlet在web.xml中配置的name的值
getInitParameter(String name):获得Servlet的初始化参数、
getInitParameterNames():获得索引的初始化参数的名称
ServletContext:
1.用来获得全局初始化参数
2.用来获取文件的MIME的类型
3.用来存取数据,存的数据都是有一定的作用的范围,这种对象称为域对象
作用范围:
整个web工程
创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独的ServletContext对象
销毁:服务器关闭的时候,或者项目从服务器中移除的时候
setAttribute(String name,Object object) 存入数据
getAttribute(String name) 获取数据
removeAttribute(String name) 移除数据
4.用来读取web项目下的文件
getResourceAsStream(String path) 根据提供路径读取文件返回一个文件输入流
getRealPath(String path) 返回一个路径的磁盘绝对路径
响应对象-Response对象
response处理中文乱码
字节流:
response.setHeader("Content-Type","text/html;charset=UTF-8"); 设置浏览器默认打开编码
response.getOutputStream().write("王守义".getBytes("UTF-8")); 中文转成字节数组编码
字符流:
response.setCharacterEncoding("UTF-8") 设置response的缓冲区的编码
response.setHeader("Content-Type","text/html;charset=UTF-8");
response.setContentType("text/html;charset=UTF-8");相当于上面两句
文件下载:
设置两个头和一个流:
Content-Type:文件MIME的类型
Content-Dispostion:
文件的输入流
请求对象-request对象
获得客户机信息:
getMethod(); ---获得请求方式.
getQueryString(); ---获得请求路径后的参数.
getRemoteAddr(); ---获得客户机的IP地址.
getRequestURI(); ---获得请求的路径
getRequestURL(); ---获得请求的路径
getContextPath(); ---获得工程名
获得请求头:
getHeader(String name);
请求参数:
getParameter(String name):接收一个名称对应一个值的数据
getParameterValues(String name):接收一个名称对应多个值的数据
Map getParameterMap():接收表单中的所有数据,Map的key提交的参数的名称,value:提交参数的值
Enumeration getParameterNames():获取表达中提交的所有的参数的名称
作为与域对象存取值:
setAttribute(String name,Object object) 存入数据
getAttribute(String name) 获取数据
removeAttribute(String name) 移除数据
request的作用范围:
一次请求的范围
创建:客户端向服务器发送了一次请求后,服务器就会创建一个request对象
销毁:当服务器对这次请求做出了响应之后
转发和重定向的区别:
转发:request.getRequestDispatcher(String path).forward(request,response);
转发地址栏不变,
一次请求一次响应
request域对象存取的是有效的
路径不需要加 工程名
重定向:response.sendRedirect(String path)
重定向的地址栏发生改变
两次请求两次响应
request域对象存的值是无效的
路径需要加工程名
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |