• javaweb笔记四


    得到表单数据:
    1、String str = request.getParameter(String)//根据表单名得到表单值,如果是多个同名的键值,返回第一个值。
    2、String[] str= request.getParameterValues(String)//根据表单名得到表单值的数组,将同名键值对封装成数组.

    上传文件所需的条件:
    1、表单必须以POST提交
    2、表单中必须加上enctype="multipart/form-data",将请求流 消息体的格式设置为邮件格式,邮件格式才能将客户端的文件,
    以二进制方式提交给服务器。
    3、在servlet中,必须加入@MultipartConfig注解,告诉服务器,以邮件格式去解析请求消息体。

    请求转发只发一次请求,转发的是本身服务器的资源。
    forward()方法意味着把请求和响应派发给别的资源后,就不会再去做任何处理了 ,不包含本身servlet输出的结果。
    include() 方法意味着请求别人帮助处理请求,但这并不是完全移交,只是暂时地把控制交给别人,本地servlet和目标资源均会输出。
    request.getRequestDispatcher("/page/login.html").(forward|include)(request, response);

    web应用程序的路径问题:
    请求转发和得到真实路径,都是在服务器内部进行资源的查找。在/以后,不需要加工程名。
    其余的资源的查找和链接,在/后需要加工程名。(页面和重定向)

    请求转发和重定向的区别:
    1、request.getRequestDispatcher("/page/login.html").(forward|include)(request, response);
    response.sendRedirect("/webhomework/login");
    2、请求转发一次请求,可以共享request中绑定的共享数据,重定向二次请求不能共享。
    3、请求转发只能转发到服务器内部的资源,重定向可以在第二次访问别的服务器。

    web应用中状态跟踪的方式:
    1、隐藏表单
    2、cookie(模拟存折)
    3、session(模拟银行卡)
    4、URL重写

    cookie工作流程:
    客户端访问服务器,服务器调用response.addCookie()将cookie信息添加到响应对象,产生响应时,
    在响应头中有set-cookie键值对,set-cookie对应的值就是cookie信息。下次访问时服务器会将之前给客户端的cookie信息进行状态跟踪。
    cookie的分类:
    1、保存在客户端浏览器的缓存中,浏览器接收了cookie信息后,会在发送请求时,一直向服务器发送cookie信息。
    但浏览器关闭后,缓存信息,cookie信息也会随之消失,再发送请求时,不会再有cookie信息,这是默认的方式。
    2、保存在客户端的文件中,如果设置了cookie的过期时间,会以文件形式保存在客户端。在过期范围内,客户端浏览器都会读取cookie文件中
    的cookie信息,然后发送给服务器。

    session工作流程:
    客户端请求服务器,服务器调用request.getSession()方法,产生Session对象,用于保存当前用户的信息。同时给session对象产生一个唯一标识
    sessionID。为了管理不同用户的session对象,以sessionID为键,以session对象为值,保存进一个Map集合。
    产生响应时,服务器会将sessionID以set-cookie响应头的方式发送给客户端。客户端再次请求服务器,会将sessionID以cookie请求头方式,
    发送给服务器,服务器根据sessionID从MAP集合中找到对应的session对象,从而跟踪状态。
    //服务器端专门为保存客户端信息而产生的对象。有session对象直接返回,没有就创建
    HttpSession session = request.getSession();

    客户端和服务器之间的交互通过session的sessionID,可以保证安全。sessionID是保存在客户端的,只要浏览器不关闭就可以用sessionID访问。
    关闭后session信息消失,这时服务器会重新产生一个新的session对象。

    session对象也有setAttribute()和getAttribute(),也可以绑定对象共享,范围在一次会话中。只要浏览器不关闭,就可以一直将sessionID发送
    给服务器,找到session对象,从而得到session对象中绑定的共享数据。

    会话管理:由于http协议是一种无状态的协议,每次请求响应后,连接都会断开。所以当一个用户登录服务器后,
    服务器为了保存客户端的状态会给该用户分配session对象。但是在下线后,服务器并不清楚该用户是否下线。
    这样,即使用户下线,服务器还在为该用户保存session对象,所以必须对服务器过期的session进行即时清理。

    销毁session有三种方式:
    1、会话超时,设置超时时间
    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>
    2、调用invalidate(),强行销毁
    3、服务器崩溃或重启部署

    cookie和session的区别:
    1、session保存在服务器,cookie信息保存在客户端。
    2、session是服务器端的对象,保存的信息是以对象方式完成的。cookie信息是一段文本。
    3、使用cookie进行状态跟踪,客户端和服务端之间交互的是具体的数据。而使用session进行状态跟踪,客户端和服务器之间交互的是sessionId.
    使用session方式,安全性更高。

    URL重写:由于cookie信息容易引起安全隐患,有些用户为了安全起见,会禁用客户端浏览器接收cookie信息。
    这样一来,服务器向客户端以cookie方式发送给客户端的sessionId,也不能保存在客户端浏览器的缓存中。那么客户端再次请求服务器时,
    也不能将sessionId以cookie方式发送给服务器。服务器得不到sessionId,就会认为是新用户,从而无法跟踪。
    解决方案是:URL重写,将sessionId强行附加在URL后面,这样即使客户端禁用cookie,服务器也能得到sessionId,从而跟踪状态。是session的补充。
    <a href='add;jsessionid=HB123ASWDq3423easFDsf'>访问</a>

    ServletContex(上下文):整个Web应用程序
    HttpSession(会话):一个会话交互过程
    ServletRequest(请求):一次请求过程

    监听session,request,application这三个对象里存取数据的变化
    监听器实现步骤:
    1、确定事件源
    2、确定监听器
    3、注册,建立事件源与监听器的联系

    web监听器分为两类:
    1、监听事件源对象的生命周期(创建和销毁)
    2、监听事件源对象属性的改变(属性添加和删除)

    web监听器的注册:
    <listener>
    <listener-class>com.project.util.ContextListener</listener-class>
    </listener>
    servlet3标准中,可以使用@WebListener注解注册
    *****浏览器关闭,不意味着session的销毁********

  • 相关阅读:
    linux命令及相关配置
    EditPlus配置ftp连接linux
    06_事件机制
    HTTP协议简介
    Codeforces Round #691 (Div. 2) C. Row GCD (数学)
    Codeforces Round #690 (Div. 3) E2. Close Tuples (hard version) (数学,组合数)
    牛客编程巅峰赛S2第10场
    Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree (dfs计数,树)
    牛客编程巅峰赛S2第7场
    Codeforces Global Round 12 D. Rating Compression (思维,双指针)
  • 原文地址:https://www.cnblogs.com/lyrand/p/7740185.html
Copyright © 2020-2023  润新知