给政府做网站的科技公司免费十八种禁用网站
简介
Request(请求) & Response(响应)
浏览器会向服务器发送请求数据,服务器也需要返回响应数据给浏览器,因此我们需要设置对应的类来代表请求数据和响应数据,且Servlet中的service方法就需要对应的请求数据和响应数据的参数
Request:存放请求数据,可以通过request对象来获取请求数据
Response:存放响应数据,可以通过response对象设置响应数据
Resquest
Request继承体系
1.Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中
2.Tomcat的实现类实现至HttpServletRequest接口,因此使用resquest对象时,可以查阅JavaEE API文档的HttpServletRequest接口
Resquest获取请求数据
获取请求数据
请求数据分为3部分:
1.请求行:
注:getRequestURL()返回的参数为StringBuffer类型,其他方法返回的参数均为String类型
2.请求头
该方法可以通过请求头的名称来得到对应的值
3.请求体
这两个方法分别会返回字节输入流和字符输入流,通过返回的输入流即可读取请求体
若请求体中为字符串信息,则使用字符输入流即可
若请求体中包含图片等信息,则需要使用字节输入流
通用方式获取请求参数
Request在得到请求数据后,会自动解析请求参数,如图,先将参数分离,再将名称和值分离,最后封装到Map集合中,且由于名称可能会重复,即键可能会重复,因此值为数组类型
Request对象提供相应的方法来得到请求参数
idea更改Servlet模板
在使用通用方式获取请求参数后,屏蔽了GET和POST的请求方式代码的不同,则代码可以定义为如下格式:
在idea中,当jar包中包含Servlet后,创建类时可以直接创建Servlet类,会自动继承相应的类,并且重写方法,但默认模板中方法中不包含任何内容,路径格式也和图片不同,因此可以更改模板的样式
方法如下:
请求参数中文乱码处理
请求参数中包含中文时会乱码
POST
POST获取请求参数时会获取一个字符输入流,并通过流来读取数据,而Tomcat默认该流的编码不是UTF-8,因此会出现中文乱码现象,更改默认流的编码即可
GET
乱码原因:
浏览器在得到中文数据后会使用UTF-8来对其进行URL编码,但Tomcat的解码为ISO_8859_1,且没有提供更改方式,因此导致乱码
解决方案:
可以将得到的乱码的数据编码成字节数组,在对字节数组进行解码
注:
1.图中使用的是编码方式的常量,有自动提示,也可以直接使用字符串来表示对应的编码方式
2.这个方法是通用方法,也适用POST
Tomcat 8.0 之后已经将GET请求乱码的问题解决,设置默认的解码方式为UTF-8
请求转发
请求转发(forward):一种在服务器内部的资源跳转方式
实现方式
该代码中只有资源B的路径需要修改
请求转发资源间共享数据
我们可以将一些数据通过Request对象从一个资源带到另一个资源
以上三个Request对象的方法,分别代表
将数据储存到request域中(需要提供一个字符串类型的键,和任意类型的值)
从request域中得到值(需要提供键名)
从request域中删除键值对(需要提供键名)
请求转发特点
1.浏览器地址栏路径不发生变化
2.只能转发到当前服务器的内部资源
3.一次请求,可以在转发的资源间使用request共享数据
Response
Response继承体系
Response设置响应数据
响应数据分为3部分:
1.响应行
2.响应头
3.响应体
Response完成重定向
重定向
重定向(Redirect):一种资源跳转方式
如图,浏览器向资源A发送请求,资源A向浏览器响应,告知需要重定向以及资源B的路径,浏览器再次向资源B发送请求
实现方式
如图,需要设置状态码为302来告知浏览器需要重定向,以及需要响应头中设置重定向的资源路径
可以简化成一行代码
重定向特点
1.浏览器地址路径发生变化(两次请求均由浏览器发出,地址为访问资源A,在访问后地址会变为资源B)
2.可以重定向到任意位置的资源(服务器内部、外部均可)
3.两次请求,不能在多个资源使用request共享数据
资源路径问题
在进行请求转发和重定向时,对应的资源B的路径一个需要加虚拟目录,一个不需要
标准:明确路径是谁在使用
浏览器使用:需要加虚拟目录(项目访问路径)
服务端使用:不需要加虚拟目录
例:
如图,分别为
超链接:由浏览器访问,加虚拟目录
表单:由浏览器发送,加虚拟目录
请求转发:在服务端内部使用,不加虚拟目录
重定向:由浏览器访问,加虚拟目录
由于可以在pom.xml中使用<configuration>下的<path>标签来修改虚拟路径的地址,因此在使用虚拟路径时,可以动态的获取虚拟目录,来降低代码的耦合性
响应字符数据
使用
1.通过Response对象获取字符输出流
2.写数据
注意事项
1.响应数据时可以响应标签,如:
在相应时会将“aaa”设置成标题1的形式
但是默认浏览器会将标签当作字符串来识别,因此需要设置对应的响应头,如图
该代码设置了响应头,届时浏览器会以html的解析引擎来解析响应数据
2.中文乱码
由于tomcat通过Response获取的字符输出流默认编码为:ISO-8859-1,因此输出中文时会乱码,可以通过下述方法解决
response.setContentType("text/html;charset=utf-8");
该方法可以同时设置响应头和流的编码,即该行代码可以同时解决识别标签和中文乱码的问题
3.得到的字符输出流不需要关闭,在响应结束后,response对象销毁,该流会随之关闭
响应字节数据
使用
1.通过response对象获取字节输出流
2.写数据
IOUtils工具类使用
可以通过该工具类快速完成复制等操作
1.导入坐标
2.使用