request&response

简介: 一、 乱码问题 1. 出现乱码的原因 1) 在计算机中数据以二进制的形式进行存储的, 数据的传输也是通二进制的形式 2)需要存字符,会出现字符与字节之间的转换 (输入字符 读到的字符) 3) 字符和字节之间如何实现转换? 都是通过查码表 4) 字符到字节是编码,字节到字符是解码, 编码和解码用到了不同码表就会出现乱码问题   2. 解决乱码 1) 拿到乱码基本上都是由于解码

一、 乱码问题

1. 出现乱码的原因

1) 在计算机中数据以二进制的形式进行存储的, 数据的传输也是通二进制的形式

2需要存字符会出现字符与字节之间的转换 (输入字符 读到的字符)

3) 字符和字节之间如何实现转换 都是通过查码表

4) 字符到字节是编码字节到字符是解码 编码和解码用到了不同码表就会出现乱码问题

 

2. 解决乱码

1) 拿到乱码基本上都是由于解码错误导致的 解决办法重新编码再解码

2) 以后将文件交给解析器出现乱码首先想到是否通知别人文件的编码格式

 

二、 Response 对象

1. response getWriter方法获得字符流用于向浏览器输出字符数据

中文乱码问题

 

Servlet

 

getWriter().write(“中国”)

Tomcat

web容器

    中国

    默认编码 iso-8859-1

    63 63

 

    utf-8

    989789

Response

中国

 

IE 浏览器

     63 63 –> ??

 

  gb2312

(解错码)

utf-8

中国

 

2. 文件下载

文件名中文乱码问题

由于文件名是跟着 content-disposition 头发送给浏览器的

凡是http头的数据都会经过 url 编码 编成全世界通用的符号这样传输过程中才不会乱码

 

3. 请求重定向

    发送 302 状态码和 location 头

    ie向浏览器发送了两次请求 第一次直接请求资源第二次重定向的页面

    地址栏是有变化

 

4. getWriter 和 getOutputStream 不能同时使用有冲突

    response的流我们不用关闭交给web容器去管理

 

注意

web容器会在用户首次访问Servlet的时候创建Servlet对象 Servlet一旦创建就会驻留在内存

直到服务器停止或当前web应用被移除 Servlet对象才会销毁

 

web容器会针对用户的每一次请求都创建一个 request 和 response对象 请求结束request和

response就会立即销毁

 

三、 Request 对象

1. request 帮助我们取获取 ie 浏览器发送给 服务器的请求消息 (请求行 消息头 消息体)

 

2. request 获得请求消息

    getParameter getParameterValues

 

3. request 获得请求参数 做验证

    // 根据指定的参数名获得参数值

String name = request.getParameter("name");

//    System.out.println(name);

// 根据指定的参数名获得所有的参数值

String[] preference = request.getParameterValues("preference");

// 迭代数组会有空指针异常如何杜绝

for(int i=0; preference!=null&&i<preference.length; i++)

   System.out.println(preference[i]);

System.out.println("---------------------------------");

// 获得所有的参数名,

// 写个通用的方法将表单的参数封装到bean

// 遍历请求参数   name作为bean的属性名 value作为bean的属性值通过反射批量给javabean对象赋值

Enumeration e = request.getParameterNames();

while(e.hasMoreElements()) {

   name = (String) e.nextElement();

   String value = request.getParameter(name);

  

   System.out.println(name + "=" + value);

}

 

4. request 中文参数乱码问题

 

IE

 

老张

 

url编码 utf-8

 

%E8%80%81%E5%BC%A0

 

tomcat

web容器

     %E8%80%81%E5%BC%A0

  

request对象

 

解码  iso-8859-1

èå¼  乱码

 

程序

 

setCharacterEncoding

设置request编码

 

getParameter()

 

 

 

表单提交post方式下 :  request.setCharacterEncoding(“utf-8”);

                     指定处理消息体的解码方式

 

