2013-03-10 77 views
0

servlet是一个对象,它从后获取数据&得到,并且还传递数据到web应用程序的视图部分由此可以被用作:这是从一个HTML表单提交使用servlet管理状态?

  • 处理或存储数据
  • 提供动态内容,如数据库查询

然而,在维基百科的结果,这也看出:

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

那么,什么是平均这里说填充物品放入购物车中的适当的客户?

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

+0

的Servlet *管理*较早投入HTTP会话,从而让你的变量举办一些状态,而会话存活。在这种情况下,一个用户有一个会话,因此有一组有状态数据。 – skuntsel 2013-03-10 18:11:24

+1

顺便说一句,一个非常有启发性的阅读是BalusC的答案[如何做servlet?](http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading/3106909#3106909)。 – skuntsel 2013-03-10 18:36:22

回答

2

HTTP是无状态的。这意味着服务器返回的数据不依赖于用户以前的任何操作。 Cookie和其他非HTTP方法是使网络显示为有状态的原因,使用户能够登录和登出网站。

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

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

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

现在,在一个servlet的一个新的调用

每个HTTP请求的结果(即,一个线程调用servlet的服务和的doXXX方法),而不管连接是否保持活动状态。

编辑:

HttpSession对象用于设置说与特定的会话信息,产品在当前会话的购物车的数量。请注意,如果浏览器关闭或者您清除了Cookie,会话将被关闭。

如何web服务器知道它的同一个会话?

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

如何在浏览器识别为一个链接/发送请求其饼干?

它基于这些参数。如果请求这些参数相匹配的浏览器发送该特定的Cookie:

域:到作出请求的域名。

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

安全:如果要是能在该非安全通道

如果禁用Cookie发送给定的cookie,然后它使用URL重写服务器发送。

是否可以保留会话后,即使关闭浏览器并打开? 是的。答案是饼干+ DB +谷歌搜索:)

+0

对不起,你能否提倡最后一部分?要保留多个连接之间的状态?不是Cookie,因为会话在Web浏览器关闭后死亡?当你说多个连接时,你的意思是在浏览器重新启动后建立连接吗? – 2013-03-10 19:35:15

+0

做了编辑。希望清楚 – John 2013-03-10 19:50:13

+0

明确答案 – Dante 2016-09-09 09:29:02

0

HttpSession对象可访问从HttpServletRequest对象传递作为一个Servlet的的doXXX(方法ARG)method.This会话状态

+0

对不起,你能解释一下什么是有状态的吗? – 2013-03-10 18:17:14

0

在的Java Servlet,

我们可以从GET /存储变量的值发送请求参数

请求状态或会话状态。

对于请求状态变量 -

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

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

在会话状态变量 -

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

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

还可以通过

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

除去的变量的值。该会话变量值可以在多个JSP/servlet的送达在应用像在会话中用户购物车信息。

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

0

一个servlet也有通过request.getSession()

使用会话一个servlet可以做一个会话管理就像在一个会话存储车中的项目并使其从不同的请求访问访问由你的容器(appsrver)创建的会话客户端。