初识 JSP---(Cookie / 重写URL / 防止表单重复提交)

简介: CookieCookie是servlet发送到web浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器,cookie一般用来保存session的id的会话。

Cookie

Cookie是servlet发送到web浏览器的少量信息这些信息由浏览器保存,然后发送回服务器

cookie一般用来保存session的id的会话

一个Cookie拥有一个名称、一个值和一些可选属性,比如注释、路径和域限定符、最大生存时间和版本号

Servlet通过使用HttpServletResponse的addCookie(cookie)方法将 Cookie发送到浏览器,该方法将字段添加到HTTP响应头发送到浏览器。浏览器支持每台Web服务器有20个Cookie,总共有300个Cookie,每个Cookie的大小默认为4KB

浏览器通过向HTTP请求头添加字段将Cookie返回给Servlet。可使用HttpServletRequest的getCookies()方法从请求中获取Cookie

Cookie通过名称和路径来进行区分

Cookie的常用方法

1.Cookie(String name, String value) 构建通过key/value保存的信息

例子:

 

2.void setMaxAge(int time)设置Cookie的最大生存时间,以秒为单位。负值浏览器退出时删除。0值会导致删除cookie

例子:

 

3.int getMaxAge() 返回以秒为单位指定的Cookie最大生存时间(默认生存时间为-1)

例子:

4.String getName() 返回Cookie名称,名称在创建之后不能更改

例子:

5.String getValue() 返回cookie值

例子:

6.void setPath(String uri) 指定客户端应该返回cookie的路径,对于指定目录中的所有页面及该目录子目录中的所有页面都是可见的

例子:

7.void setDomain(String pattern) 指定应在其中显示此Cookie的域

8.String getDomain() 返回为此Cookie设置的域名

(设置 cookie 不能设置中文)

重写URL

为什么要对URL重写

–客户端不支持Cookie或禁用Cookie

–服务器端不能通过Cookie获取jsessionid

URL重写

–将jsessionid加入到URL之后

–使用HttpServletResponse迚行重写

• String encodeURL(String url) 通过将会话ID包含在指定URL中并对该 URL进行编码。如果

不需要编码,则返回未更改的URL

• String encodeRedirectURL(String url) 对指定URL进行编码,以便在 sendRedirect方法中使

用它,如果不需要编码,则返回未更改的URL(可判断是否需要将ID加入URL)

防止表单重复提交

思路:

在服务端生成一个唯一的随机标识号,专业术语称为Token(令牌),同时在当前用户的session域中保存这个Token。然后将Token发送到客户端的form表单中,在form表单中使用隐藏域来存储这个Token,表单提交的时候连同这个Token一起提交到服务端,然后在服务端判断客户端提交上来的Token与服务端生成的Token是否一致,如果不一致,那就是重复提交了,此时服务端就可以不处理重复提交的表单了。如果相同则处理表单提交,处理完后清理当前用户的session域中存储的标识号

 

重复提交的几种情况?

①在表单提交到一个servlet,而servlet又通过请求转发的方式到jsp页面,地址栏里面还保存着servlet的路径,然后在响应页面点击刷新,这就是重复提交

②在响应页面没有到达时,重复点击提交按钮

③点击返回,直接点击提交

如何避免表单重复提交?

在表单做一个标记,提交到servlet,检查标记是否存在,检查标记和预定义的标记是否一致,如果一致,受理请求,销毁标记,如果不一致,或没有标记,则直接响应页面提示信息,“重复提交”。

第一种方式:

提供一个隐藏域(pass), 原因:无法准确获取请求的信息

第二种方式:

放在request中(pass),原因:因为表单页面刷新后,当前request已经被销毁了,再提交,已经是新的request了

第三种方式:

把标记放在session中:(pass)

  • 把原表单页面生成随机token
  • 在原表单页面,把token值放入session属性
  • 在原表单中,token值放到隐藏域
  • 在目标servlet中,获取session和隐藏域中的token的值,比较两个值

若一致,受理请求且把session的请求的值销毁

若不一致,提示表单已经提交过了

