`

DWR 之 DWRServlet类分析

    博客分类:
  • DWR
阅读更多
org.directwebremoting.servlet.DwrServlet主要分为三部分,也就是三个主要方法:init;doGet;doPost

1,init,初始化。   
    DWR对于Servelet容器内部设一个配置容器,该容器装载dwr映射相关信息。

public void init(ServletConfig servletConfig) throws ServletException
    {
        super.init(servletConfig);
        ServletContext servletContext = servletConfig.getServletContext();

        try
        {
            // setupLogging() only needed for servlet logging if commons-logging is unavailable
            // logStartup() just outputs some version numbers
            日志初始化开始
            StartupUtil.logStartup(servletConfig);

            // create and setup a DefaultContainer
             DWR对于Servelet容器内部设一个配置容器,该容器装载dwr隐射相关信息。
            container = ContainerUtil.createAndSetupDefaultContainer(servletConfig);

            StartupUtil.initContainerBeans(servletConfig, servletContext, container);
            webContextBuilder = container.getBean(WebContextBuilder.class);

            ContainerUtil.prepareForWebContextFilter(servletContext, servletConfig, container, webContextBuilder, this);
            ContainerUtil.publishContainer(container, servletConfig);
            ContainerUtil.configureContainerFully(container, servletConfig);
        }
        catch (ExceptionInInitializerError ex)
        {
            log.fatal("ExceptionInInitializerError. Nested exception:", ex.getException());
            throw new ServletException(ex);
        }
        catch (Exception ex)
        {
            log.fatal("DwrServlet.init() failed", ex);
            throw new ServletException(ex);
        }
        finally
        {
            if (webContextBuilder != null)
            {
                webContextBuilder.unset();
            }
        }
    }




比较细致的环节:
init()调用
createAndSetupDefaultContainer()调用
setupDefaultContainer(defaultContainer, servletConfig)
调用如下步骤
1)setupDefaults(container);
包括: 容器相关管理工具配置集,也就是要实现的一些接口。这种方式蛮好,当容器需要具备很多接口功能时,把这些接口全部做成隐射,并设置成可配置的实现
container.addImplementation(AccessControl.class,DefaultAccessControl.class);
// Mapping handlers to URLs,路径配置
createUrlMapping(container, "/index.html", IndexHandler.class, "indexHandlerUrl");
//读取servlet配置属性
2)setupFromServletConfig(container, servletConfig);

额外处理1)中多选类型
3)resolveMultipleImplementations(container, servletConfig);

里面使用了通用yui型压缩器
【使用 YUI Compressor 压缩 Javascript 和 CSS
YUI Compressor是使用Java编写的工具,需要Java版本大于等于1.4。
工作原理简介:
主要是去掉冗余的空白,主要包括空格,换行符、制表符。
对于 Javascript,还采用缩短变量名的方法压缩文件,就是在保证代码正确性的情况下将变量名用只有1个字符的字符串代替,或者2个、3个字符,总之尽量短。
对于 CSS,还有采用优化0值属性值的表示,优化颜色值的方法压缩文件。
CSS的优化比 CSSTidy 功能弱。CSSTidy还能支持一些相关属性的合并。】
//工具配置集 加载,显现,检查
4)container.setupFinished();
容器内容bean初始化 ,包括系统默认???
initContainerBeans






  2,doGet
  实际调用doPost,看到这里最好温习下servlet的doGet方法和doPost的区别
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException
    {
        doPost(req, resp);
    }



    3,doPost
   在工程中,有个样例Dynamically Text,地址是http://localhost:5050/dwr/simpletext/index.html,当点击按钮时,实际上就是触发了org.directwebremoting.servlet.DwrServlet的下面的方法。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        try
        {
            webContextBuilder.set(request, response, getServletConfig(), getServletContext(), container);

            UrlProcessor processor = container.getBean(UrlProcessor.class);
            processor.handle(request, response);
        }
        finally
        {
            webContextBuilder.unset();
        }
    }
分享到:
评论

相关推荐

    dwr源码包,dwr.jar包下载

    org.directwebremoting.servlet.DwrServlet <init-param> <param-name>debug</param-name> <param-value>true</param-value>//开启调试 </init-param> <servlet-name>dwr-invoker ...

    最新的dwr的jar包

    最新的dwr的jar包,要用到dwr技术必须的jar包。

    在Spring中使用dwr

    在Spring中使用dwr,配置详解 <servlet-name>dwr-invoker <servlet-class>uk.ltd.getahead.dwr.DWRServlet <param-name>debug</param-name>

    ajax框架Dwr的具体使用步骤

    org.directwebremoting.servlet.DwrServlet <init-param> <param-name>debug</param-name> <param-value>true</param-value>//开启调试 </init-param> <servlet-name>dwr-invoker...

    DWR的访问DAO和Servlet

    DWR 的 访问 Dao和servlet的简单测试和应用

    DWR入门教程之HelloWorld - 中文JAVA技术网.mht

    请先到 http://getahead.ltd.uk/dwr/ 下载 dwr.jar ,放到 WEB-INF/lib 下 … 负责处理客户端请求,并呼叫 Java 对象的是 DWRServlet , DWR 其实也有些 Model 2 的味道,只是 View 的这一层比较弱,因为放到客户端...

    Spring+Dwr整合的项目(源码)

    这是一个SPRING+DWR的整合项目.包括整合的三种方式,最彻底的整合是不需要配置DWRSERVLET+dwr.xml文件.使用annonation实现. 希望对你有用. 一起学习,一起进步...

    dwr相关jar包

    dwr推送要用到的两个jar包,dwr.jar是3.0的,还有前台需要的jquery文件,需要案例请关注我看我的个人博客,里面有dwr使用的详细介绍,有什么问题直接回复我

    Java 开发人员与网页设计人员的桥梁 DWR

    Java 开发人员与网页设计人员的桥梁 DWR…呃!...负责处理客户端请求,并呼叫Java对象的是DWRServlet,DWR其实也有些Model 2的味道,只是View的这一层比较弱,因为放到客户端的JavaScript应用程序中…

    dwr 原码

    負責處理客戶端請求,並呼叫Java物件的是DWRServlet,DWR其實也有些Model 2的味道,只是View的這一層比較弱,因為放到客戶端的JavaScript應用程式中…

Global site tag (gtag.js) - Google Analytics