转自http://www.blogjava.net/patterns/archive/2006/04/07/dwr_access_servletobjects.html
我们在实际的 web 应用开发过程中,在用户登录后会向 session 中塞入一些信息(例如用户信息,菜单信息等),在页面提交后,会从 session 中取出这些信息,拼成完整的业务记录,保存到数据库中。此时就要求 DWR 可以与 Servlet 对象通信。
其实 DWR 已经考虑好了,在 DWR1.1 中可以利用 uk.ltd.getahead.dwr.WebContext 和 uk.ltd.getahead.dwr.WebContextFactory 来和 Http Servlet 的标准对象进行通信,包括:
l HttpServletRequest l HttpServletResponse l HttpSession l ServletContext l ServletConfig |
具体的使用方法如下:
import javax.servlet.http.HttpServletRequest; import uk.ltd.getahead.dwr.WebContext; import uk.ltd.getahead.dwr.WebContextFactory;
/// WebContext ctx = WebContextFactory.get(); HttpServletRequest req = ctx.getHttpServletRequest(); |
WebContext 是使用 ThreadLocal 保存的,你可以看一下 uk.ltd.getahead.dwr.impl.DefaultWebContextBuilder 源码,所以可以在任何地方使用它,例如在上一篇的 demo 中进行测试如下:
在 index.html 头部增加如下代码并改名为 index.jsp
<%@ page contentType="text/html; charset=GBK" %>
<% System.out.println("This is DWR servlet object!");
session.setAttribute("dwr","love dwr"); %> |
修改 MessageDao.java 的代码如下
package test.dwr;
import javax.servlet.http.HttpServletRequest;
import uk.ltd.getahead.dwr.WebContext; import uk.ltd.getahead.dwr.WebContextFactory;
public class MessageDao { public Message save(Message message) {
WebContext ctx = WebContextFactory.get(); HttpServletRequest req = ctx.getHttpServletRequest();
System.out.println("========HttpServletRequest Begin======="); System.out.println("req:" + req.getRemoteHost()); System.out.println("req-session:" + req.getSession().getAttribute("dwr")); System.out.println("text:" + req.getParameter("text")); System.out.println("from:" + req.getParameter("from")); System.out.println("=========HttpServletRequest End========");
System.out.println("========Lucky DWR Begin======="); System.out.println("text:" + message.getText()); System.out.println("from:" + message.getFrom()); System.out.println("=========Lucky DWR End========");
return message; }
public Message get() { return new Message("This is the first dwr demo!", "test"); } } |