目录
相关文章
|
14天前
|
存储 Java
JSP 教程 之 JSP Cookie 处理 8
JSP教程讲解如何处理Cookie。要删除Cookie,需获取已存在Cookie,将其有效期设为0,然后重新添加到响应头。以下示例代码演示如何删除一个名为"name"的Cookie。当运行此JSP,第二次访问时,"name" Cookie将变为null。页面还会显示现有Cookie的名称和解码后的值。
10 2
|
14天前
|
存储 Java
JSP 教程 之 JSP Cookie 处理 7
JSP教程讲解了如何处理Cookie。Cookie是客户端的文本文件,用于存储跟踪信息。在JSP中,通过调用`request.getCookies()`获取Cookie数组,然后遍历并使用`getName()`和`getValue()`读取每个Cookie的名称和值。示例代码展示了一个JSP页面,它遍历请求中的Cookie,并解码显示其名称和值。如果未找到Cookie,则显示相应消息。
13 1
|
21天前
|
Java
JSP 教程 之 JSP 表单处理 7
该教程介绍了如何在JSP中处理表单,特别是Checkbox数据。示例展示了一个HTML表单,包含三个已选中的复选框(Google、百度、淘宝),用户提交后会向"main.jsp"发送POST请求。
13 1
|
15天前
|
存储 Java
JSP 教程 之 JSP Cookie 处理 6
JSP教程讲解了如何处理Cookie。Cookie是客户端的文本文件,用于存储跟踪信息。在JSP中,设置Cookie涉及三步:创建Cookie对象、设置有效期和添加到HTTP响应头。示例代码展示了一个JSP页面,接收HTML表单数据,编码后存储为Cookie,并设置24小时有效期。用户可以通过GET方法提交表单到main.jsp,实现Cookie设置。
12 2
|
16天前
|
存储 JavaScript 前端开发
JSP 教程 之 JSP Cookie 处理 2
JSP教程讲解了如何处理Cookie,Cookie是存储在客户端的文本文件,用于存储跟踪信息。在JSP中,通过设置HTTP头部的Set-Cookie来创建Cookie,包含键值对、过期时间、路径和域名。当用户访问匹配的页面时,浏览器会发送Cookie回服务器。JSP使用request对象的getCookies()方法获取Cookie数组。
7 1
|
23天前
|
Java 数据安全/隐私保护
JSP 教程 之 JSP 表单处理 1
JSP教程讲解表单处理,涉及GET和POST方法。GET在URL后附加参数,适合非敏感信息,有数据量限制(1024字节)。POST则隐式传递,适用于敏感信息,如密码。JSP获取GET参数用getParameter(),处理二进制数据流用getInputStream()。
7 1
|
1月前
|
开发框架 搜索推荐 中间件
中间件应用路由和URL重写
【5月更文挑战第2天】中间件应用路由和URL重写
19 3
中间件应用路由和URL重写
|
15天前
|
存储 Java
JSP 教程 之 JSP Cookie 处理 4
JSP教程讲解了如何处理Cookie,Cookie是客户端存储的文本信息,用于跟踪用户行为。设置Cookie涉及三步:1) 创建Cookie对象,如`new Cookie("key","value")`,注意名称和值不能含特殊字符;2) 设定有效期,如`setMaxAge(60*60*24)`表示24小时有效;3) 使用`response.addCookie(cookie)`将其发送到HTTP响应头。
9 0
|
16天前
|
存储 安全 Java
JSP 教程 之 JSP Cookie 处理 3
JSP教程介绍了Cookie处理,Cookie是客户端存储的文本文件,用于跟踪信息。JSP支持HTTP cookie操作,提供了如设置域名、有效期、路径及加密传输等方法。例如,`setDomain()`设定域名,`setMaxAge()`设置有效期,`setPath()`定义作用路径,而`setSecure()`则用于指定安全传输。此外,`setComment()`可设置cookie用途注释。
16 0
|
16天前
|
存储 Java
JSP 教程 之 JSP Cookie 处理 1
JSP教程讲解了如何处理Cookie,Cookie是客户端存储的文本信息,用于跟踪用户。JSP支持HTTP cookie,处理包括:服务器发送cookie到浏览器、浏览器存储并在后续请求时回传。教程涵盖设置、重置、访问和删除Cookie的技巧。同时,提到了针对中文编码解码的方法,使用`URLEncoder.encode`进行编码,`URLDecoder.decode`进行解码。
7 0