加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

DWR中取得request,session等信息

发布时间:2020-12-16 02:12:08 所属栏目:百科 来源:网络整理
导读:在DWR中需要用到session,request等这些东西的时候,可以用以下方法获取: 1. 使用DWR的API (很多人都不推荐这种做法,经测试,使用起来肯定没问题) WebContext ctx = WebContextFactory.get(); ctx.getSession() ctx.getHttpServletRequest() ... 2. 在Java的服
在DWR中需要用到session,request等这些东西的时候,可以用以下方法获取:
1. 使用DWR的API (很多人都不推荐这种做法,经测试,使用起来肯定没问题)
WebContext ctx = WebContextFactory.get();
ctx.getSession()
ctx.getHttpServletRequest()
...

2. 在Java的服务方法中定义这些类型的参数,让DWR自动传入相应的对象:
HttpServletRequest,HttpServletResponse,HttpSession,ServletContext,ServletConfig.
示例如下:
Java端定义方法: saveOrder(String id,String name,HttpSession session)
Javascript调用: OrderService.saveOrder(jsID,jsName,callBack)
注意,这里不需要传入session这个参数,DWR会自动传入,在Java端可以直接使用.

在使用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,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();

WebContext webContext = WebContextFactory.get(); webContext.getSession() ; webContext.getHttpServletRequest() ; webContext.getHttpServletResponse();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读