会话的活化和钝化,表单重复提交,验证码使用流程

   <李>

钝化

指将HttpSession对象序列化到硬盘中,一般钝化发生在服务器停止,服务器停止时会自动将HttpSession对象序列化到硬盘,这个事我们称为钝化。

<李>

活化

将硬盘中HttpSession对象加载进内存中,一般在服务器启动时,会自动将硬盘中HttpSession对象重新加载进内存,这一过程我们成为活化。

<李>

钝化指将内存中的对象写到硬盘中,

<李>

一个类要想可以序列化到硬盘中必须要实现. io .可序列化的接口

<李>

这个类中的所有属性也需要实现. io .可序列化的接口

<李>

如果服务器的访问量较大,那么服务器会有大量的HttpSession对象存在,

但是这些对象并不是都处于一个活跃的状态,但是这些不活跃也会存在于内存中

这样会大量占用内存,这时我们就希望将这些闲置的对象写入硬盘中,在用户需要使用会话在加载进内存。

在上下文。xml文件中可以加入如下内容

maxIdleSwap:指会话的最大闲置时间,超过该时间以后,会话将会自动钝化。

目录:钝化到硬盘中的目录

会话会钝化到tomcat服务器的工作目录中

表单的重复提交

<李>

表单重复提交指的是同一个表单相同的内容多次提交请求

<李>

表单重复提交的危害:

,,,, 1。表单重复提交,都是重复的数据,会增加数据库中垃圾数据。

,,, 2。无形中增加了服务器压力。

<李>

表单重复提交的几种情况:

<李>

产生问题的根本原因:

我们在Servlet使用的转发的形式跳转到成功页面的,所以整个过程中浏览器只发送了一次请求,当我们在成功页面刷新时,实际是将上次的请求又发送了一遍,所以造成了重复提交。

<李>

解决:

不使用转发,而是使用重定向

重定向发了两次请求,我们再次刷新,刷新的第二个请求,而不是第一个。

<李>

产生问题的根本原因:

就是表单的提交按钮可以点击多次

<李>

解决:

使表单的提交按钮只能点一次,点完一次以后按钮将变为不可用的状态。

,,,窗口。onload=function () {

,,,,,,,,//点击完提交按钮以后,让按钮变为一个不可用的状态

,,,,,,,,//获取按钮对象

,,,,,,,, var btn=. getelementbyid (btn);

,,,,,,,,//为按钮绑定一个单击响应函数

,,,,,,,, btn。onclick=function () {

,,,,,,,,//设置按钮为不可用状态

,,,,,,,,。禁用=true。

,,,,,,,,//如果将按钮设置为不用状态,那么表单也将不会提交

,,,,,,,,//我们需要手动提交表单

,,,,,,,, this.parentNode.submit ();

,,,,,,,,},,
,,,,},

<李>

产生问题的根本原因:

服务器端Servlet不的能区分两次请求是不是重复提交的内容

<李>

解决:

在Servlet中,我们需要在处理请求之前,先来检查表单是否是重复提交。

使用令牌解决这个问题

标记就是令牌意思

所谓的令牌就是服务器在处理用户请求之前,先检查牌是否正确,如果牌正确那服务器正常处理请求,如果令牌不正确服务器不处理请求。

我们的令牌是一个一次性的令牌,只能使用一次。

流程:

1。创建一个令牌,要求唯一,不能重复(UUID),并在服务器中保存牌。

2。放入到浏览器的表单中。

3。浏览器提交表单时,会同时将牌一起提交。

4。服务器在处理请求之前要检查令牌是否有效。

5。销毁牌。

,

验证码使用流程

会话的活化和钝化,表单重复提交,验证码使用流程