JavaWeb中Request和Response

request,response顾名思义就是请求行和响应体,request为客户端向服务器发送的请求消息,响应体则是服务器接收到请求做出的应答。

Request

获取请求行,头的数据

req为实例化request对象,有很多方法可以调用用来获取请求行和请求头信息

 System.out.println(req.getMethod());//请求方法
        System.out.println(req.getParameter("username"));//对应参数名的输入内容
        System.out.println(req.getContextPath());//虚拟项目名字
        System.out.println(req.getQueryString());//所有参数跟对应值,相邻用&
        System.out.println(req.getServletPath());//获取项目下的servlet的路径
        System.out.println(req.getRequestURL());//stringBuffered
        System.out.println(req.getRequestURI());//string
        System.out.println(req.getHeader("cookie"));//直接获取对应请求头中属性的值
        Enumeration<String> headerNames = req.getHeaderNames();
        while (headerNames.hasMoreElements())//获取请求头中所有的属性名称(枚举)     
        {
            String names = headerNames.nextElement();

            System.out.println(names+""+req.getHeader(names));
        }
获取请求体数据

请求体只有post请求有,作用其实就是把参数从路径请求移到请求体做一个封装来增加数据的安全性。

我们可以通过获取流对象来获取请求体中的内容,原理跟IO流一致,不过我们只需要通过get方法就能获取流对象

//获取字符输入流
BufferedReader reader = req.getReader();
String line = null;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
//获取字节输入流
ServletInputStream in = req.getInputStream();
byte[] bytes = new byte[1024];
int len = -1;
while ((len = in.read(bytes)) > 0) {
    System.out.println(new String(bytes, 0, len));
}
请求转发

请求转发是在一次请求中转到另一个对应路径下的资源文件,浏览器地址路径不发生变化。

通过request中的请求转发器对象进行实现,我们需要注意因为这是一次请求内的转发,所以我们需要把requset和response放在forword中一起转发过去。

req.getRequestDispatcher("/转移对应路径").forward(requset,response);
共享数据
  1. 域对象:一个有作用范围的对象,可以在范围内共享数据

  2. request域:代表一次请求范围,一般用于请求转发的多个资源数据

    setAttribute(String name, Object object) // 存储数据
    getAttribute(String name) // 通过键获取数据
    removeAttribute(String name) // 通过键移除数据
    

Response

响应行

组成:协议/版本 响应状态码 状态码描述

响应状态码:服务器告诉客户端浏览器本次请求响应的一个状态,都是三位数

  • 1xx:服务器接收客户端消息,但是没有接收完成,等待一段时间后,发送1xx状态码
  • 2xx:成功,200
  • 3xx:重定向。302重定向,304访问缓存
  • 4xx:客户端错误。404找不到后台地址
  • 5xx:服务器端错误。500服务器内部错误
响应头

content-type:服务器告诉客户端本次响应的数据格式和对应的编码格式

content-disposition:服务器告诉客户端以什么格式打开本次响应数据

  • in-line:默认格式,当前页打开

  • “attachment,filename=aaa”:以附件的形式打开响应体,并下载

  • resp.setHeader("content-disposition","attachment,filename=aaa")
    
响应体

向客户端返回数据

  • 设置响应行

​ 格式:HTTP/1.1 200 ok

​ setSataus(int x)

  • 设置响应头

​ setHeader(String name,String value)

  • 设置响应体
response.getWirter.wirter(内容);
response.getOutputStream.wirter(内容);
response.setContent-type("text/plain;charset=utf-8");解决乱码问题

重定向

重定向就是设置状态码为302,告诉浏览器要重定向,再给浏览器访问地址,浏览器再次请求达到重定向,与转发不同的是重定向是俩次请求

  1. 返回状态码302,告诉浏览器要重定向

  2. 设置响应头的Location,告诉浏览器要重定向的地址

  resp.sendRedirect("/路径");
//        //sendRedirect就是对下面俩方法进行了一层封装
//        //设置状态码
//        resp.setStatus(302);
//        //将header中的地址改成所要跳转的地址
//        resp.setHeader("Location","/路径");

ServletContext

servletContext也可以被称为servlet上下文,服务器会为每个工程创建一个servletContext,是整个工程中共用的全局对象,是唯一的,所以也叫全局应用程序共享对象。

作用
  • 是一个域对象
  • 可以读取全局配置参数
  • 可以搜索当前工程目录下面的资源文件
域对象方法

凡是域对象都有三种方法

setAttribute(Attribute name);设置数据
getAttribute(Attribute name);获取数据
removeAttribute(Attribute name);移除数据
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值