使用servlet来管理状态?

时间:2013-03-10 18:07:18

标签: java java-ee servlets

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

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

然而,在维基百科中也可以看到:

  • 管理无状态HTTP中不存在的状态信息 协议,如将文章填入购物车中 适当的客户

那么这里的意思是说将文章填入相应客户的购物车中是什么意思?

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

4 个答案:

答案 0 :(得分:2)

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

退房: http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html

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

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

现在,

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

修改

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

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

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

浏览器如何识别要为链接/请求发送的Cookie?

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

域:请求所针对的域名。

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

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

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

即使在浏览器关闭并打开后,是否可以保留会话? 是。答案是cookie + DB + Google搜索:)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在java Servlet中,

我们可以在

中存储来自get / post请求参数的变量值

请求状态或会话状态。

对于请求状态变量 -

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

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

在会话状态变量中 -

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

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

此变量的值也可以通过

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

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

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

答案 3 :(得分:0)

servlet还可以通过request.getSession()

访问容器(appsrver)创建的会话

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