servlet

Day47 Servlet、跳转方式、ajax交互

  1. 软件构成和分层

在这里插入图片描述

  1. Response
    2.1 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) 响应空行
    

2.2 Response对象
HttpServletResponse继承ServletResponse接口,专门封装HTTP响应消息
2.3 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”);
在这里插入图片描述
在这里插入图片描述

  1. Ajax交互
    后台
    在这里插入图片描述

接收

在这里插入图片描述

JSON
在这里插入图片描述
在这里插入图片描述

  1. 初始化数据init
    Init方法,最先执行,并且执行只执行一次,默认是第一次请求的时候执行
    但是可以通过load-on-startup来设置执行时机
    -1 是第一次请求
    0和正整数 是启动tomcat的时候执行

结合init的执行时机,所以比较适合做一些数据初始化的工作
1 初始化java中对象或其他
2 初始化xml中的数据
1 局部
2 全局

可以解决硬代码问题,一般用来指定字符编码,和filter一起使用
4.1 局部

在这里插入图片描述
在这里插入图片描述

4.2 全局
在这里插入图片描述
在这里插入图片描述

  1. 作用域04125.png)

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

一直都是0
5.2 Session
当前会话有效,建立的持续通信,一般是浏览器打开到浏览器关闭,是一次会话,不过也是可以设置会话时间的
一般用于保存登陆的用户信息

在这里插入图片描述
在这里插入图片描述

会话中,数据共享
5.3 ServletContext
全局有效,只要服务器不关闭,永久存储,服务器关闭,数据消失
在这里插入图片描述在这里插入图片描述

只要tomcat不重新启动,数据一直存在,共享

  1. 重定向和请求转发
    6.1 请求转发
    1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
    2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

在这里插入图片描述

.在这里插入图片描述
在这里插入图片描述

6.2 重定向

在这里插入图片描述
在这里插入图片描述

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

6.3 区别

	forward 和  redirect 区别![在这里插入图片描述](https://img-blog.csdnimg.cn/20210318002738112.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1l6ajEyMzQ1NjEyNQ==,size_16,color_FFFFFF,t_70)

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

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

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

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

在这里插入图片描述

Get请求 不会弹框提示,但是依然会发送

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值