在使用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();
分享到:
相关推荐
在 DWR 中,可以使用 WebContextFactory 工厂类来获取 WebContext 对象,然后通过该对象获取 Session、Request 等信息。下面是一个示例代码: ```java WebContext ctx = WebContextFactory.get(); HttpSession ...
1. **数据传递**:DWR可以调用JSP中的Java方法,这些方法可能依赖于request、session或application中的数据。通过DWR,客户端可以直接操作服务器端的数据,这使得JSP内置对象的数据能在异步请求中得以利用。 2. **...
`scope`属性用于指定对象的生命周期,如`application`、`session`、`request`或`page`。`include`和`exclude`元素用于控制对象的方法访问权限。 ### 4. `<param>` 元素 `<param>`元素提供额外的参数给特定的...
JSP有九个内置对象,它们分别是:`request`、`response`、`session`、`application`、`pageContext`、`out`、`config`、`page`和`exception`。这些对象提供了与HTTP请求、响应、会话、应用范围内的数据交互的功能。...
5. **Struts2得到Request和Session.doc**:Struts2如何访问HTTP请求和会话数据,这对于处理用户状态和传递信息至关重要。 6. **struts2的标签.doc**:类似于Struts标签手册,这可能详细解释了Struts2框架中的自定义...
“scope参数允许你配置creator的生命周期,共有以下几个选项:application,session,request,page.这些参数对于用过jsp或servlet的开发人员并不陌生. 3.1 Uing static methods 如果你想远程调用一个creator的静态方法,...
在DWR配置中, dwr.xml 文件扮演着核心角色,它负责定义远程Bean的配置信息,包括创造器、参数、范围、身份验证等。 ### 术语 在DWR配置中,有一些重要的术语需要理解: * 参数(Parameter):在DWR中,参数是指...
- `scope`属性:控制对象的生命周期,可以是`application`、`session`、`request`或`page`。 - `param`元素:传递给创建器的参数,例如类名或配置信息。 - `include`和`exclude`元素:用于指定允许或禁止访问的类...
- **`scope`属性**:指定Bean的作用域,默认为`"page"`,可选值还包括`"application"`、`"session"`和`"request"`。 - **`<param>`元素**:用于指定创建者所需的额外参数。 - **`<auth>`元素**:用于指定对某个...
- **对象激活方式:**支持多种对象激活方式,包括request、session、application和custom等。 - **自定义安全认证:**允许用户自定义安全认证规则,支持多种角色配置。 ##### 22.1.3 DWR的下载与安装 DWR最新稳定...
直接使用,也就是说在需要使用DWR来远程调用的方法上给一个需要用到的WEB元素作为参数,这个参数在调用该方法的时候不需要用户来传递,当调用该方法的时候系统会自动的给该参数赋值,这时候我们就可以在方法体中自由...
为了支持DWR,需要在`web.xml`中添加DWR的相关配置。 ```xml <filter-name>dwr-invoker <filter-class>org.directwebremoting.servlet.DwrServlet <param-name>debug <param-value>true <param-name>...
开发者可以使用JSP的内置对象如request、response、session和application等来处理HTTP请求和响应,以及管理用户的会话状态。 **Servlet**: Servlet是Java EE中用于处理HTTP请求的Java类。在JSP+Servlet应用中,...
DWR MyFaces JSF Reference Implementation Jakarta Slide GWT Jetspeed2 ICEfaces 其他 Atomikos Transaction Manager Java Open Transaction Manager (JOTM) Bitronix Transaction Manager ActiveMQ Binding JAX-...
采用ajax技术实现的图形验证码,在前端进行验证。验证码信息为图片。每一行代码均有注释,通俗易懂。 实现步骤: 1、创建web工程 ... 6、在js文件中,通过dwr,调用AjaxService类中的方法,取得数据,实现判断
**表格17**: WEB-INF/dwr.xml配置文件中关于springbean的调用(必需设置) ```xml <dwr:direct object-ref="myService" scriptName="myService"> <dwr:remote-method name="doSomething" return="java.lang.String">...
- Ajax(Asynchronous JavaScript and XML)允许通过JavaScript异步地从服务器获取数据,无需刷新整个页面。它通过创建XMLHttpRequest对象,发送HTTP请求,然后处理服务器返回的数据,更新DOM(文档对象模型)来...
为了让Hibernate在请求处理过程中自动打开和关闭Session,可以使用`OpenSessionInViewFilter`过滤器。 ```xml <!--Hibernate Session自动开启--> <filter-name>lazy <filter-class>org.springframework.orm....
- JSP内置对象与作用域:JSP的九大内置对象(如request、response、session等)和四大作用域(page、request、session、application)是Web开发中的基础概念。 3. **Spring框架**: - Spring MVC与Hibernate整合...