• DWR以及SSH集成DWR


    之前只是单独接触了DWR,知道一个基本的开发流程。

    web.xml配置文件:


    <!-- 配置Dwr信息 -->
     <servlet>
      <servlet-name>DwrServlet</servlet-name>
      <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
      <!-- 是否允许调试,如果要在浏览器中调式则必须设置为true -->
      <init-param>
       <param-name>debug</param-name>
       <param-value>true</param-value>
      </init-param>
      <!-- 是否进行日志管理,如果是要在这设置参数,通常省略 -->
      <init-param>
       <param-name>logLevel</param-name>
       <param-value>WARN</param-value>
      </init-param>
      <!-- 是否允许跨域请求,如果是则必须设置为false,默认为true -->
      <init-param>
       <param-name>crossDemainSessionSecurity</param-name>
       <param-value>false</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
      <servlet-name>DwrServlet</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
     </servlet-mapping>
     <!-- 配置Dwr信息 end-->
     
     
    dwr.xml配置如下:

    <dwr>
     <allow> 
      <create creator="new" javascript="ExceptionDemo">
       <param name="class" value="com.bluefox.dwr.exception.ExceptionDemo"/>
      </create>
      
      <create creator="new" javascript="CountryService">
       <param name="class" value="com.bluefox.dwr.service.impl.CountryServiceImpl"/>
      </create>
      
      <convert match="com.bluefox.dwr.domain.Country" converter="bean"/>
     </allow>
    </dwr>
     
    然后在JSP中:

    <!DOCTYPE HTML><%@page language="java"
     contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <html>
    <head>
    <title>dwr_6</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type='text/javascript' src='/dwr_1/dwr/engine.js'></script>
    <script type='text/javascript' src='/dwr_1/dwr/util.js'></script>
    <script type='text/javascript' src='/dwr_1/dwr/interface/CountryService.js'></script>
    <script type="text/javascript">
     window.onload = function() {
      CountryService.findAllCountrys(function(data) {
       //alert(data);
       dwr.util.addOptions("country",data,"id","name");
      });
     };
    </script>
    </head>
    <body>
     <select id="country" size="1">
      <option value="">请选中国家</option>
     </select>
    </body>
    </html>
     
    这样子,DWR就能够单独的使用了,首先我以为在SSH中DWR也是这样配置就行了,就能够发挥作用,没想到并不是这样。
    首先是web.xml跟单独使用DWR时是一样的。
    然后是dwr.xml,这里将会有所改变,因为此时的dwr对象不再是自己new,而是交给了spring进行管理的,具体如下:

    <dwr>
     <allow>
      <!-- create中javascript为要生成的js文件名称和前台调用方法的主方法:-->
      <!-- create因为使用ssh框架,由spring代理,所以设置成spring,同时也是可以自己new的,scope表示存活周期-->
      <create creator="spring" javascript="userAction" scope="application">
       <!-- param中的name因为要调用bean中的方法,所以 使用beanName,当然还有其他配置方法(如class) ,-->
       <!-- value我这里是用的spring配置文件applicationContext.xml中的action的id  -->
       <param name="beanName" value="userAction"></param>
       <!--include是说明这个action中只有findAllTeachers这个方法可以被前台所访问 ,  -->  
       <!-- 不过我这样配置了,但是没有效果,dwr debug调试时,userAction中的方法全部都能访问 --> 
       <include method="findAllTeachers"/>
      </create>
      <!-- convert说明将match路径下的action换成bean,供beanName使用 -->
      <convert match="com.ymj.stuInfoColl.domain.User" converter="bean"/>
     </allow>
    </dwr>
     
    在网上找资料时,<param name="beanName" value="userAction"></param> ,有的是将此处的value设置成strust中path值,我试了,但是没有成功。如果哪个前辈知道的话,可以给我说说,感激不尽。
    其他地方都没有什么要特别注意的,但是strust.xml配置文件中必须得加上下面这句话。
    <constant name="struts.action.excludePattern" value="/dwr.*"></constant>
    为什么呢?!原因很明显,strust的过滤器与dwr中的过滤器产生了冲突。
    web.xml中
    strust的过滤器:

     <filter>
      <filter-name>Struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     </filter>
     
     
     <filter-mapping>
      <filter-name>Struts2</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>
     
    dwr的过滤器:

     

     <!-- 配置Dwr信息 -->
     <servlet>
      <servlet-name>DwrServlet</servlet-name>
      <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
      <!-- 是否允许调试,如果要在浏览器中调式则必须设置为true -->
      <init-param>
       <param-name>debug</param-name>
       <param-value>true</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
      <servlet-name>DwrServlet</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
     </servlet-mapping>
     <!-- 配置Dwr信息 end-->
     

    可以得出,strust过滤器中的url-pattern是*,而dwr则是/dwr/*,明显可以看出strust将拦截所有的路径,当然也就包括了原本给dwr的路径。
    想到这里当然也就能够想到解决办法,那就是将本应该给dwr的路径,strust不再拦截,就好了,那是要怎样做呢?!确实上文早就给出了答案。
    <constant name="struts.action.excludePattern" value="/dwr.*"></constant>
    但是这句话是什么意思呢?!excludePattern表示这个将是strust不处理的路径,也就让/dwr.* 这个路径交个了DWR框架。
    至此问题已经解决,从此以后,SSH与DWR集成不再成问题。
    另外还将这个DWR动态生成下拉列表,并且选中特定项的JSP关键代码贴出来:
     

      <script type='text/javascript' src='/StudentInfoCollectionSys/dwr/engine.js'></script>
      <script type='text/javascript' src='/StudentInfoCollectionSys/dwr/interface/userAction.js'></script>
      <script type='text/javascript' src='/StudentInfoCollectionSys/dwr/util.js'></script>
     
      <script type="text/javascript">
      $(function(){
     
       var teacherId = $("input[name='teacherIdValue']").val();
       userAction.findAllTeachers(function(data)
       {
        dwr.util.addOptions("teacherId",data,"id","name"); 
        dwr.util.setValue("teacherId",teacherId);
       });
      });
     
      </script>
    而在jsp的body里面则只需要:
    <select id="teacherId" name="teacher"></select>
  • 相关阅读:
    TCP的三次握手和四次挥手理解及面试题
    linux网卡配置文件参数
    linux的常用指令和配置文件
    django中的modelform和modelfoemset
    django中的form表单验证
    php快速开发的学习经历
    一个微信支付商场的经历
    https的学习过程
    使用java访问elasticsearch创建索引
    写博客是为什么
  • 原文地址:https://www.cnblogs.com/wuxu/p/10701570.html
Copyright © 2020-2023  润新知