四、Servlet之请求与响应

HeetpServletResponse接口

来自于Servlet规范

接口位于tomcat的servlet-api.jar中。 HttpServletResponse接口实现类由Http服务器提供,该接口负责将doXXX方法的执行结果写到报文的实体体部分。这个接口实现对象也被叫做响应对象。

主要功能:

  • 将执行结果以二进制写入响应体(响应报文的实体体)中
  • 设置响应报文首部行中的[content-type]属性值,从而控制浏览器采用对应的方式将二进制解析为文字、图片、命令
  • 设置响应报文首部行中location属性,将一个请求地址赋值给location。从而控制浏览器向指定服务器再度发送请求。

注意事项

1、tomcat中有一个连接响应报文的输出流,通过响应对象,能拿到输出流 通过输出流,将结果以二进制写到响应体中,注意,这个输出流不是response创建的,是借用的,不用关闭

2、在默认的情况下 content-type = “text” 浏览器把响应体内容当成文本去解析一定要在得到输出流之前,通过响应对象对[content-type]进行一次重新赋值,用于指定浏览器的解析方式。
respnonse.setContentType(“text/html;charset = utf-8”);

3、 默认情况下响应头(首部行)中是没有location属性的,浏览器在接收到相应包之后,如果发现有locaiton属性,就会自动对location地址发起GET请求,从而重定位到location。

后端工程师控制浏览器行为的方式:通过响应对象,将地址赋值给响应头中的location属性

HttpServletRequest接口

自于Servlet规范

在Tomcat中的servlet-api.jar。HttpServlet接口实现类由Http服务器负责提供。这个接口实现类对象负责在doXXX方法运行时读取Http请求协议包中信息,因此它也被称为请求对象

主要功能:

  • 可以读取Http请求协议包中,
  • 可以读取保存在Http请求协议包中请求行信息、请求头、请求体中的信息
  • 可以代替浏览器向Http服务器申请资源文件调用
通过请求对象,读取请求行中的url信息
    String url = request.getRequestURL().toString();
  
通过请求对象,读取请求行中method信息
    String method = request.getMethod();
    
读取uri信息:资源文件精准定位地址,在请求行中,并没有uri属性,uri是从url中截取的一个字符串,格式是:/网站名/资源文件名。
    String uri = getRequestURI();

将所有请求参数名称保存到一个枚举对象返回
    Enumeration paramNames = getParameterNames();

    while(paramNames.hasMoreElements()){
	String paramName = (String)paramNames.nexElement();
	System.out.println("请求参数:" +paramName);
    }

    根据参数名称读取参数的值,不管是参数在请求头还是请求体
    String value = request.getParameter(paramName);

一个问题:

以GET方式发送中文请求参数内容,Http服务器可以将其解释为正确结果
以POST方式发送中文请求参数内容,Http将其解释为乱码 why?

若浏览器以GET方式发送请求,请求参数保存在请求头中,在Http请求协议包到达Http服务器后,第一件事就是解码,请求头中的二进制内容由Tomcat负责解码,Tomcat9.0默认使用utf-8字符集,可以解释一切国家的文字

以POST方式发送请求,请求参数保存在请求体中,请求体中的二进制内容由当前的请求对象request解码,它默认使用[ISO-8859-1]字符集无法解码中文,只能得到乱码。

解决方案在POST请求方式下,在读取请求体内容之前,应该先通知请求对象的合适的字符集进行解码,”哥们,你刚才理解错了“

request.setCharacterEncoding(“utf-8”);

请求对象和响应对象他们的生命周期

1、创建:Tomcat接受到浏览器所发送的Http请求协议包之后,自动为当前的Http请求协议包,生成一个请求对象,一个响应对象

假如Http请求协议包索要的是one—>OneServelt,Tomcat会new一个oneServlet对象,然后调用它的service方法,进而进一步调用doXXX方法。注意,此时请求对象和响应对象要作为实参传递到doXXX方法中。

因为在doXXX方法中,可能需要请求对象来获取请求报文的信息,也一定需要响应对象来写入响应报文信息doXXX方法运行完毕时,意味着本次的请求也处理完毕,此时在服务端会有一个响应协议包出现,tomcat推送其回至浏览器

2、销毁 :在推回之前,tomcat会销毁掉这两个对象。

这两个对象生命周期就是一次请求的处理周期。

请求对象相当于浏览器在服务端的嘴巴,跟服务器“说”一些信息
响应对象相当于浏览器在服务端的耳朵,从服务器“听”一些信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值