表单提交get方式下 : 

1) 手动解决乱码问题

    byte[] bytes = username.getBytes("iso-8859-1");

    String str = new String(bytes, "utf-8");

2) 在 %tomcat%\conf\server.xml 中找到当前连接器元素 Connector

配置URIEncoding 属性 它用于指定tomcat对消息头的url解码方式

3 配置useBodyEncodingForURI 属性  指定为 true

 用于让tomcat按照处理消息体的编码方式处理消息头

 

超链接提交参数 也是使用 get 方式提交和表单的区别是表单提交ie自动进行url编码

超链接提交ie不进行url编码此时我们需要将超链接中的中文参数手动进行url编码

在服务器端的处理方式和 表单 get 方式的处理一样

 

5. 请求转发

Servlet 负责对用户的请求做处理处理完的结果交给jsp来做显示

获得 RequestDispatcher 对象做请求转发

请求转发的时候需要将处理结果存入 request 域 带给 jsp

 

请求转发的时候 web容器会清空response中的数据

转发后也无法向response输入数据

在Servlet中不输出任何数据所有数据显示的事情都交给jsp

 

mvc 的过程

1) 用户发送请求提交表单,超链接

2) Servlet 做处理 将数据(响应结果)封装到 javabean对象

3) 将 javabean 对象存入request域

4) 请求转发给 jsp

5) jsp 页面中 从request域取出数据 做显示

 

IE浏览器

Servlet

 

javabean

 

jsp

 

web开发的流程

1. 客户端(IE)发送请求给服务器

2. 用一个 Servlet 来响应

客户的需求基本上分为两种:

1) 查看数据

    请求转发给jsp做显示

2) 用户登陆\购买商品  完成某一个特定的功能  结果都是成功或失败

    请求重定向到一个目标资源

 

 

面试题 请求转发和请求重定向的区别

1) 请求重定向地址栏有变化 请求转发地址栏无变化

2) 请求重定向客户端向服务器发送两次请求 请求转发发送一次请求

3) 应用场景

    一件事情做完了应该做第二件事情了就请求重定向 (用户登陆、购物)

    Servlet处理完了让jsp做显示用请求转发(mvc设计模式)

 

web应用中的路径怎么写

读取web中的文件 用 context 读取路径要写相对于web应用的路径 可以加’/’

 

严禁用绝对路径通通以”/”开头

原则 就看路径是给浏览器用的还是给服务器用的

给浏览器用的要加上web应用的名称

给服务器用的斜线即表示当前web应用

1) 请求转发  地址是给服务器用的 /表示web应用 不用加web应用的名称 /a.jsp

    web.xml文件中用到了路径  给服务器用的, 不需要加web应用  /b.jsp  /servlet/Servlet1

2) 请求重定向  路径给浏览器加上web应用名称  /day06/a.jsp

3) 超链接  路径给浏览器用的/day06/a.jsp

4) 表单的action提交   路径给浏览器用的/day06/a.jsp

5) img标签的src属性   路径给浏览器用的/day06/a.jpg

6) script src  给浏览器用的 /day06/js/a.js

记住 路径以“/”开头请求转发不加web应用名其他的都要加

 

重点复习的

1. Servlet对象创建就驻留在内存 request response 每次请求创建,请求结束就销毁

2. response

    发送响应数据

    状态码和响应消息头的典型应用  302+location实现请求重定向

    response.sendRedirect(url);

 

    getOutputStream用于发送二进制  getWriter用于发送文本  不可同时用

    中文乱码问题

   

    文件下载  文件名乱码问题

3. request

    获得请求参数

    获得各种表单的参数

    在web中对表单进行验证

    请求参数中文乱码问题

 

    请求转发  mvc设计模式

 

4. 请求重定向和请求转发的区别

 

5. 在web中路径怎么写

 

 

 

