得到表单数据:
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的销毁********

javaweb笔记四的更多相关文章

  1. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  2. 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...

  3. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  4. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  5. Java学习笔记四---打包成双击可运行的jar文件

    写笔记四前的脑回路是这样的: 前面的学习笔记二,提到3个环境变量,其中java_home好理解,就是jdk安装路径:classpath指向类文件的搜索路径:path指向可执行程序的搜索路径.这里的类文 ...

  6. Java加密与解密笔记(四) 高级应用

    术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...

  7. Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  8. Typescript 学习笔记四:回忆ES5 中的类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  9. Django开发笔记四

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...

随机推荐

  1. MyBatis关联查询,一对多关联查询

    实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...

  2. JXOI2017颜色 解题报告

    JXOI2017颜色 首先记录每个位置上颜色在序列中上次出现的位置 开两颗线段树,第一棵维护区间最大值,实际上是维护当前必须被删去的颜色的位置的最大值,第二棵则是维护区间和 首先倒着扫一遍,对于当前颜 ...

  3. 【题解】 bzoj1191: [HNOI2006]超级英雄Hero (二分图)

    bzoj1191,懒得复制,戳我戳我 Solution: 二分图最大匹配板子题 Attention: 注意题干中的一句话 只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰. Code: //I ...

  4. 【NOIP 2018】填数游戏(思考与推导)

    题目链接 这道题讲道理还是不错的,因为你需要不断挖掘其中的性质来帮助解题.可惜数据范围开在这里让考试时的我很慌,勉强也就写了$65$分就没了.回忆在考场上,思路是没有错的,就是发掘不够深入,思路还不够 ...

  5. BZOJ4830 [Hnoi2017]抛硬币 【扩展Lucas】

    题目链接 BZOJ4830 题解 当\(a = b\)时,我们把他们投掷硬币的结果表示成二进制,发现,当\(A\)输给\(B\)时,将二进制反转一下\(A\)就赢了\(B\) 还要除去平局的情况,最后 ...

  6. 2019.3.12考试&2019.3.13考试&ESTR

    过程:太菜了,不写了 T1 基环树直径,一定学 T2 树上斜率优化,类似购票,数据结构/分治算法,一定改 (把点按深度排序倒着跑2e7次斜率优化也能A,orz zyz) T3 CC原题,码码码,一定补 ...

  7. Linux上安装node和npm

    说明:最近工作中需要用到react前端框架使得可以前后分离,在安装react之前呢我是需要先安装node,和npm的 由于npm是依赖于node 的,所以我这边只要安装了node后,npm也就安装完成 ...

  8. acm 比赛模板

    C++模板 A-M https://pan.baidu.com/s/1lqR1s5RcAR52UJLYNfmRTQ C++模板 1-13 https://pan.baidu.com/s/1361ShU ...

  9. centos7搭建ELK Cluster集群日志分析平台

    应用场景:ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构, 很多公司利用它来搭建可视化的海量日志分析平台 ...

  10. 贪心算法: Codevs 1052 地鼠游戏

    #include <iostream> #include <algorithm> #include <queue> #include <cstring> ...