java web5(黑马)

Request & Response

作用: Request:获取请求数据 Response:设置响应数据

Request

继承体系

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

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

获取请求数据

1.获取请求数据

>请求行: GET /request-demo/req1?username=zhangsan HTTP/1.1

String getMethod(): 获取请求方式:GET

String getContextPath(): 获取虚拟目录(项目访问路径): /request-demo

StringBuffer getRequestURL(): 获取URL(统一资源定位符): http://localhost:8080/request- demo/req1

String getRequestURl(): 获取URI(统一资源标识符): /request-demo/req1

String getQueryString(): 获取请求参数(GET方式)): username=zhangsan&password=123

>请求头: User-Agent: Mozilla/5.0 Chrome/91.0.4472.106

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

>请求体: username=superbaby&password=123

ServletInputStream getlnputStream(): 获取字节输入流

BufferedReader getReader(): 获取字符输入流

2.通用方式获取请求参数

1. Map<String,String\[\]> getParameterMap(): 获取所有参数Map集合

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

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

>使用通用方式获取请求参数后,屏蔽了GET和POST的请求方式代码的不同,则代码可以定义为如下格式:

@webServlet("/reqDeno3")

public class RequestDemo3 extends HttpServlet {
@0verride
protected void doGet(HttpServletRequest req,HttpServletResponse resp){

}
@0verride

protected void doPost(HttpServletReguest reg, HttpServletResponse resp){

this.doBet(req,resp);

}

}

>可以使用Servlet模板创建Servlet更高效

3.请求参数中文乱码处理
  1. 请求参数如果存在中文数据,则会乱码

  2. 解决方案:

>POST:设置输入流的编码

req.setCharacterEncoding("UTF-8");

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

new String(username.getBytes("ISO-8859-1"),"UTF-8");

  1. URL编码

>将字符串技照编码方式转为二进制

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

  1. URL编码实现方式:

编码: URLEncoder.encode(str, "utf-8");

解码: URLDecoder.decode(s,"lSO-8859-1");

注:Tomcat 8.0 之后,已将GET请求乱码问题解决,设置默认的解码方式为UTF-8

请求转发

  1. 请求转发(forward):一种在服务器内部的资源跳转方式
  1. 实现方式: reg.getRequestDispatcher("资源B路径").forward(req,resp);

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

>void setAttribute(String name,Object o):存储数据到request城中

>Object getAttribute(String name): 根据 key,获取值

>void removeAttribute(String name):根据 key,删除该键值对

  1. 请求转发特点:

>浏览器地址栏路径不发生变化

>只能转发到当前服务器的内部资源

>一次请求,可以在转发的资源间使用request共享数据

Response

设置响应数据功能介绍

响应数据分为3部分:

  1. 响应行: HTTP/1.1 200 OK

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

  1. 响应头: Content-Type: text/html

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

  1. 响应体: <html><head>head><body></body></html>

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

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

完成重定向

  1. 重定向(Redirect):一种资源跳转方式
  1. 实现方式:

resp.setStatus(302);

resp.setHeader("location","资源B的路径");

resp.sendRedirect("资源B的路径");

  1. 重定向特点:

>浏览器地址栏路径发生变化

>可以重定向到任意位置的资源(服务器内部、外部均可)

>两次请求,不能在多个资源使用request共享数据

响应字符数据

  1. 使用:

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

PrintWriter writer = resp.getWriter();

>写数据

writer.write("aaa");

  1. 注意:

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

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

resp.setContentType("texthtml;charset=utf-8");

响应字节数据

1.使用:

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

SemietOutputStream outputStream = resp.getOutputStream();

>写数据

outputStream.write(字节数据);

2.lOUtils工具类使用

>导入坐标

<dependency>

<groupld>commons-io</groupld>

<artifactld>commons-io</artifactld>

<version>2.6</version>

</dependency>

>使用

lOUtils.copy(输入流,输出流);

相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔5 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
不好听6135 小时前
从一行 JSX 到屏幕像素:前端开发者必须懂的浏览器渲染管线
前端
恒拓高科WorkPlus5 小时前
企业级内网即时通讯建设模型:BeeWorks内网IM四层架构
前端
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
前端小李子6 小时前
前端环境变量裸奔?我用 EnvShield 给它穿了件防弹衣
前端
youtootech6 小时前
HarmonyOS《柚兔学伴》项目实战25-我的页面、Web 嵌入与项目总结
前端·华为·harmonyos
小林ixn7 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言