Dwr 中获取 request session

在使用DWR时经常有人找不到如何取session,因为Bean的有些方法是要在登陆情况下才能使用,所以网上有很多人想了其它的方法,比如使用过滤器来处理等等,这里我讲的是使用DWR自身的方法来取到,代码如下:
源码复制打印

import uk.ltd.getahead.dwr.WebContext;
import uk.ltd.getahead.dwr.WebContextFactory;
...
public String getSessionId() {
WebContext webContext = WebContextFactory.get();
return webContext.getSession().getId();
}

...

import uk.ltd.getahead.dwr.WebContext;
import uk.ltd.getahead.dwr.WebContextFactory;
...
public String getSessionId() {
WebContext webContext = WebContextFactory.get();
return webContext.getSession().getId();
}

...


如上代码,只为了取一个SessionId,其中有一个Factory是专来处理WebContext的,看到这里应该明白了


而WebContext的原型如下
源码复制打印
package uk.ltd.getahead.dwr;

public interface WebContext {

uk.ltd.getahead.dwr.Container getContainer();

javax.servlet.http.HttpSession getSession();

javax.servlet.http.HttpSession getSession(boolean b);

javax.servlet.ServletConfig getServletConfig();

javax.servlet.ServletContext getServletContext();

javax.servlet.http.HttpServletRequest getHttpServletRequest();

javax.servlet.http.HttpServletResponse getHttpServletResponse();

java.lang.String forwardToString(java.lang.String string) throws javax.servlet.ServletException, java.io.IOException;

java.lang.String getVersion();
package uk.ltd.getahead.dwr;

public interface WebContext {

uk.ltd.getahead.dwr.Container getContainer();

javax.servlet.http.HttpSession getSession();

javax.servlet.http.HttpSession getSession(boolean b);

javax.servlet.ServletConfig getServletConfig();

javax.servlet.ServletContext getServletContext();

javax.servlet.http.HttpServletRequest getHttpServletRequest();

javax.servlet.http.HttpServletResponse getHttpServletResponse();

java.lang.String forwardToString(java.lang.String string) throws javax.servlet.ServletException, java.io.IOException;

java.lang.String getVersion();


可以看到所有你想要的HttpServletRequest ,HttpServletResponse ,HttpSession 都可以在这里取得到

那他是如果工作的呢,看了一下代码,我能理解是:
当DWR初始化时: DWRServlet ->AbstractDWRServlet.init(..)
在init中 WebContextFactory.setWebContextBuilder(builder);
当一个client 访问 DWRServlet ->AbstractDWRServlet.doPost(...) 时
builder.set(req, resp, getServletConfig(), getServletContext(), container);
这里线程更新了WebContextBuilder
所以在WebContextFactory中get时取到的都是当前用户的所请求的相关信息(session,request,response)

你能理解了吗:)
不理解没关系,你只要记得在DWR的Bean中使用
WebContext webContext = WebContextFactory.get();
webContext.getSession() ;
webContext.getHttpServletRequest() ;
webContext.getHttpServletResponse();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值