Response和ServletContext对象

本文介绍了Java Servlet中的Response对象和ServletContext的概念。响应行包括协议版本、状态码和状态信息,常用状态码如200、302、304、403和404。响应头涉及location、content-type等。ServletContext作为全局存储,生命周期长,适用于跨页面数据共享。对比了ServletContext与request域的区别,以及转发和重定向的不同特点。

概述

Response对象是服务器(tomcat)把用户处理的数据经过处理后通过response对象再次发送到客户端,也称之为响应信息,在C/S结构中,请求信息和响应信息总是成对存在的。

响应行

  • 响应行包(HTTP/1.1 200)括协议版本、状态码、状态码对应的信息。
  • response.setStatus(int i); 设置响应状态码,并不按照该状态码显示页面信息。一般用来执行1xx,2xx,3xx.
  • response.sendError(int I, String mes); 设置响应状态码和显示的信息,并按照状态码执行页面信息。一般用来执行4xx,5xx。

常见状态码:

  • 200: 请求成功,出太状态码表示增长状态。
  • 302: 请求重定向,请求的资源临时从不同的URI响应请求。
  • 304: 缓存,从浏览器的缓存中读取数据,而不是服务器。
  • 403: 服务器已经理解请求,但拒绝执行,一般出现在权限不足时出现。
  • 404: 请求失败,请求的资源在服务器中未找到。
  • 500: 服务器出现错误。

响应头

响应头有很多,常见的响应头有:

  • location:重定向一个地址

    response.setStatus(302);
    response.setHeader("location","Servlet名称/html文件名称")// 简易写法
    response.sendRedriect("urlpaterns地址/html文件名称");
    
  • content-type:通常用来设置响应编码字符集

    // 一下两种效果相同
    response.setHeader("content-type","text/html;charset=utf-8");
    response.setContentType("text/html;charset=utf-8");
    
  • content-disposition: 通知浏览器以何种方式下载数据

  • // attachment 以附件的形式下载数据
    // 文件名称必须是英文,不人会发生乱码问题
    response.setHeader("contnt-disposition","attachment;filename=文件名称")

    refresh:定时刷新页面

    response.setHeader("refresh","3"); // 第二个参数是定时刷新时间
    response.setheader("refresh","3;url=urlpaterns地址/html文件名称")//定时跳转到指定页面
    

响应体

所谓的响应体就是浏览器在请求服务器时把你要请求的信息从服务器下载到浏览器的缓存中,供用户看到相应的内容,一下是抓包的响应体的内容(个人写的页面)。
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <a href="ResponseLineServlet">状态码</a><br>
    <a href="ResponseHeaderServlet">重定向</a><br>
    <a href="ResponseHeaderRefreshServlet">定时刷新</a><br>
    <a href="ResponseHeaderBodyServlet">响应体</a><br>
    <a href="DownLoadImgServlet">下载</a><br>
    <a href="checkcode.html">验证码</a><br>

  </body>
</html>

ServletContext

servletContext是一个容器,用来存储数据(以键值对形式存储),servletContext存储的数据不仅可以供该项目下所有的servlet使用,还可以在整个项目中使用,

生命周期:随着tomcat第一次使用创建,tomcat销毁时销毁。

API介绍:

// 获得ServletContest对象
ServletContext context = getServletContext();
// 往servletContext域中存储数据
context.setAttribute("username","tom");
// 获取servletContext域中的数据
Object obj = context.getAttribute("username); //由于不知道value中存储的是什么类型的数据,用超类接收。
context.removeAttribute("username");// 移除域中的数据

ServletContext和request域的区别

  • 页面转发时:两个域对象都能获取到域中的值。
  • 页面重定向:ServletContext域可以获取到域中的数据,request域不能获取到数据。
  • 生命周期:ServletContext域随着tomcat第一次使用创建,tomcat销毁时销毁。request域请求时创建,请求完毕销毁。

转发和重定向的区别

  • 转发再一次请求中完成,重定向多次请求。
  • 转发地址栏不发生变化,重定向请求一次地址栏发生一次变化。
  • 转发只能在站内跳转,重定向可以站内站外跳转。
  • 转发可以在一次请求中共享数据,重定向是两次请求,不能共享数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值