Servlet_Response 学习总结

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只能在浏览器发起的一次请求中共享数据,而重定向,浏览器发起了两次请求。
  • forward 和 redirect 区别
    重定向的特点:redirect
  1. 地址栏发生变化
  2. 重定向可以访问其他站点(服务器)的资源
  3. 重定向是两次请求。不能使用request对象来共享数据
  • 转发的特点:forward
  1. 转发地址栏路径不变
  2. 转发只能访问当前服务器下的资源 ServletContext对象:
  3. 转发是一次请求,可以使用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/资源名称

// 虚拟目录问题

Servlet_Response 学习总结_第1张图片

Servlet_Response 学习总结_第2张图片

你可能感兴趣的:(Servlet_Response 学习总结)