我是DWR的新手。我试图使用DWR脚本访问一个java类。
我使用带有struts的DWR作为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值的简单方法。
现在,在我的上述代码中,我可以使用/dwr/访问engine.js和util.js文件。
但是,当我尝试使用url: /dwr/ task.js /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)任何帮助都是非常感谢的。
提前谢谢。
发布于 2014-04-29 06:12:12
我不使用dwr.xml文件(我有一个空文件)。我使用注释(例如@RemoteProxy),但我不确定您是否正确地使用javascript属性(在您的dwr.xml文件中)。我认为它不是您在Javascript中用来调用远程Java对象的标识符。
尝试像这样包含js脚本(注意大写的T字母):
<script type='text/javascript' src="<c:url value='/dwr/interface/Task.js' />"></script>网址标签来自<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>,它对我很有用,我认为它更漂亮。
然后Javascript中的方法调用将类似于(同样是大写的T字母):
Task.getTaskCount();请看一下我的Web.xml。我使用注释,所以我需要init-param:类。它告诉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>https://stackoverflow.com/questions/23246096
复制相似问题