1.请求响应流程图
Request: 请求对象: tomcat服务器为我们创建, 使用这个对象获取请求相关的数据
父接口: ServletRequest, 子接口: HttpServletRequest
Response: 响应对象: tomcat服务器为我们创建, 使用这个对象给客户端响应数据
父接口: ServletResponse: 子接口: HttpServletResponse
2 Request对象
功能:
- 获取请求头
- 获取请求参数
- 域功能 实现数据传递
- 请求转发 实现页面之间跳转
请求: 分为请求头(一堆的key/value键值对),请求体(get请求没有请求体, post请求才有请求体)
2.1请求头, 不重要
1. String getHeader(String name) //根据请求头name获取请求头的value 2.Enumeration<String> getHeaderNames() //获取所有的请求头属性name 3.Enumeration<String> getHeaders(String name) //根据请求头name获取请求头的value,但是value是多个值 4. int getIntHeader(String name) //根据请求头name获取请求头的value,但是value是整数,可以省略数据类型转换
2.2获取请求参数 重要
使用boostrap前端ui框架:
使用步骤:
- 下载bootstrap
- 把bootstrap.css font文件, bootstrap.js拷贝到你项目
- 引入jquery.js
- 在你的页面引入boostrap.css和boostrap.js 以及jquery.js
<!--
./boostrap/css/bootstrap.css: 相对路径
/项目名/boostrap/css/bootstrap.css: 绝对路径 /boostrap/css/bootstrap.css
-->
<link rel="stylesheet" type="text/css" href="./boostrap/css/bootstrap.css">
<script type="text/javascript" src="./jquery/jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="./boostrap/js/bootstrap.js"></script>
request获取请求参数的方法:
1. String getParameter(String name) //根据请求参数名获取请求参数值 //注意: // 1) 前端传递这个请求参数, 得到请求参数value // 2) 前端传递这个请求参数,username=,得到"" // 3) 前端传递没有这个请求参数, 得到null 2. String[] getParameterValues(String name) //根据请求参数名获取请求参数值(一个name对应多个value) 3. Enumeration<String> getParameterNames() //获取所有的请求参数名 4. Map<String,String[]> getParameterMap() //获取所有的请求参数, 并且把请求参数保存到map集合
如果表单没有name属性, 该表单无法传递到后端
2.3域对象功能 request域
request域中的数据,只能同一次请求内有效
void setAttribute(String name, Object o)//往域中保存数据 Object getAttribute(String name) //从域中获取数据 void removeAttribute(String name) //从域中删除数据
2.4请求转发
服务器内部跳转
方法:
RequestDispatcher getRequestDispatcher(String path) //得到转发器RequestDispatcher path转发的资源路径
RequestDispatcher:方法
void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException //转发
2.5 GET请求和POST请求的区别:
- GET请求:
- 请求参数会在浏览器的地址栏中显示,所以不安全;
- 请求参数长度限制长度在1K之内;
- GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;
- POST请求:
- 请求参数不会显示浏览器的地址栏,相对安全;
- 请求参数长度没有限制;
3
3 response 对象
response对象的功能分为以下四种:
- 设置响应头信息;
- 发送状态码;
- 设置响应正文;
- 重定向;
3.1Response响应对象
request: 请求对象, 封装了客户端给服务器的相关的数据
- 请求头 getHeader()
- 请求参数
- 域功能
- 请求转发
3.2响应正文
通过输出流, 通过Response得到网络输出流
ServletOutputStream getOutputStream() //得到响应字节输出流, 万能流 //输出中文,出错 PrintWriter getWriter() //得到响应字符输出流, 输出字符
注意:
这个两个流不能同时使用
Response的输出流默认使用的编码: ISO-8859-1, 这种编码不支持中文,
使用Response的
void setCharacterEncoding(String charset)
设置输出流的编码,但是这个方法无法设置页面的编码, 页面编码不是UTF-8, GBK
, 输出流的编码:UTF-8,
解决编码问题:
- 设置输出流编码
- 设置页面的编码
void setContentType(String type) //设置响应头contentType: response.setContentType("text/html;charset=UTF-8");
设置页面的类型以及编码,还会帮我们设置输出流的编码
3.3设置响应头
可以使用response对象的setHeader()方法来设置响应头!使用该方法设置的响应头最终会发送给客户端浏览器!
- response.setHeader(“content-type”, “text/html;charset=utf-8”):设置content-type响应头,该头的作用是告诉浏览器响应内容为html类型,编码为utf-8。而且同时会设置response的字符流编码为utf-8,即response.setCharaceterEncoding(“utf-8”);
简写的方式:
response.setContentType("text/html;charset=UTF-8");
- response.setHeader("Refresh","5; URL=百度一下,你就知道"):5秒后自动跳转到百度主页。
- response.setStatus(200):设置状态码;
- response.sendError(404, “您要查找的资源不存在”):当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。
3.4重定向
代码:
Response的
void sendRedirect(String location)
重定向与转发区别:
- 重定向是两次请求, 转发是一次请求
- 重定向的客户端的地址栏发生变化, 转发客户端地址栏不发生变化
- 重定向是客户端的跳转, 转发是服务器内部的跳转
重定向资源可以是服务器的资源,也可以是服务器之外的资源
转发的资源只能是服务器内部的资源