提交 50325a14 编写于 作者: W wizardforcel

2019-10-14 21:02:51

上级 9b2bb763
# HttpSession 与 Servlet 中的示例
# Servlet 中的`HttpSession`
> 原文: [https://beginnersbook.com/2013/05/http-session/](https://beginnersbook.com/2013/05/http-session/)
`HttpSession`对象用于会话管理。会话包含特定于整个应用中的特定用户的信息。当用户第一次通过 request.getSession()获得 HttpSession 时进入网站(或在线应用)时,将为用户提供唯一 ID 以标识其会话。此唯一 ID 可以存储在 cookie 或请求参数中。
`HttpSession`对象用于会话管理。会话包含特定于整个应用中的特定用户的信息。当用户第一次通过`request.getSession()`获得`HttpSession`时进入网站(或在线应用)时,将为用户提供唯一 ID 以标识其会话。此唯一 ID 可以存储在 cookie 或请求参数中。
HttpSession 保持活动状态,直到它的使用时间超过部署描述符文件(web.xml)中 tag 中指定的超时值。默认超时值为 30 分钟,如果未在标记中指定值,则使用此值。这意味着当用户未访问指定的 Web 应用时间时,会话将被 servlet 容器销毁。后续请求将不再从此会话提供,servlet 容器将创建新会话。
`HttpSession`保持活动状态,直到它的使用时间超过部署描述符文件(`web.xml`)中标签中指定的超时值。默认超时值为 30 分钟,如果未在标记中指定值,则使用此值。这意味着当用户未访问指定的 Web 应用时间时,会话将被 servlet 容器销毁。后续请求将不再从此会话提供,servlet 容器将创建新会话。
这是您创建 HttpSession 对象的方法。
这是您创建`HttpSession`对象的方法。
```java
protected void doPost(HttpServletRequest req,
......@@ -16,7 +16,7 @@ protected void doPost(HttpServletRequest req,
}
```
您可以使用 setAttribute()方法将用户信息存储到会话对象中,稍后在需要时可以从会话中获取此信息。这是您在会话中存储信息的方式。这里我们分别在属性名称为 uName,uemailId 和 uAge 的会话中存储用户名,emailid 和 userage
您可以使用`setAttribute()`方法将用户信息存储到会话对象中,稍后在需要时可以从会话中获取此信息。这是您在会话中存储信息的方式。这里我们分别在属性名称为`uName``uemailId``uAge`的会话中存储用户名,`emailid``userage`
```java
session.setAttribute("uName", "ChaitanyaSingh");
......@@ -24,9 +24,9 @@ session.setAttribute("uemailId", "[email protected]");
session.setAttribute("uAge", "30");
```
第一个参数是属性名称,第二个是属性值。对于例如 uName 是属性名称,ChaitanyaSingh 是上面代码中的属性值。
第一个参数是属性名称,第二个是属性值。对于例如`uName`是属性名称,`ChaitanyaSingh`是上面代码中的属性值。
要从会话中获取值,我们使用 HttpSession 接口的 getAttribute()方法。这里我们使用属性名称获取属性值。
要从会话中获取值,我们使用`HttpSession`接口的`getAttribute()`方法。这里我们使用属性名称获取属性值。
```java
String userName = (String) session.getAttribute("uName");
......@@ -34,23 +34,23 @@ String userEmailId = (String) session.getAttribute("uemailId");
String userAge = (String) session.getAttribute("uAge");
```
## HttpSession 的方法
## `HttpSession`的方法
**public void setAttribute(String name,Object value)**:使用名称绑定对象,并将名称/值对存储为 HttpSession 对象的属性。如果属性已存在,则此方法将替换现有属性。
`public void setAttribute(String name,Object value)`:使用名称绑定对象,并将名称/值对存储为 HttpSession 对象的属性。如果属性已存在,则此方法将替换现有属性。
**public Object getAttribute(String name)**:从会话对象返回参数中指定的 String 对象。如果未找到指定属性的对象,则 getAttribute()方法返回 null
`public Object getAttribute(String name)`:从会话对象返回参数中指定的`String`对象。如果未找到指定属性的对象,则`getAttribute()`方法返回`null`
**public Enumeration getAttributeNames()**:返回一个 Enumeration,其中包含作为会话对象的属性绑定的所有对象的名称。
`public Enumeration getAttributeNames()`:返回一个`Enumeration`,其中包含作为会话对象的属性绑定的所有对象的名称。
**public void removeAttribute(String name)**:从会话中删除给定的属性。
`public void removeAttribute(String name)`:从会话中删除给定的属性。
**setMaxInactiveInterval(int interval)**:以秒为单位设置会话不活动时间。这是以秒为单位的时间,指定自客户端上次收到请求后会话保持活动状态的时间。
`setMaxInactiveInterval(int interval)`:以秒为单位设置会话不活动时间。这是以秒为单位的时间,指定自客户端上次收到请求后会话保持活动状态的时间。
有关方法的完整列表,请参阅[官方文档](https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSession.html)
## 会话示例
index.html
`index.html`
```java
<form action="login">
......@@ -60,7 +60,7 @@ index.html
</form>
```
MyServlet1.java
`MyServlet1.java`
```java
import java.io.*;
......@@ -88,7 +88,7 @@ public class MyServlet1 extends HttpServlet {
}
```
MyServlet2.java
`MyServlet2.java`
```java
import java.io.*;
......@@ -111,7 +111,7 @@ public class MyServlet2 extends HttpServlet {
}
```
web.xml
`web.xml`
```java
<web-app>
......@@ -136,7 +136,7 @@ web.xml
**输出:**
**第一:**
**第一个界面:**
![](img/6cd6dfe925532e16af2cd98d1a4996b9.jpg)
......
# Servlet 中的 Cookie 示例
# Servlet 中的`Cookie`
> 原文: [https://beginnersbook.com/2013/05/servlet-cookies/](https://beginnersbook.com/2013/05/servlet-cookies/)
在上一篇指南中,我介绍了 Servlet 中的[会话。在这里,我们将讨论用于会话管理的 Cookie。让我们回顾一下上一篇教程中的一些内容,以便我们可以关联会话和 cookie。当用户第一次访问 Web 应用时,servlet 容器通过调用 request.getSession()来创建新的 HttpSession 对象。为会话分配唯一​​的 ID。 **Servlet 容器还在 HTTP 响应的标头中设置 Cookie,其中包含 cookie 名称和唯一会话 ID 作为其值。**](https://beginnersbook.com/2013/05/http-session/)
在上一篇指南中,我介绍了 Servlet 中的[会话](https://beginnersbook.com/2013/05/http-session/)。在这里,我们将讨论用于会话管理的`Cookie`。让我们回顾一下上一篇教程中的一些内容,以便我们可以关联会话和`cookie`。当用户第一次访问 Web 应用时,servlet 容器通过调用`request.getSession()`来创建新的`HttpSession`对象。为会话分配唯一​​的 ID。Servlet 容器还在 HTTP 响应的标头中设置`Cookie`,其中包含`cookie`名称和唯一会话 ID 作为其值。
cookie 存储在用户浏览器中,客户端(用户的浏览器)将此 cookie 发送回服务器以获取所有后续请求,直到 cookie 有效。 **Servlet 容器检查 cookie 的请求标头,并从 cookie 获取会话信息,并使用服务器内存中的关联会话。**
`cookie`存储在用户浏览器中,客户端(用户的浏览器)将此`cookie`发送回服务器以获取所有后续请求,直到`cookie`有效。Servlet 容器检查`cookie`的请求标头,并从`cookie`获取会话信息,并使用服务器内存中的关联会话。
会话在 web.xml 中的 tag 中指定的时间内保持活动状态。如果未在 web.xml 中设置标记,则会话将保持活动状态 30 分钟。 **只要用户的浏览器正在运行**,Cookie 就会保持活动状态,一旦浏览器关闭,cookie 和相关的会话信息就会被破坏。因此,当用户再次打开浏览器并向 Web 服务器发送请求时,将创建新会话。
会话在`web.xml`中的标签中指定的时间内保持活动状态。如果未在`web.xml`中设置标记,则会话将保持活动状态 30 分钟。 **只要用户的浏览器正在运行**`Cookie`就会保持活动状态,一旦浏览器关闭,`cookie`和相关的会话信息就会被破坏。因此,当用户再次打开浏览器并向 Web 服务器发送请求时,将创建新会话。
## 饼干的类型
## `Cookie`的类型
我们可以根据 Cookie 的到期时间对 Cookie 进行分类:
我们可以根据`Cookie`的到期时间对`Cookie`进行分类:
1.
2. 一贯
1.
2. 持久
**1)会话 Cookie:**
**1)会话`Cookie`:**
会话 Cookie 没有到期时间。它存在于浏览器内存中。一旦 Web 浏览器关闭,该 cookie 就会被破坏。
会话`Cookie`没有到期时间。它存在于浏览器内存中。一旦 Web 浏览器关闭,该`cookie`就会被破坏。
**2)持久性 Cookie:**
**2)持久性`Cookie`:**
与会话 Cookie 不同,它们具有到期时间,它们存储在用户硬盘中,并根据到期时间被销毁。
与会话`Cookie`不同,它们具有到期时间,它们存储在用户硬盘中,并根据到期时间被销毁。
## 如何将 Cookie 发送给客户
## 如何将`Cookie`发送给客户
以下是向客户端发送 cookie 的步骤:
以下是向客户端发送`cookie`的步骤:
1. 创建一个 Cookie 对象。
1. 创建一个`Cookie`对象。
2. 设置最大年龄。
3. Cookie 放在 HTTP 响应标头中。
3.`Cookie`放在 HTTP 响应标头中。
#### 1)创建一个 Cookie 对象:
#### 1)创建一个`Cookie`对象:
```java
Cookie c = new Cookie("userName","Chaitanya");
......@@ -40,23 +40,23 @@ Cookie c = new Cookie("userName","Chaitanya");
#### 2)设置最大年龄:
通过使用 **setMaxAge()**方法,我们可以设置特定 cookie 的最大年龄(以秒为单位)。
通过使用`setMaxAge()`方法,我们可以设置特定`cookie`的最大年龄(以秒为单位)。
```java
c.setMaxAge(1800);
```
#### 3)将 Cookie 放在 HTTP 响应头中:
#### 3)将`Cookie`放在 HTTP 响应头中:
我们可以通过`response.addCookie()`方法将 cookie 发送到客户端浏览器。
我们可以通过`response.addCookie()`方法将`cookie`发送到客户端浏览器。
```java
response.addCookie(c);
```
## 如何阅读 cookies
## 如何阅读`cookie`
```java
Cookie c[]=request.getCookies();
......@@ -66,9 +66,9 @@ for(int i=0;i<c.length;i++){
}
```
## java servlet 中的 Cookie 示例
## java servlet 中的`Cookie`示例
**index.html**
`index.html`
```java
<form action="login">
......@@ -79,7 +79,7 @@ for(int i=0;i<c.length;i++){
```
**MyServlet1.java**
`MyServlet1.java`
```java
import java.io.*;
......@@ -114,7 +114,7 @@ public class MyServlet1 extends HttpServlet
}
```
**MyServlet2.java**
`MyServlet2.java`
```java
import java.io.*;
......@@ -142,7 +142,7 @@ public class MyServlet2 extends HttpServlet {
}
```
**web.xml**
`web.xml`
```java
<web-app>
......@@ -184,21 +184,20 @@ public class MyServlet2 extends HttpServlet {
![](img/8a4f68e6533768d919f075ed9e2c2c12.jpg)
## Cookie 类的方法
## `Cookie`类的方法
**public void setComment(String purpose)**:此方法用于在 cookie 中设置注释。这主要用于描述 cookie 的用途。
`public void setComment(String purpose)`:此方法用于在`cookie`中设置注释。这主要用于描述`cookie`的用途。
**public String getComment()**:返回描述此 cookie 用途的注释,如果 cookie 没有注释,则返回 null
`public String getComment()`:返回描述此`cookie`用途的注释,如果`cookie`没有注释,则返回`null`
**public void setMaxAge(int expiry)**:以秒为单位设置 cookie 的最大年龄。
`public void setMaxAge(int expiry)`:以秒为单位设置`cookie`的最大年龄。
**public int getMaxAge()**:获取此 Cookie 的最大年龄(以秒为单位)。
默认情况下,返回-1,表示 cookie 将持续到浏览器关闭。
`public int getMaxAge()`:获取此`Cookie`的最大年龄(以秒为单位)。默认情况下,返回 -1,表示`cookie`将持续到浏览器关闭。
**public String getName()**:返回 cookie 的名称。创建后无法更改名称。
`public String getName()`:返回`cookie`的名称。创建后无法更改名称。
**public void setValue(String newValue)**:为此 Cookie 指定一个新值。
`public void setValue(String newValue)`:为此`Cookie`指定一个新值。
**public String getValue()**:获取此 Cookie 的当前值。
`public String getValue()`:获取此`Cookie`的当前值。
上面的列表只有常用的方法。要获得 Cookie 类的完整方法列表,请参阅[官方文档](https://docs.oracle.com/javaee/7/api/javax/servlet/http/Cookie.html)
\ No newline at end of file
上面的列表只有常用的方法。要获得`Cookie`类的完整方法列表,请参阅[官方文档](https://docs.oracle.com/javaee/7/api/javax/servlet/http/Cookie.html)
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册