servler的两个参数(Requset,Response)

HTTP协议

概念 : Hyper Text Transfer Protocol  超文本传输协议
	传输协议 : 定义了, 客户端和服务器端通信时, 发送的格式
	特点 : 
		1.基于TCP/IP的高级协议
		2.默认端口号 : 80
		3.基于请求/响应模型的 : 一次请求对应一次响应
		4.无状态的 : 每次请求之间相互独立, 不能交互数据

请求消息:客户端发送给服务器端的数据

* 数据格式:
	1. 请求行
	格式:
	请求方式   请求url       请求协议/版本
	GET     /login.html        HTTP/1.1
	请求方式 : 
		HTTP协议有7中请求方式, 常用的有两种
             GET :
 		   1. 请求参数在请求行中,在url后面
 		   2. 请求的url长度有限制的
 		   3. 不太安全
 		  POST :
 		   1. 请求参数在请求体中
 		   2. 请求的url长度没有限制的
 		   3. 相对安全
       2. 请求头: 客户端浏览器告诉服务器一些信息
       	请求头名称: 请求头值1;请求头值2....
       	常见的请求头 :
  		1. User-Agent : 浏览器告诉服务器, 我访问你使用的浏览器版本
  		   可以在服务器端获取该头的信息, 解决浏览器的兼容性问题
  		2. Referer  http://localhost:8080/login.html
    			告诉服务器, 我(当前请求)从哪里来?
      				作用 :
        				1. 防盗链 : 
        				2. 统计工作 : 
       3. 请求空行
       	空行 : 就是用于分隔POST请求的请求头和请求体的.
       4.请求体(正文) : 只有post请求才有请求体   get请求没有请求体
       	封装POST请求消息的请求参数的

响应消息:服务器端发送给客户端的数据

* 数据格式:
	1. 响应行
		1. 组成:协议/版本 响应状态码 状态码描述
		2. 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
			1. 状态码都是3位数字 
			2. 分类:
				1. 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
				2. 2xx:成功。代表:200
				3. 3xx:重定向。代表:302(重定向),304(访问缓存)
				4. 4xx:客户端错误。
					* 代表:
						* 404(请求路径没有对应的资源) 
						* 405:请求方式没有对应的doXxx方法
				5. 5xx:服务器端错误。代表:500(服务器内部出现异常)	
	2. 响应头:一般是一个key对应一个value,也有一个key对应多个value
		1. 格式:头名称: 值
		2. 常见的响应头:
			1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
			2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
					* 值:
						* in-line:默认值,在当前页面内打开
						* attachment;filename=xxx:以附件形式打开响应体。文件下载
	3. 响应空行: 分隔响应头和响应体
	4. 响应体:传输的数据

Request对象与Response对象

Request对象与Response对象的原理

  1. request和response对象是由服务器创建的. 我们来使用他们
  2. request对象是来获取请求线下, response对象是来设置响应消息的

Request对象(请求消息)

继承体系结构:
ServletRequest		-- 接口
	|  继承
HttpServletRequest	-- 接口
	|  实现
org.apache.catalina.connector.RequestFacade

request的功能: 获取请求消息

1.获取请求行数据
- GET /day14/demo1?name=zhangsan HTTP/1.1
- 方法
  1. 获取请求方式 : GET
     - String   getMethod()
  2. 获取虚拟目录 : /day14           (重点)
     - String   getContextPath()
  3. 获取Servlet路径 : /demo1
     - String   getServletPath()
  4. 获取get方式请求参数 : name=zhangsan
     - String   getQueryString()
  5. 获取请求的URI : /day14/demo1             (重点)
     - String   getRequestURI() : day14/demo1
     - StringBuffer   getRequestURI() :http://localhost/day14/demo1
     - URL : 统一资源定位符
     - URI : 统一资源标识符
  6. 获取协议及版本 : HTTP/1.1
     - String   getProtocol()
  7. 获取客户机的IP地址 : 
     - String   getRemoteAddr()
2.获取请求头数据
方法 : 
- String   getHeader(String  name) : 通过请求头的名称获取请求头的值   (重点)
- Enumeration<String>   getHeaderNames() : 获取所有的请求头名称
3.获取请求体数据
只有POST请求方式, 才有请求体, 在请求体中封装了POST请求的请求参数
步骤 :
	1. 获取流对象
		* BufferedReader getReader():获取字符输入流,只能操作字符数据
        * ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
    2. 再从流对象中拿数据

