1.HTTP_响应消息_概述
响应消息的组成部分?
响应行;
响应头;
响应空行;
响应体;
1.1.HTTP_响应消息_响应行_状态码
响应状态码分类及每一类代表什么意思?
1xx:
服务器在等待浏览器继续发送数据
2xx:
服务器正常响应成功
3xx:
服务器重定向:
302:
重定向到网络上的另外一个资源
304:
重定向到浏览器本地(缓存)
4xx:
浏览器端错误:
404:
浏览器访问了一个服务器不存在的资源;
遇到问题:检查资源的访问路径
5xx:
服务器段错误:
500:
浏览器访问服务器的资源,而服务器的资源报错了(java代码代码报错了)!!!
遇到问题:
去服务端的java代码中解决问题。
1.2HTTP_响应消息_响应头
Content-Type响应头什么意思?
示例:
text/html;charset=utf-8
服务器在告诉浏览器,我给你响应了什么样的内容,以及内容的编码格式是什么;
Content-disposition响应头什么意思?
取值:
in-line:
在浏览器内部展示内容;
attachment: /əˈtætʃmənt/
让浏览器以附件的形式下载内容;
2.Response_功能介绍
如何设置状态码?
setStatus(int status);
如何设置响应头?
setHeader(String name,String value)
如何设置响应体?
1.先获取输出流对象;
getOutputStream()
getWriter();
2.通过流写数据
2.1Response_案例1_重定向_代码实现
重定向的概念:
浏览器端的资源跳转;
原始重定向方法:
// 302为重定向
// 设置状态码
response.setStatus(302);
// 设置转发路径
response.setHeader(“location”,“responseDemo2”);
一个重定向,浏览器发送了几次请求?
发起两次请求
如果要重定向,服务器怎么告诉浏览器新的资源位置?
通过一个location响应头告诉
简便的重定向方法?
sendRedirect(String path); /[ˌri:dəˈrekt]/
.2.2Response_案例1_重定向_特点
特点:
1.浏览器发起了2次请求;
2.浏览器地址栏发生了变化;
3.可以重定向到其他服务器上的资源;
为什么重定向后,request域不能再共享数据?
因为request只能在浏览器发起的一次请求中共享数据,而重定向,浏览器发起了两次请求。
2.3Response_案例1_路径_相对路径
绝对路径?
以 / 开头的路径
相对路径?
不以 / 开头的路径;
./开头;
可以省略不写
…/开头;
如果要写相对路径,首先要干什么????
1.确定当前资源的绝对路径;
2.确定目标资源的绝对路径
3.分析目标资源相对于当前资源的路径;
*************************
绝对路径的组成:
1.虚拟目录;
2.资源的访问路径;
2.4Response_案例1_路径_绝对路径
什么时候应该写 “/虚拟目录”?
如果这个资源由浏览器请求,那么需要加
什么时候不应该写 “/虚拟目录”?
如果这个资源由服务器内部请求,那么不需要加;
如何动态获取当前项目的虚拟目录?
request.getContextPath();
2.5Response_案例2_输出字符数据
服务器给浏览器写中文的时候,为什么会乱码?
tomcat编码:
默认使用iso-8859-1编码
浏览器解码:
默认使用当前操作系统的默认码表(中文操作系统默认码表是GBK)解码
乱码问题应该怎么解决?
response.setContentType("text/html;charset=utf-8")
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
pw.write("你好");
// response.setContentType("text/html;charset=utf-8");
// 只会对字符流进行设置,自己生产的字符数组转为字节 需要自己设置编码格式
// 底层基于serversocket 所以一次只能获取一个流,用一个流在网络中传输数据
ServletOutputStream os = response.getOutputStream();
os.write("你好啊".getBytes("utf-8"));
}
*********************************
以后,作为一个纯正的中国程序员,在servlet方法中前两行代码就写它
post请求乱码:
request.setCharacterEncoding("utf-8")
响应乱码:
response.setContentType("text/html;charset=utf-8")
response.setContentType 指定 HTTP 响应的编码,同时指定了浏览器显示的编码.
response.setCharacterEncoding 设置HTTP 响应的编码,如果之前使用response.setContentType设置了编码格式,则使用response.setCharacterEncoding指定的编码格式覆盖之前的设置.与response.setContentType相同的是,调用此方法,必须在getWriter执行之前或者response被提交之前.
//获取流对象之前,设置流的默认编码:ISO-8859-1 设置为:GBK
// response.setCharacterEncoding(“utf-8”);
//告诉浏览器,服务器发送的消息体数据的编码。建议浏览器使用该编码解码
//response.setHeader("content-type","text/html;charset=utf-8");
//简单的形式,设置编码
response.setContentType("text/html;charset=utf-8");
2.7Response_案例4_验证码_分析
为什么要存在验证码?
防止恶意注册;
2.8Response_案例4_验证码_代码实现(了解!!!)
实现步骤?
2.9Response_案例4_验证码_点击切换
为什么执行 "img.src = ‘路径’;"这行代码后,并不能切换图片?
对于图片这样的静态资源,浏览器每次请求前,会做检查,看该图片对应的url地址在本地缓存中有没有;
如果有:直接找本地缓存;
如果没有:访问服务器;
修改访问的url:
url?毫秒值
3.ServletContext_概述
ServletContext代表什么?
代表当前的项目,一个项目中有且仅有一个ServletContext对象
ServletContext有什么作用?
1.获取MIME类型;
2.获取文件在服务器上的真实路径;
3.作为域对象共享数据;
3.1ServletContext_获取
获取ServletContext对象的两种方式?
HttpServlet:
getServletContext;
(***)Request:
getServletContext;
3.2ServletContext_功能_获取MIME类型
什么是MIME?
互联网中传输数据的格式;
MIME类型的格式?
大类型/小类型
image/jpg
image/png
image/jif
text/html
text/css
text/js
如何获取文件的MIME类型?
ServletContext:
String getMimeType(String fileName);
MIME类型只跟文件名有关系;
3.3ServletContext_功能_域对象
一个request对象代表一次请求,request作为域对象共享数据是在一次请求的多个资源间共享数据;
ServletContext共享数据的范围?
一个ServletContext对象代表一整个web项目,servletContext作为对象共享数据是:整个web项目(该项目的所有请求间共享)
3.4ServletContext_功能_获取文件服务器路径
"/"对应的是什么路径?
项目的根目录
如何访问web目录下的资源?
/资源名称
如何访问WEB-INF目录下的资源?
/WEB-INF/资源名称
如何访问src目录下的资源?
/WEB-INF/classes/资源名称
// 虚拟目录问题