0

servlet 是一个从 post&get 获取数据并将数据传递到 Web 应用程序的视图部分的对象,因此可以用作:

  • 处理或存储从 HTML 表单提交的数据
  • 提供动态内容,例如数据库查询的结果

但是在维基百科中也可以看到:

  • 管理无状态 HTTP 协议中不存在的状态信息,例如将商品填充到相应客户的购物车中

那么这里所说的将商品填充到相应客户的购物车中是什么意思呢?

这是否意味着 servlet 是 Session 变量?有人可以解释这种行为并更好地举一个例子吗?谢谢。

4

4 回答 4

2

HTTP 是无状态的。这意味着服务器返回的数据不依赖于用户之前的任何操作。Cookie 和其他非 HTTP 方法使 Web 看起来是有状态的,例如使用户能够在网站上登录和退出。

查看: http ://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html

对于应用程序开发人员来说,它始终是无状态的。

对于最终用户来说,它似乎是有状态的

现在,

每个 HTTP 请求都会导致一个新的 servlet 调用(即,一个线程调用 servlet 的服务和 doXxx 方法),无论连接是否保持活动。

编辑:

HttpSession 对象用于设置与特定会话相关的信息,例如当前会话的购物车中的产品数量。请注意,如果浏览器关闭或清除 cookie,会话将关闭。

网络服务器如何知道它是同一个会话?

Webservers 以 cookie 的形式向浏览器发送 sessionId。并且,浏览器将具有 sessionId 的 cookie 发送回服务器以供后续请求。

浏览器如何识别为链接/请求发送哪些 cookie?

它基于这些参数。如果请求与这些参数匹配,则浏览器会发送该特定 cookie:

域:发出请求的域名。

路径:如果上下文根路径名称相同。

安全:如果给定的 cookie 可以在此非安全通道上发送,则服务器发送

如果 cookie 被禁用,则它使用 URL 重写。

即使在浏览器关闭和打开后也可以保留会话吗?是的。答案是 cookie + DB + 谷歌搜索 :)

于 2013-03-10T19:30:02.880 回答
0

servlet 还可以通过以下方式访问由您的容器(appsrver)创建的会话request.getSession()

使用会话,servlet 可以进行会话管理,例如将购物车项目存储在会话中,并使其在来自客户端的不同请求时可访问。

于 2013-03-10T18:22:08.723 回答
0

可从 HttpServletRequest 访问 HttpSession 对象 对象作为 Servlet 的 doXXX() 方法中的方法 arg 传递。此会话是有状态的

于 2013-03-10T18:13:12.080 回答
0

在 java Servlet 中,

我们可以将 get/post 请求参数中的变量值存储在

请求状态或会话状态。

对于请求状态变量 -

request.setAttribute("requestvariable", "My Value");

将值保存在一个完整的请求 - 响应周期中。

在会话状态变量中 -

request.getSession().setAttribute("sessionvariable", "My Value");

将在同一浏览器会话中保存多个请求 - 响应周期中的值。

变量的值也可以通过

request.getSession().removeAttribute("sessionvariable");

此会话变量值可以在应用程序中的多个 jsp/servlet 中提供,例如会话中的用户购物车信息。

因此 Servlet 在这里作为控制器工作,变量的状态存储在框架指定的 api 和变量中的会话或请求中。

于 2013-03-10T18:20:45.280 回答