- 设置响应状态行
- 状态行分为:HTTP协议、状态码和状态描述三个部分。
- 状态码:
100~199:表示信息性代码,标示客户端应该采取的其他动作,请求正在进行。
200~299:表示客户请求成功。
300~399:标示用于已经移走的资源文件,指示新的地址。
400~499:表示由客户端引发的错误。
500~599:表示由服务器引发的错误。
注意:在使用PrintWriter向客户端输出信息之前,设置状态码。
- 设置响应头
通过响应对象HttpServletResponse的setHeader()可以设置响应头,但是响应头必须要被浏览器识别才有意义。所以通常会把响应头的设置封装成响应对象的方法,如setCookie()
由于只有http协议才会有响应头,所以setHeader()只存在于HttpServletResponse中。
HttpServletResponse响应对象有两个方法可以向客户端输出数据。
getWriter(),得到打印字符流,可以向客户端输出文本数据。
getOutputStream(),得到输出字节流,可以向客户端输出二进制数据。 重定向工作流程
客户端访问服务器。服务器调用response.sendRedirect(),产生响应时,会产生302状态码,同时产生location响应头。客户端浏览器在接收到响应信息之后。发现是302状态码,就会读取location响应头,然后将该内容更新浏览器地址栏,再向服务器发出第二次请求。Get和Post方式的区别
-格式流的区别
get方式表单数据附加在URL后面,而post方式表单数据在消息体中,所以get方式没有消息体- 用途的区别
get方式用于资料的查找,而post方式主要用于数据的传输。 - 传输性能的区别
get方式只能传输文本数据,而post方式可以传输文本和二进制数据。
get方式不能传输大数据,post方式可以传输大数据。
get方式的表单数据附加在URL后面,所以表单数据会在浏览器地址中显示出来,而post方式的表单数据在消息体中,所以浏览器地址栏不会显示,相对get方式数据安全一些。
get方式的数据会在浏览器中缓存,而post方式不会缓存。
- 用途的区别
- 地址路径
超链接href、表单的action、重定向
如果以/开始,必须加上部署名 /webTest/all
获得真实路径getRealPath,内部转发
如果以/开始,应该书写相对于web应用程序的路径,不加部署名
Servlet中转发页面的方式 - 重定向和内部转发的区别
重定向由response发出,而内部转发由RequestDispatcher发出
重定向,客户端发出两次请求,而内部转发,客户端只发出一起请求。所以,内部转发可以共享request请求对象中封装的数据,而重定向不行
内部转发只能转发服务器内部的资源,但重定向可以在第二次请求时,转向别的服务器 状态跟踪
http 协议时一种无状态的协议,当请求和响应完成后,会断开连接,以释放服务器的内存资源。所以服务器无法保存客户端的状态,服务器会认为美次请求的客户端都是新用户。但是,很多时候,我们需要得到客户端的状态,完成一系列的商务活动,这时候就需要状态跟踪。
状态跟踪由四种解决方案:隐藏变淡、cookie、session、url重写cookie工作流程
客户端访问服务器,服务器调用response.addCookie()方法。产生响应时,会产生set-cookie响应头,将cookie文本发送给客户端。客户端会将cookie文本保存起来,当客户端再次请求服务器时,会产生cookie请求头,将之前服务器发送的cookie信息,再发送给服务器。服务器就可以根据cookie信息跟踪客户端的状态。- cookie的分类
存放在客户端浏览器缓存中。浏览器不关闭,cookie信息一直存在,浏览器一关闭,cookie消失
存放在客户端的文件中,并可以设置cookie的过期时间。过期时间之内,即使浏览器关闭,也可以将cookie信息发送给服务器。超过过期时间,cookie消失。
cookie信息是以文本方式存放在客户端的,所以容易引起一些安全隐患,所以不要把隐秘信息以cookie方式保存。 - session的工作流程
- 客户端访问服务器,服务器产生调用request.getSession()产生session对象,用于跟踪用户状态。同时,给session对象分配一个唯一标识sessionId。为了管理session对象,以sessionId为键,以session对象为值,封装成Map集合。
- 产生响应时,将sessionId以cookie方式发送给客户端。存放在客户端浏览器缓存中。当客户端再次请求服务器,会将sessionId以cookie请求头的方式发送给服务器。服务器的到sessionId后,从Map集合中的到session对象,从而跟踪状态。 session是服务器端用于保存客户端相关状态的对象。由于http协议是无状态的协议,所以,客户端是否关闭浏览器,服务器并不知道。这就意味着,客户端即使关闭浏览器下线,服务器也会一直保存session对象。这样,会极大的消耗服务器内存资源。所以服务器应该及时清理过时的session,以释放服务器内存资源。
- session的销毁
- 三种方式
设置超时时间
调用session对象的invalidate(),强行销毁
应用服务器崩溃
- 三种方式
- cookie和session区别
cookie信息是存放在客户端的,session信息是以对象方式存放在服务器的
cookie信息存放的是文本数据,而session对象可以绑定对象共享
客户端和服务器之间传递cookie,传递的是具体的数据,而使用session时,传递的指示sessionId,所以使用session安全性比较好 - URL重写
当客户端禁用了cookie之后,这时,服务器发送客户端的sessionId,客户端就不能通过cookie方式进行保存。这样,客户端请求时,也不能将session,以cookie请求的方式提交给服务器。服务器得不到sessionId,也就无法取出session对象,从而不能跟踪状态。 - 解决方案:
当客户端仅用了cookie之后,在URL后面,强行附加sessionId。如:
click
这样,客户端无论是否禁用cookie,服务器都可以得到sessionId,从而跟踪状态
JavaWeb(二)
最新推荐文章于 2024-09-08 12:25:23 发布