Response ServletContext 中文乱码 Request 编码 请求行 共享数据 转发重定向
Day35 Response
1.1.1 ServletContext概念
u 项目的管理者(上下文对象),服务器启动时,会为每一个项目创建一个对应的ServletContext对象.
1.1.2 ServletContext获取
u 方式1. getServletConfig().getServletContext()
u 方式2: request.getServletContext()
u 方式3: getServletContext()
1.1.3 ServletContext作用 整个web应用有效
u 获取全局的初始化参数
u 数据共享(servlet通信)
u 获取资源文件
u 其他操作…
数据共享,用这个对象存取的数据可以在整个WEB应用中获得。可以使用如下方法存取数据
方法名 |
描述 |
setAttribute(String name,Object object) |
向ServletContext中存数据 |
getAttribute(String name) |
从ServletContext中取数据 |
removeAttribute(name) |
从ServletContext中移除数据 |
常见响应头:
location 执行响应信息的路径,需要与状态码302配合使用,完成跳转. (重定向)
特点: 多次请求对应多次响应
应用场景: 用户登录成功以后, 重定向到首页
content-Type 响应正文的类型(MIME类型)
应用场景: 处理响应中文乱码
Refresh定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。
content-Disposition 通知浏览器以下载的方式解析正文.取值:attachment;filename=xxx.zip
应用场景: 文件下载
n void setHeader(String name, String value)
u 用给定名称和值设置响应头。如果已经设置了头,则新值将重写以前的值。containsHeader 方法可用于测试在设置其值之前头是否存在
n public void setContentType(String type)
u 设置将发送到客户端的响应的内容类型,如果该响应尚未提交。给定内容类型可能包含字符编码规范,例如 text/html;charset=UTF-8。如果在调用 getWriter 之前调用此方法,则只根据给定内容类型设置响应的字符编码
u 作用:处理中文乱码
l 方式1:设置头信息 response.setHeader("content-Type","text/html;charset=UTF-8");
l 方式2:response.setContentType("text/html;charset=UTF-8") (常用方法)
l 响应体
n getOutPutStream();字节流。可以发送任意数据,但发送字符繁琐,一般不使用发送字符(汉字)。
u 应用场景:发送字节(图片、视频、音频等)
n 字符流【最常用】。一般常用与响应数据。
u 应用场景:文本
注意事项:同时获得两个流对象时会报错.
l 文件下载原理
n 设置响应头
u response.setHeader(“content-Disposition”,”attachment;filename=xxx.zip”);
u response.setConetentType(“MIME类型”); -- 老版本浏览器需要添加
1.1.1 response解决中文输出乱码问题
l 第一种方式:
// 设置HttpServletResponse使用utf-8编码,此数据提供给tomcat使用。
response.setCharacterEncoding("utf-8");
// 通知浏览器查看编码为utf-8
response.setHeader("Content-Type","text/html;charset=utf-8");
l 第二种方式:
// 使用通用方法,setContentType底层自动调用了setCharacterEncoding
response.setContentType("text/html;charset=utf-8");
Response.getoutpustream’ ’ 和response.getwtriter
Day36 Request
1.设置编码方式
在HttpServletRequest接口中,提供了一个setCharacterEncoding()方法,该方法用于设置request对象的解码方式,接下来,对文件4-14进行修改,修改后的代码如文件4-15所示。该方法用于返回请求消息的实体部分的字符集编码
从图4-22可以看出,控制台输出的参数信息没有出现乱码。需要注意的是,这种解决乱码的方式只对POST方式有效,而对GET方式无效。为了验证GET方式的演示效果,接下来,将form.html文件中method属性的值改为“GET”。重新访问form.html页面并填写中文信息,控制台的打印结果如图4-23所示。
从图4-23中可以看出,使用GET方式提交表单,用户名出现了乱码,这就验证了setCharacterEncoding()方法只对POST提交方式有效的结论。为了解决GET方式提交表单时出现的中文乱码问题,接下来,对文件4-15进行修改,在第10行和第11行代码之间增加一行代码,如下所示:
name=new String(name.getBytes("iso8859-1"),"utf-8");
1.1.1 获得请求行信息(了解)
方法声明 |
功能描述 |
String getMethod() |
该方法用于获取HTTP请求消息中的请求方式(如GET、POST等) |
String getRequestURI() |
该方法用于获取请求行中资源名称部分,即位于URL的主机和端口之后、参数部分之前的部分 |
String getQueryString() |
该方法用于获取请求行中的参数部分,也就是资源路径后面问号(?)以后的所有内容 |
String getProtocol() |
该方法用于获取请求行中的协议名和版本,例如,HTTP/1.0或HTTP/1.1 |
String getContextPath() |
该方法用于获取请求URL中属于WEB应用程序的路径,这个路径以“/”开头,表示相对于整个WEB站点的根目录,路径结尾不含“/”。如果请求URL属于WEB站点的根目录,那么返回结果为空字符串("") |
String getServletPath() |
该方法用于获取Servlet的名称或Servlet所映射的路径 |
String getRemoteAddr() |
该方法用于获取请求客户端的IP地址,其格式类似于“192.168.0.3” |
1.1.2 获得请求体信息(重点)
在实际开发中,经常需要获取用户提交的表单数据,例如,用户名、密码、电子邮件等,为了方便获取表单中的请求参数,在HttpServletRequest接口中,定义了一系列获取请求参数的方法,如表4-4所示。
表1-1 获取请求参数的方法
方法声明 |
功能描述 |
String getParameter(String name) |
该方法用于获取某个指定名称的参数值,如果请求消息中没有包含指定名称的参数,getParameter()方法返回null;如果指定名称的参数存在但没有设置值,则返回一个空串;如果请求消息中包含有多个该指定名称的参数,getParameter()方法返回第一个出现的参数值 |
String[] getParameterValues(String name) |
HTTP请求消息中可以有多个相同名称的参数(通常由一个包含有多个同名的字段元素的FORM表单生成),如果要获得HTTP请求消息中的同一个参数名所对应的所有参数值,那么就应该使用getParameterValues()方法,该方法用于返回一个String类型的数组 |
Enumeration getParameterNames() |
getParameterNames()方法用于返回一个包含请求消息中所有参数名的Enumeration对象,在此基础上,可以对请求消息中的所有参数进行遍历处理 |
Map getParameterMap() |
getParameterMap()方法用于将请求消息中的所有参数名和值装入进一个Map对象中返回 |
1.1.3 通过Request对象传递数据
Request对象不仅可以获取一系列数据,还可以通过属性传递数据。在ServletRequest接口中,定义了一系列操作属性的方法,具体如下:
l setAttribute()方法 -- 添加共享数据
该方法用于将一个对象与一个名称关联后存储进ServletRequest对象中,其完整语法定义如下:
public void setAttribute(java.lang.String name,java.lang.Object o);
需要注意的是,如果ServletRequest对象中已经存在指定名称的属性,setAttribute()方法将会先删除原来的属性,然后再添加新的属性。如果传递给setAttribute()方法的属性值对象为null,则删除指定名称的属性,这时的效果等同于removeAttribute()方法。
l getAttribute()方法 – 获得共享数据
该方法用于从ServletRequest对象中返回指定名称的属性对象,其完整的语法定义如下:
public java.lang.String getAttribute (java.lang.String name);
l removeAttribute()方法 – 移除共享数据
该方法用于从ServletRequest对象中删除指定名称的属性,其完整的语法定义如下:
public void removeAttribute(java.lang.String name);
l getAttributeNames()方法 – 获得所有属性名
该方法用于返回一个包含ServletRequest对象中的所有属性名的Enumeration对象,在此基础上,可以对ServletRequest对象中的所有属性进行遍历处理。getAttributeNames()方法的完整语法定义如下:
public java.util.Enumeration getAttributeNames();
需要注意的是,只有属于同一个请求中的数据才可以通过ServletRequest对象传递数据。关于ServletRequest对象操作属性的具体用法,将在后面的小节进行详细讲解。在此,大家只需了解即可。
l 获取RequestDispatcher对象的方法
方法声明 |
功能描述 |
getRequestDispatcher(String path) |
返回封装了某个路径所指定资源的RequestDispatcher对象。其中,参数path必须以 “/”开头,用于表示当前Web应用的根目录。需要注意的是,WEB-INF目录中的内容对RequestDispatcher对象也是可见的,因此,传递给getRequestDispatcher(String path)方法的资源可以是WEB-INF目录中的文件 |
获取到RequestDispatcher对象后,最重要的工作就是通知其它Web资源处理当前的Servlet请求,为此,在RequestDispatcher接口中,定义了两个相关方法,如表4-6所示。
l RequestDispatcher接口的方法
方法声明 |
功能描述 |
forward(ServletRequest request, ServletResponse response) |
该方法用于将请求从一个Servlet传递给另外的一个Web资源。在Servlet中,可以对请求做一个初步处理,然后通过调用这个方法,将请求传递给其它资源进行响应。需要注意的是,该方法必须在响应提交给客户端之前被调用,否则将抛出IllegalStateException异常 |
include(ServletRequest request, ServletResponse response) |
该方法用于将其它的资源作为当前响应内容包含进来 |
表4-6列举的两个方法中,forward()方法可以实现请求转发,include()方法可以实现请求包含,关于请求转发相关知识,将在下面的小节中进行详细讲解。
请求包含:就是将当前页面和被包含页面的输出结果,合并一起响应给浏览器。
l 请求转发和重定向的区别
n 重定向的地址栏会发生变化,转发的地址栏不变
n 重定向多次请求多次响应,转发一次请求一次响应.
n 重定向路径需要加上工程名(项目名),转发不需要
n 重定向可以跳转到任意网站, 请求转发只能访问当前项目内资源
应用场景:
需要request传递数据 例如:查询 使用转发
登录成功的跳转建议使用重定向,路径发生变化
需要使用其他网站的时候必须使用重定向
常见GET请求:地址栏直接访问、<a href=””>、<img src=””> 等
Response ServletContext 中文乱码 Request 编码 请求行 共享数据 转发重定向的更多相关文章
- GET请求和POST请求的request和response的中文乱码问题
GET请求(request)中文乱码解决方案: 在Services的server.xml的配置文件的第一个Connector标签中添加属性URIEncoding="UTF-8" P ...
- 关于request和response的中文乱码问题
相信大家在开发Web项目中都会遇到中文的请求乱码和响应乱码的情况,现在给大家梳理一下并提供解决方案. 1.为什么会出现乱码: 出现乱码的根本原因是浏览器和服务器的解码方式不一致引起的.所以我们统一编码 ...
- openresty: nginx worker不同请求之间共享数据
To globally share data among all the requests handled by the same nginx worker process, encapsulate ...
- request和response的中文乱码问题
request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...
- servlet request、response的中文乱码问题
一.request 1.get请求 get请求的参数是在请求行中的,浏览器使用utf-8进行编码,数据的编码一般为UTF-8,而url请求行的默认编码为ISO-8859-1,一般来说有以下方式可以解决 ...
- C#request和response的中文乱码问题
request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...
- request/response解决中文乱码!!!
Request中文乱码问题以及解决方案 补充三个知识点: Get是URL解码方式.默认解码格式是Tomcat编码格式.所以URL解码是UTF-8,覆盖掉了request容器解码格式 Post是实体内容 ...
- JavaWeb之response响应中文乱码问题
response向页面响应中文乱码问题 字节流 * 有可能乱码,与中文转换成字节数组.浏览器打开的默认字符编码有关 * 解决方式:将中文转成字节数组的时候和浏览器默认打开的时候采用的字符集一致 re ...
- 入门servlet:request获取请求行数据
/** * 演示Request对象获取请求行数据 */ @WebServlet("/test") public class RequestDemo1 extends HttpSer ...
随机推荐
- Spring Security入门(3-5)Spring Security 的鉴权 - 决策管理器和投票器
1.决策管理器的运行原理: 2.Spring Security提供的决策管理器实现 3.用户自定义的决策管理器
- redis中的aof模式,产生的是增量数据,还是全量数据?
先说答案:全量数据. 1.修改redis.conf,开启rdb,禁用aof 上面这个是持久化文件的路径,我们ll看下: 2.启动redis后,cli查看里面的key [root@mini1 redis ...
- JVM 性能调优监控工具
声明:本文转自<https://www.cnblogs.com/anxiao/p/6796644.html?utm_source=itdadao&utm_medium=referral& ...
- 基于 MySQL 的数据库实践(准备工作)
背景 本学期在北京大学选修了<数据库概论>的实验班课程,由于 SQL 语法并不是特别理论的内容,因此课上暂时也没有特别展开.出于探索数据库领域的兴趣,使用国内普遍使用的数据库软件 MySQ ...
- POJ-2993 Emag eht htiw Em Pleh---棋盘模拟
题目链接: https://vjudge.net/problem/POJ-2993 题目大意: 输入和输出和这里相反. 思路: 模拟题,没啥算法,直接模拟,不过为了代码精简,还是花了一点心思的 #in ...
- jquery楼层效果
- 图片处理之 Base64
网页上的图片资源如果采用 http 形式的 url 的话都会额外发送一次请求,网页发送的 http 请求次数越多,会造成页面加载速度越慢.而采用Base64格式的编码,将图片转化为字符串后,图片文件会 ...
- The first week CorelDRAW 课总结:
1.这节课学到了什么知识? 答:(1)认识了CorelDRAW X4的工作界面(由标题栏 菜单栏 工具栏 属性栏 工具箱 页面控制栏 状态栏 绘图区和调色板组成): (2)CorelDRAW X4的基 ...
- 00-深入理解C#读书笔记说明
带着问题去看书 尝试着,根据每一小节,先列出大纲.然后根据自己原先的认知和理解以及不理解,对每一个小的chapter,我会先自我提问,带着问题去阅读,然后把我的理解以及不理解记录下来,对于错误的地方做 ...
- linux实现文件的去重【转】
(1)两个文件的交集,并集 1. 取出两个文件的并集(重复的行只保留一份) cat file1 file2 | sort | uniq > file3 2. 取出两个文件的交集(只留下同时存在于 ...