目录
相关文章
|
小程序 JavaScript 内存技术
用uni-app开发一个名为汉兜的游戏
虽然我是带队,但我希望尽可能让队员们自己去完成游戏的代码部分,我负责出出主意,提供一些美术,玩法创意上的支持。其实一开始大家头脑风暴组队领游戏创意的时候,汉兜这个游戏一直没人领,不得不说,不知道叫啥名队的小伙伴执行力很强,连给游戏起名字都很快,一点都不拖泥带水。
2285 0
用uni-app开发一个名为汉兜的游戏
|
数据采集 人工智能 自然语言处理
中科大联合华为诺亚提出Entropy Law,揭秘大模型性能、数据压缩率以及训练损失关系
【8月更文挑战第14天】中科大与华为联合提出的Entropy Law理论,揭示了大语言模型性能与数据压缩率及训练损失的关系,指出低压缩率和高数据一致性有利于提升模型效能。基于此,开发出ZIP数据选择算法,通过多阶段贪婪策略优选低冗余样本,有效提高了模型训练效率和性能,同时降低了计算成本。这一成果为优化大模型训练提供了新途径。论文详述请见链接:https://arxiv.org/pdf/2407.06645。
337 65
|
SQL Java 数据库连接
什么是JDBC(Java Database Connectivity)?
JDBC(Java Database Connectivity)是Java语言用于连接和操作数据库的一个标准API。它提供了一种统一的方法来访问不同的数据库系统,使得Java程序能够与数据库进行交互,执行SQL语句,并处理查询结果。
227 0
|
SQL 安全 网络安全
与WAF的“相爱相杀”的RASP
WAF(Web Application Firewall)和新兴的RASP(Runtime Application Self-Protection)都是保护Web应用安全的工具。WAF专注于HTTP流量分析,防止恶意行为,但易受误报困扰,可被加密和混淆流量绕过,且难以防御0day漏洞。RASP则通过应用内部监控减少误报和漏报,能防御加密流量,但对宏观流量监控不足,可能影响性能和兼容性。RASP并非要替代WAF,两者结合使用,WAF提供流量预警和防御大流量攻击,RASP则擅长拦截混淆流量和优化业务场景,共同增强应用安全防护。
|
传感器 机器学习/深度学习 算法
Nvidia Isaac Sim介绍 入门教程 2024(1)
Nvidia Isaac Sim是一个为NVIDIA Omniverse平台开发的机器人仿真工具包,提供高保真度的物理仿真和多传感器RTX渲染,支持ROS2并能够生成合成数据集,用于机器人的设计、调试、训练和部署。
2232 0
对偶定理的介绍
对偶定理:问题的对偶性与解的对偶性 一、引言 对偶定理是数学中的一个重要概念,它描述了问题的对偶性与解的对偶性之间的关系。通过对偶定理,我们可以将一个问题转化为其对偶问题,并通过解决对偶问题来解决原问题。本文将介绍对偶定理的概念、证明方法以及应用场景。 二、对偶定理的概念 对偶定理是指在某些情况下,一个问题的对偶问题与原问题具有相同的性质和结构。对偶问题是通过对原问题的变量、约束条件或目标函数进行转换而得到的。对偶定理认为,如果原问题的解存在,则对偶问题的解也存在,并且两个问题的解具有一种对应关系。 三、对偶定理的证明方法 对偶定理的证明方法通常是通过构造一个对偶映射来进行推导。具体步骤
589 0
|
Java 应用服务中间件 数据库连接
【软件版本】软件版本GA、RC、Beta、Alpha等的详细解释和含义
【软件版本】软件版本GA、RC、Beta、Alpha等的详细解释和含义
950 0
|
安全 Linux Shell
Linux - ulimit命令详解与修改不生效
Linux - ulimit命令详解与修改不生效
1777 1
深入理解AMBA总线(十四)AXI Ordering Model、非对齐访问等
深入理解AMBA总线(十四)AXI Ordering Model、非对齐访问等
2452 1