我們在實際的 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");
??? }
} |