JavaWeb(二)

  • 设置响应状态行
    • 状态行分为: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,从而跟踪状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值