其他功能

1.获取请求参数通用方式和中文乱码问题(重点)
String getParameter(String name) :根据一个name获取一个value值 很常用
String[] getParameterValues(String name) :根据一个name获取多个value值
Map<String,String[]> getParameterMap() :获取所有请求参数 很常用

请求参数中文乱码问题(重点)
原因:request缓冲区默认字符集是iso-8859-1不支持中文
解决办法:在获取请求参数之前设置request缓冲区字符集为utf-8
request.setCharacterEncoding("utf-8")
2.Request对象请求转发(重点)
1.请求转发
	request.getRequestDispatcher("/转发的路径,不带虚拟路径").forward(request,response);
2.转发特点: 
	1 请求转发是一次请求一次响应;
	2 请求转发浏览器地址栏不会发生变化
	3 请求转发api中路径不需要携带虚拟路径,默认是访问项目内部资源;
3.Request对象作为域对象(重点)
数据共享(存值、取值、移除值)
    作用范围: 一次请求范围,浏览器发送请求到服务器做成响应结束,请求转发在一次请求范围内;
	创建和销毁时间:浏览器发送请求之后服务器创建request对象,服务器做成相应之后销毁;
	
存值:request.setAttribute(String name,Object value);
取值:Object value=request.getAttribute(String name);
移除值:request.removeAttribute(String name);

Response对象(响应消息)

1.response对象重定向实现页面跳转(重点)

1.重定向
	response.sendRedirect("/带虚拟路径的访问路径");
2.重定向特点
	1. 地址栏发生变化
	2. 重定向可以访问其他站点(服务器)的资源
	3. 重定向是两次请求, 不能使用request对象来共享数据

请求转发(forward)和重定向(redirest)的区别?

请求转发和重定向的区别?
	1.请求转发是一次请求一次响应,重定向是两个请求和两次响应;
	2.请求转发浏览器地址栏不会发生改变,重定向浏览器地址栏会发生改变
	3.请求转发路径不带虚拟目录,重定向路径要带虚拟目录;
	4.如果跳转前后使用request数据传递,那么只能使用请求转发,否则使用重定向;

注意:如果跳转前后使用request数据传递,那么只能使用请求转发,否则使用重定向;

2.web中页面访问路径问题(重点)

1.相对路径:以./或者../开头 ./表示当前路径可以省略不写,../表示上一级目录
	规则: 找到当前资源和目标资源之间的相对位置关系
2.绝对路径: 通过绝对路径可以确定唯一资源
	客户端路径:客户端浏览器访问服务器的路径就叫客户端路径,例如:form表单的action、a标签、img的
src、重定向,需要使用虚拟目录
	服务端路径:服务器内部跳转的路径,请求转发 不需要使用虚拟目录

总结:除了请求转发不需要使用虚拟目录,其他路径都要使用虚拟目录。

3.response响应内容以及中文乱码问题(重点)

1.响应数据:
	response.getWriter().write("数据");
	response.getWriter().print("数据");
区别例如:网页上的显示不同
	response.getWriter().write(97); //a
	response.getWriter().print(97); //97
2.响应中文乱码问题
	原因:1.response缓冲区字符集是iso-8859-1不支持中文;缓冲区字符集和浏览器采用的字符集不一致;
	解决办法:在获取到流对象之前response.setContentType("text/html;charset=utf-8");
		1.设置了response缓冲区字符集为utf-82.告诉浏览器采用utf-8字符集

ServletContext对象

ServletContext作为域对象存值、取值、移除值

作用范围:整个web项目
创建和销毁时间:在服务器启动的时候会为每个web项目创建一个ServletContext对象,代表这个web项目;服务器
关闭了。
存值、取值、移除值api:
存值:request.setAttribute(String name,Object value);
取值:Object value=request.getAttribute(String name);
移除值:request.removeAttribute(String name);

获取文件在服务器中的绝对路径(重点)

获取路径:servletContext.getRealPath("/xx");默认是获取到web目录在服务器中的绝对路径;
	String b = context.getRealPath("/b.txt");//web目录下资源访问
	String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
	String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
	
获取文件输入流:servletContext.getResourceAsStream("/xx");路径和getRealPath路径写法一样
	InputStream is1 = servletContext.getResourceAsStream("/a.txt");
	InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/b.txt");
	InputStream is3 = servletContext.getResourceAsStream("/WEB-INF/classes/c.txt");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值