2021-03-17

学习目标:

小白起飞第47天

学习内容:

软件构成和分层
在这里插入图片描述

Response
Http响应消息
*格式:
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT
(空行)


<span class="katex--inline">Title</span>


hello , response

1) 响应行
1. 组成:协议/版本 响应状态码 状态码描述
2. 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
1. 状态码都是3位数字
2. 分类:
1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
2xx:成功。代表:200
3xx:重定向。代表:302(重定向),304(访问缓存)
4xx:客户端错误。
* 代表:
* 404(请求路径没有对应的资源)
* 405:请求方式没有对应的doXxx方法
5xx:服务器端错误。代表:500(服务器内部出现异常)

2) 响应头:
1. 格式:头名称: 值
2. 常见的响应头:
1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
* 值:
* in-line:默认值,在当前页面内打开
* attachment;filename=xxx:以附件形式打开响应体。文件下载
3) 响应空行
Response对象
HttpServletResponse继承ServletResponse接口,专门封装HTTP响应消息
Response功能
1) 设置响应行
1. 格式:HTTP/1.1 200 ok
2. 设置状态码:setStatus(int sc)
2) 设置响应头:setHeader(String name, String value)
3) 设置响应体:
* 使用步骤:
1. 获取输出流
* 字符输出流:PrintWriter getWriter()
* 字节输出流:ServletOutputStream getOutputStream()
2. 使用输出流,将数据输出到客户端浏览器
response.getWriter().println(“xxxx”);
4)设置编码
response.setContentType(“text/html;charset=utf-8”);

Ajax交互

在这里插入图片描述
初始化数据init
Init方法,最先执行,并且执行只执行一次,默认是第一次请求的时候执行
但是可以通过load-on-startup来设置执行时机
-1 是第一次请求
0和正整数 是启动tomcat的时候执行
结合init的执行时机,所以比较适合做一些数据初始化的工作
1 初始化java中对象或其他
2 初始化xml中的数据
1 局部
2 全局
可以解决硬代码问题,一般用来指定字符编码,和filter一起使用
局部
局部参数的获取,使用config对象调用getlnitParameter(key)获取

全局
全局参数需要使用servletContext获取

作用域
getAttribute
setAttribute
removeAttribute
以上三个方法,是request,session,servletContext都有的,用来向对应的作用域中保存数据,获取数据,删除数据
Request
当前请求有效,如果向request中保存数据,那么仅在当前请求中可以获取
一般用于页面和后端交互是需要进行的数据传递

Session
当前会话有效,建立的持续通信,一般是浏览器打开到浏览器关闭,是一次会话,不过也是可以设置会话时间的
一般用于保存登陆的用户信息
会话中,数据共享
ServletContext
全局有效,只要服务器不关闭,永久存储,服务器关闭,数据消失

只要tomcat不重新启动,数据一直存在,共享
重定向和请求转发
请求转发
1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)

特点:
		1. 浏览器地址栏路径不发生变化
		2. 只能转发到当前服务器内部资源中。
		3. 转发是一次请求

客户无感知跳转,跳转方和被跳转方数据共享(request)

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

区别
rward 和 redirect 区别

Forward是服务器内部跳转,两个页面中数据互通,使用同一个request对象,但是地址栏中依然显示第一次请求的url地址,用户感觉不到页面进行了跳转,也只会发送一次请求。

sendRedirect是重定向,两个页面数据不互通,使用的不是同一个request对象,地址栏中显示的是第二个请求的url地址,会发送两次请求

重定向的特点:redirect
1. 地址栏发生变化
2. 重定向可以访问其他站点(服务器)的资源
3. 重定向是两次请求。不能使用request对象来共享数据
转发的特点:forward
1. 转发地址栏路径不变
2. 转发只能访问当前服务器下的资源
3. 转发是一次请求,可以使用request对象来共享数据

应用场景
1 比如登陆失败,或者被拦截到登陆页面,只要是需要用户输入之后,进行跳转的,一般使用重定向
如果此时使用forward跳转,则地址栏不变,那么此时如果刷新页面(重新请求地址栏),就会弹框,提示是否重复发送

Get请求 不会弹框提示,但是依然会发送
2 比如去后端获取数据,一般请求转发(因为request共享)
查询相关,都是forward
比如 搜索,用户列表
搜索比较特殊,需要传递数据(提交数据),一般搜索肯定使用get请求

如果是post请求,后端大部分使用重定向(一般发送数据使用post)
如果是get请求,后端大部分使用forward(一般获取数据使用get)

学习时间:

学习产出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值