Request和Response

本文详细讲述了在JavaEE环境中,如Tomcat中如何解析和操作HTTP请求(包括GET/POST参数获取和中文乱码处理)、响应数据设置(包括响应头和字符/字节数据流),以及请求转发和重定向的区别和应用场景。
摘要由CSDN通过智能技术生成

Request(请求)&Response(响应)

 Request:获取请求数据

Response:设置响应数据

Request继承体系

 1.Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中。

2.使用request对象,查阅JavaEE API文档的HttpServletRequest接口。

Request获取请求数据

 请求数据分为三部分:

1.请求行:

  •  String getMethod():获取请求方式:GET
  • String getContextPath():获取虚拟目录(项目访问路径):/request-demo
  • StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/request-demo/req1
  • String getRequestURI():获取URI(统一资源标识符):/request-demo/req1
  • String getQueryString():获取请求参数(GET方式):username=zhangsan&password=123

2.请求头

  •  String getHeader(String name):根据请求头名称,获取值

3.请求体

  • ServletInputStream getInputStream():获取字节输入流
  • BufferedReader getReader():获取字符输入流 

Request通过方式获取请求参数:

请求参数的获取方法:

  • GET方式:

  • POST方式:

 Request通过通用方式获取请求参数

Map<String,String> getParameterMap():获取所有参数Map值

String[ ] getParameterValues(String name):根据名称获取参数值(数组)

String getParameter(String name):根据名称获取参数值(单个值)

Request请求参数中文乱码问题

请求参数如果存在中文,则会乱码。

解决方案:

  • POST设置输入流的编码:

  • 通用方式(GET/POST):先编码再解码 

  • URL编码:

1.将字符串按照编码方式转为二进制

2.每个字节转为2个16进制数并在前边加上% 

       //3.转换为字节数据,编码
        byte[] bytes=decode.getBytes("ISO-8859-1");
        /*  for(byte b:bytes){
        System.out.print(b+" ");

         */

        //4.将字节数组转为字符串,解码
        String s = new String(bytes, "utf-8");

 Request的请求转发

请求转发(forward):一种在服务器内部的资源跳转方式 

实现方式:

请求转发资源间共享数据:使用Request对象

  • void setAttribute(String name,Object o):存储数据到request域中
  • Object getAttribute(String name):根据key,获取值
  • void removeAttribute(String name):根据key,删除该键值对

请求转发的特点:

  • 浏览器地址栏不发生变化
  • 只能转发到当前服务器的内部资源
  • 一次请求,可以在转发的资源间使用request共享数据 

 Response

设置响应数据功能介绍 

相应数据分为3部分:

1.响应行:

 void setStatus(int sc):设置响应状态码

2.响应头:

void setHeader(String name,String value):设置响应头键值对

3.响应体:

printWriter getWriter():获取字符输出流

ServletOutputStream getOutputStream():获取字节输出流

Response完成重定向

重定向(Redirect):一种资源跳转方式

实现方式:

 

 重定向特点:

  • 浏览器地址栏路径发生变化
  • 可以重定向到任意位置的资源
  • 两次请求,不能在多个资源中使用request共享数据

 路径问题

 明确路径谁使用?

  • 浏览器使用:需要加虚拟目录(项目访问路径)
  • 服务端使用:不需要加虚拟目录

练习:

  • <a href=‘路径’>        加虚拟目录
  • <form action=‘路径’>      加虚拟目录
  • req.getRequestDisptcher(“路径”)     不加虚拟目录
  • resp.sendRedirect(“路径”)     加虚拟目录

 Response响应字符数据 

 使用:

1.通过Response对象获取字符输出流

PrintWriter writer=resp.getWriter();

2.写数据

writer.write("aaa");

注意:

该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭

中文数据乱码:原因通过Response获取的字符输出流默认编码:IOS-8859-1

resp.setContentType("text/html;charset=utf-8");

Response响应字节数据

 使用:

1.通过Response对象获取字符输出流

2.写数据

 

IOUtils工具类使用

1.导入坐标

 

2.使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值