【问题标题】:DWR class.js file not generated未生成 DWR class.js 文件
【发布时间】:2014-04-23 13:36:50
【问题描述】:

我是 DWR 的新手。我试图使用 DWR 脚本访问 java 类。

我使用 DWR 和 struts 作为 web 层,并在内部使用 spring 进行依赖注入。

我的 Web.xml 如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                      xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com  /xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns  /javaee/web-app_3_0.xsd" id="WebApp_TAPE" version="3.0">

<welcome-file-list>
    <welcome-file>Login.jsp</welcome-file>
</welcome-file-list>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<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>
    <servlet>
      <servlet-name>dwr-invoker</servlet-name>  
      <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
      <init-param>
         <param-name>debug</param-name>
         <param-value>true</param-value>
      </init-param>
    </servlet>

    <servlet-mapping>
      <servlet-name>dwr-invoker</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
    </web-app>

我的dwr.xml是这样的:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC
       "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"  
        "http://getahead.org/dwr/dwr20.dtd">
    <dwr>
          <allow>
        <create creator="new" javascript="task">
               <param name="class" value="com.Task"/>
        </create> 
          </allow>
    </dwr>

在我的 JSp 中,我添加了以下三行:

    <script type='text/javascript' src="<%=contextString %>/dwr/engine.js"></script>
    <script type='text/javascript' src="<%=contextString %>/dwr/util.js"></script>
    <script type='text/javascript' src="<%=request.getContextPath() %>/dwr/interface/task.js"></script>

这就是我尝试访问“任务”脚本的方式:

    var count = task.getTaskCount();
    alert(count);

getTaskCount 方法是一个返回 int 值的简单方法。

现在,在上面的代码中,我可以使用以下命令访问 engine.js 和 util.js 文件 /dwr/。

但是当我尝试使用 url 访问 task.js 文件时: /dwr/interface/task.js,脚本未生成,控制台生成以下错误:

    2014-04-23 18:48:55,896 ["http-bio-8444"-exec-9] WARN          org.directwebremoting.servlet.ExceptionHandler:67  - Unhandled Exception
    java.lang.SecurityException: No class by name: taskBL
at org.directwebremoting.impl.DefaultCreatorManager.getCreator(DefaultCreatorManager.java:189)
at org.directwebremoting.impl.DefaultRemoter.generateInterfaceScript(DefaultRemoter.java:158)
at org.directwebremoting.servlet.InterfaceHandler.handle(InterfaceHandler.java:50)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at org.directwebremoting.servlet.DwrServlet.doGet(DwrServlet.java:132)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)

感谢任何帮助。

提前致谢。

【问题讨论】:

    标签: java javascript web-applications dwr


    【解决方案1】:

    我不使用 dwr.xml 文件(我有一个空文件)。我使用注释(例如@RemoteProxy),但我不确定您是否正确使用了 javascript 属性(在您的 dwr.xml 文件中)。我认为这不是您在 Javascript 中用于调用远程 Java 对象的标识符。

    尝试包含这样的 js 脚本(注意大写的 T 字母):

    <script type='text/javascript' src="<c:url value='/dwr/interface/Task.js' />"></script>
    

    url 标签来自&lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %&gt;,它对我有用,我认为它更漂亮。

    那么 Javascript 中的方法调用将如下所示(同样是大写的 T 字母):

    Task.getTaskCount();
    

    请查看我的 Web.xml。我使用注释,所以我需要 init-param: classes。它告诉 dwr 哪些类将被远程。

    <servlet>
        <display-name>DWR Servlet</display-name>
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <init-param>
            <param-name>classes</param-name>
            <param-value>com.Task</param-value>
        </init-param>
        <init-param>
            <param-name>crossDomainSessionSecurity</param-name>
            <param-value>false</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多