使用dwr我們可以動態請求一個頁面內容到當前頁:一下是代碼:
1,后臺方法:
public String getInclude() throws ServletException, IOException { WebContext ctx = WebContextFactory.get(); System.out.println(ctx.getCurrentPage()); ctx.getHttpServletRequest().setAttribute("test", "hello ,test forward"); return ctx.forwardToString("/iclude.jsp"); }
2,dwr配置:
<create javascript="testinclude" creator="new"> <param name="class" value="com.dwr.TestInclude"/> </create>
3,頁面:
<html> <head> <base href="<%=basePath%>"> <script type="text/javascript" src="dwr/engine.js"></script> <script type="text/javascript" src="dwr/util.js"></script> <script type="text/javascript" src="dwr/interface/testinclude.js"></script> <script type="text/javascript"> function getInClude(){ testinclude.getInclude( function(data){ dwr.util.setValue("fq",data,{ escapeHtml:false }); } ); } </script> </head> <body> <input type="button" value="include page" onclick="javascript:getInClude()" /> <div id="fq"> </div> </body> </html>
2,其中使用了
WebContext ctx = WebContextFactory.get();
ctx.forwardToString("/iclude.jsp");
查看dwr源代碼:
getServletContext().getRequestDispatcher(url).forward(realRequest, fakeResponse);
其中:fakeResponse
HttpServletResponse fakeResponse = new SwallowingHttpServletResponse(realResponse, sout, realResponse.getCharacterEncoding());
而SwallowingHttpServletResponse使用了WriterOutputStream
public SwallowingHttpServletResponse(HttpServletResponse response, Writer sout, String characterEncoding) { super(response); pout = new PrintWriter(sout); outputStream = new WriterOutputStream(sout, characterEncoding); this.characterEncoding = characterEncoding; }
WriterOutputStream:也就是對 ServletOutputStream的封裝。
public final class WriterOutputStream extends ServletOutputStream