What is session in Java?
到目前为止,我理解了Java中的HTTPSTealEngy概念。
1 | HttpSession ses = req.getSession(true); |
将根据请求创建会话对象。
1 | setAttribute("String", object); |
将"字符串"和值与会话对象绑定。
1 | getAttribute("String"); |
将返回与指定字符串关联的对象。
我无法理解的是:我正在创建一个会话对象
我在网上的所有教程中都看到了这种类型的插图。这是设置该属性的实际方法吗?或者,真正的应用程序开发人员将在"字符串"字段中提供一个变量来动态设置它。
最后一个问题是
1 2 | WebContext ctx = WebContextFactory.get(); request = ctx.getHttpServletRequest(); |
上面的两行是做什么的?CTX&REQUEST中将存储什么?
一些[随机]精度:
我建议你阅读一个关于Java会话的教程。每个用户根据JavaWeb服务器发送给浏览器的JSISTISID请求/响应参数得到不同的HTTPSEnter对象。因此,每个用户都可以有一个同名的属性,并且为该属性存储的值对于所有用户都是不同的。
另外,WebContextFactory和WebContext是DWR类,它们提供了获取servlet参数的简单方法。
据我所知,您关心的是在httpsession中存储东西时如何分离不同的用户。
servlet容器(例如tomcat)利用其jsessionid来处理这个问题。
故事是这样的:
希望这(至少部分)能回答你的问题。
干杯
你的基本servlet看起来像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class MyServlet{ public doGet(HttpServletRequest req, HttpServletResponse res){ //Parameter true: // create session if one does not exist. session should never be null //Parameter false: // return null if there is no session, used on pages where you want to // force a user to already have a session or be logged in //only need to use one of the two getSession() options here. //Just showing both for this test HttpSession sess = req.getSession(true); HttpSession sess2 = req.getSession(false); //set an Attribute in the request. This can be used to pass new values //to a forward or to a JSP req.setAttribute("myVar","Hello World"); } } |
不需要为已经完成的会话设置任何属性名。正如其他人在其他答案中建议的那样,使用cookie或重新编写的URL来存储sessionid。
当您处理dwr webcontext时,它只是做与上面相同的事情,通常请求对象不会传递到方法中,因此您使用webcontext为您获取该请求。
1 2 3 4 5 6 7 8 9 10 11 | public class DWRClass { public doSomething(){ WebContext ctx = WebContextFactory.get(); HttpServletRequest req = ctx.getHttpServletRequest(); HttpSession sess = req.getSession(); //no parameter is the same as passing true //Lets set another attribute for a forward or JSP to use ArrayList<Boolean> flags = new ArrayList<Boolean>(); req.setAttribute("listOfNames", flags); } } |