DWR - Probleme mit Konfiguration

Tarantoga

Aktives Mitglied
Hey,
ich versuche DWR in ein Spring MVC WebProjekt einzubauen. Dabei möchte ich jetzt noch gar keine bestimmten Funktionen implementieren, sondern einfach das Ganze einmal zum Laufen bringen.
So weit so schlecht.

1) Ich habe sowohl dwr.jar als auch commons-logging.jar im lib Verzeichnis.

2) Die Testseite sieht so aus:

HTML:
<script type="text/javascript" src="/DWR/dwr/engine.js"></script>
		<script type="text/javascript" src="/DWR/dwr/util.js"></script>
		<script type="text/javascript" src="/DWR/dwr/interface/dwrService.js"></script>
	
                <script type="text/javascript">
                    function getStuff() { 
  dwr.util.setValue("test", "Hallo");
                   }
  </script>

<input type="button" onclick="getStuff()" value="Button">
                
                <div id="test">
                    
                </div>

Das funktioniert soweit, also ich kann zumindest auf die dwr-Bibliotheken zugreifen.

Jetzt zum Problem:

Ich kann keine Java-Methoden im Script aufrufen.
Es fängt ja schon damit an, dass ich nicht weis wie ich das ganze konfigurieren soll.
Mittels dwr.xml scheint angeblich veraltet zu sein, also habe ich es zuerst mit annotations versucht(benutze ich sehr gerne bei @MVC Controllern), bin aber gescheitert.
Danach habe ich es mit dem Spring namespace versucht, aber auch noch keinen Erfolg gehabt.

Hab mir schon die Documentation durchgelesen und tagelang gegoogelt. Ich werd einfach nicht schlau daraus.
Letzter Stand meines ApplicationContext ist:

[XML]<dwr:controller id="dwrController" debug="true" />

<dwr:url-mapping />

<dwr:configuration/>



<dwr:annotation-config id="ac" />


<bean id="Demo" class="com.ah.controller.Demo">
<dwr:remote javascript="Demo">
<dwr:include method="sayHello" />
</dwr:remote>
</bean>[/XML]

Im deployment-descriptor ist das dispatcher-servlet auch auf /dwr/* gemappt!


Der ServorLog zeigt mir auch einen Error bzw. auch ein PopUp Error im Browser (CSRF)

[XML]INFO: WEB0671: Loading application [DWR] at [/DWR]
INFO: DWR wurde erfolgreich bereitgestellt in 4.015 Millisekunden.
INFO: 4168 [http-thread-pool-8080(2)] ERROR org.directwebremoting.impl.DefaultCreatorManager -Class not found: 'dwrService'

INFO: 4168 [http-thread-pool-8080(2)] WARN org.directwebremoting.impl.DefaultCreatorManager -Names of known classes are: __Data Demo __System

INFO: 4169 [http-thread-pool-8080(2)] WARN org.directwebremoting.servlet.ExceptionHandler -Error: java.lang.SecurityException: Class not found

INFO: 5247 [http-thread-pool-8080(3)] ERROR org.directwebremoting.dwrp.BaseDwrpHandler -A request has been denied as a potential CSRF attack.

INFO: 5247 [http-thread-pool-8080(3)] WARN org.directwebremoting.dwrp.BaseCallHandler -Exception while processing batch
java.lang.SecurityException: CSRF Security Error[/XML]

Ich seh die Fehler, finde aber keine Lösung.
Vielleicht könnte jemand mit Erfahrung in Spring mit DWR mir einen kleinen Anstoß in die richtige Richtung geben.
Danke schonmal,
Tarantoga
 

mvitz

Top Contributor
So, hatte doch gerade ein wenig Zeit.

Folgendes funktioniert bei mir:

Java:
@Service
@RemoteProxy(name = "Greeter")
public class Greeter {
    @RemoteMethod
    public String greet() {
        return "Hello world!";
    }
}

WEB-INF/web.xml
[XML]<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>[/XML]

WEB-INF/spring-servlet.xml
[XML]<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd Index of /schema/context http://www.springframework.org/schema/context/spring-context-3.0.xs Index of /schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">

<context:annotation-config />
<context:component-scan base-package="de.mvitz.examples.dwr.spring.annotation" />

<dwr:configuration />
<dwr:annotation-config />
<dwr:controller>
<dwr:config-param name="crossDomainSessionSecurity" value="false" />
</dwr:controller>
<dwr:url-mapping />

</beans>[/XML]

index.html
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Greeter!</title>
        <script type="text/javascript" src="dwr/interface/Greeter.js"></script>
        <script type="text/javascript" src="dwr/engine.js"></script>
        <script type="text/javascript">
          function greet() {
            Greeter.greet(function(data) {
              alert(data);
            });
          }
        </script>
    </head>
    <body>
        <h1>Greeter!</h1>
        <form>
            <p>
                <input type="button" value="Greet!" onclick="greet();" />
            </p>
        </form>
    </body>
</html>

Hoffe das hilft dir fürs erste.
 

Tarantoga

Aktives Mitglied
Wow danke, werde mich gleich dran machen. ;)

EDIT:
ICh weiß nicht, aber es will einfach nicht funktionieren.
Entweder liegt es daran, dass ich kein Maven benutze, obwohl ich eig. alle relevanten Jars drin habe.

Oder an meiner allg. Konfiguration.
Zb. steht in allen Tutorials zu Spring MVC dass man zum ControllerAnnotation Scannen nur den <context:component-scan> braucht.
Bei mir funktionierte es aber erst nach hinzufügen von:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

???
 
Zuletzt bearbeitet:

Tarantoga

Aktives Mitglied
Hi,
Spring ist die Version 3.0.2
Bei den Jars brauche ich dochnur dwr.jar und comms-logging-1.1.jar, oder?

Ansonsten habe ich in meinem Testprojekt noch:
log4j-1.2.12.jar
org.springframework.aop-3.0.4.jar
bzw. alle die in der Beispiel App. der DWR Homepage angeboten sind.
(Butter Dev - David Marginian - Java Web Developer)


Außerdem legt Netbeans das lib Verzeichnis per Default nicht nach WEB-INF, sondern ganz einfach ins Root Verzeichnis.
Könnte es daran liegen?

EDIT:

bzw. wie schon oben erwähnt funktioniert DWR bereits!
Ich kann util.js und engine.js verwenden.

Nur das Zugreifen auf Java-Methoden will nicht funktionieren. Irgendwie muss es da an der Konfiguration scheitern.

mfg
Tarantoga


EDIT 2:

Ich habe Fortschritte gemacht!
Beim aufrufen der Javascript im Browser, die wiederum eine Java-Funktion ausführt, wird jetzt ein CSRF Security Error geworfen!
Vorher ist einfach nichts passiert.
(btw. Ich machs jetzt ohne Annotations und konfiguriere es via XML)

Ich denke ich kommer der Lösung immer näher. Wie bekomme ich nun noch den Error weg?

spring-servelt.xml (Habe der Einfachheit halber mal Alles da reingepackt)
[XML] <context:annotation-config />
<context:component-scan base-package="org.krams.tutorial.controller" />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>



<dwr:controller id="dwrController" debug="true" />

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property value="true" name="alwaysUseFullPath"></property>
<property name="mappings">
<props>
<prop key="/dwr/**/*">dwrController</prop>
</props>
</property>
</bean>

<bean class="org.krams.tutorial.service.ArithmeticService" id="Greeter">
<dwr:remote javascript="Greeter">
<dwr:include method="greet"/>
</dwr:remote>
</bean>



<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
[/XML]

index.jsp
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Greeter!</title>
        <script type="text/javascript" src="/Krams/dwr/interface/Greeter.js"></script>
        <script type="text/javascript" src="/Krams/dwr/util.js"></script>
        <script type="text/javascript" src="/Krams/dwr/engine.js"></script>
       
        <script type="text/javascript">
          function greet() {
            Greeter.greet(function(data) {
              alert(data);
            });
          }
          function hello(){
              dwr.util.setValue("text", "Hallo");
          }
        </script>
    </head>
    <body>
        <h1>Greeter!</h1>
        <form action="#">
            <p>
                <input type="button" value="Greet!" onclick="greet();" />
                 <input type="button" value="Hallo" onclick="hello()" />          
            </p>
        </form>
         
        <div id="text">
            
        </div>
    </body>
</html>


Habe gelesen, dass es daran liegen könnte, dass HttpOnly per Default true ist.

Wenn ich in der web.xml nun folgendes konfiguriere:
[XML]<session-config>
<cookie-config>
<http-only>false</http-only>
</cookie-config>
</session-config>[/XML]

Bekomme ich diesen Fehler:
Code:
SCHWERWIEGEND: Ausnahmefehler bei der Bereitstellung der Anwendung [Krams] : org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'cookie-config'. One of '{"http://java.sun.com/xml/ns/j2ee":session-timeout}' is expected.

Was muss ich da nun tun?
Muss man da einen Namespace hinzufügen?


Tausend Dank schon mal.
 
Zuletzt bearbeitet:

mvitz

Top Contributor
Bei meinen ersten Versuchen hatte ich den Fehler auch und habe deswegen
[XML]<dwr:controller>
<dwr:config-param name="crossDomainSessionSecurity" value="false" />
</dwr:controller>[/XML]
genutzt.
Bei den Projekten die du auf Github findest, war das dann komischerweise nicht mehr nötig.
 

Tarantoga

Aktives Mitglied
Sry,
muss noch eine Frage dranhängen. ;)

Ich hab in der JSP die Pfade zu den jeweiligen Interfaces der Java Klassen angegeben. Jedoch findet er die Datein nicht wenn ich den Namen der aktuellen webapp bei src="" angebe.
Wenn ich den namen der WebApp eingebe, aus der ich den Code rüberkopiert habe, funktionierts, aber auch nur die alten Klassen. Die, die ich neu geschrieben habe funktionieren so und so nicht.

Meine Frage wäre also: Wohin speichert DWR die umgewandelten Java Klassen per Default?
Damit ich richtige Pfade angeben kann.

Dankeschön.
 

mvitz

Top Contributor
Wenn du mit src="" das <script src=""> aus der JSP meinst, dann ist der Pfade eben immer /<webbappname>/<dwrmapping>/interface/<komponentnname>.js

Unter JSP kannst du dir das hartcodieren des WebAppNamens sparen, wenn du mit dem JSTL Tag <c:url ...> arbeitest.
 

Tarantoga

Aktives Mitglied
Genau das meine ich.

Nur heißt mein momentaner WebApp "Test", zuvor habe ich mit dem "Krams" BeispielApp herumexperimentiert.
Dann habe ich den JSP Code einfach rüberkopiert nach "Test".
Also in "Test" steht in der JSP nun "/Krams/dwr/interface/People.js".

Das funktioniert, aber wenn ich nun "Krams" durch "Test" ersetze (wie es doch eig. gehört) geht es nicht mehr.
Also wo legt DWR eig. die umgewandelten Klassen ab? Auf was müsste ich da mit <c:url > refernzieren?
bzw. warum kann ich statt "Krams" nicht einfach "Test" einsetzen, wie man es doch erwarten würde?

LG
Tarantoga
 

mvitz

Top Contributor
Du kannst garantiert Krams durch Test ersetzen. Ich vermute die Probleme liegen bei dir an einer ganz anderen Stelle. Dafür spricht auch, dass du wie bereits oben gesagt Probleme mit den Spring Shortcuts hast.

Für eine detailiertere Analyse könntest du ja einfach mal dein Projekt hochladen.
 

Tarantoga

Aktives Mitglied
Du hattest Recht, im Deployment Descriptor fehlte noch was beim Mapping vom Dispatcher Servlet.
Trotzdem wundert mich, dass ich auf den Pfad mit "Krams" überhaupt zugreifen konnte, da die App nichtmal Deployed oder sonstwas war.
Ich nehme einmal an die Files werden von DWR genriert und bis zu einer Änderung des Codes nicht mehr upgedatet?
LG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkm Probleme mit einem AJAX-Call in einem dynamischen Webprojekt Web Tier 15
M JSF Probleme bei Navigation mit Verzeichnisswechsel Web Tier 2
W JSF Probleme mit Data Table Web Tier 8
W JSF Probleme mit Zugriff zur Managed Bean Web Tier 11
G Probleme mit Java + Tomcat | Cannot switch on a value of type String for source level below 1.7 Web Tier 8
F JSF Probleme mit OverlayPanel Web Tier 0
H Frameset durch Tabelle ersetzten - Probleme mit jsp:include Web Tier 3
xehpuk JSF URL-Encoding-Probleme bei <h:link> (Mojarra) Web Tier 4
M ejb @Remote macht probleme Web Tier 10
S JSF SelectOneMenu - Probleme mit AJAX Web Tier 6
W Probleme mit Expression language ? Web Tier 13
P JSF Datenbank Probleme (Limit, Wiederholung) Web Tier 8
J JSF JavaScript Probleme zwischen Tomahawk und Tiles!? Web Tier 2
B Probleme mit h:selectOneRadio Web Tier 2
W JSF MyFaces Tomahawk Probleme Web Tier 4
G Probleme mit EclipseLink und Java.util.Date Web Tier 3
S JSF Probleme beim redirect im ExceptionHandler Web Tier 2
P JSF 1.2 Navigation probleme Web Tier 2
D Probleme beim installieren von WebBeans Web Tier 2
D Probleme mit Tomcat Web Tier 3
M Tomcat 6 Umlaut Probleme Web Tier 2
D Seam Example Probleme Web Tier 2
C Probleme mit JSPs in Unterverzeichnissen Web Tier 4
A [PrimeFaces] dataTable mit paginator Probleme Web Tier 2
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
0 JSF: css einbinden - Probleme Web Tier 2
M iframe probleme Web Tier 2
K [GWT] Probleme beim asynchronen Methodenaufruf mit GWT-RPC Web Tier 8
B Probleme mit RichFaces Web Tier 2
O struts2 - Probleme mit parametrisierten URLs Web Tier 5
E Probleme mit GWT & MySQL Web Tier 3
G Probleme mit Ajax Login (jsp) Web Tier 5
S Tomcat / Eclipse Probleme Web Tier 2
B Probleme mit <jsp:include page=""/> und Laufzeit Web Tier 7
P Zurück-Button des Browsers macht Probleme Web Tier 9
O Struts2: Probleme mit Links aus Packages raus Web Tier 9
A JSF+Glassfish: Probleme mit Managed Bean Web Tier 2
S Probleme mit den Nav_rules und HTML code Web Tier 2
D Probleme mit ServletRequest Web Tier 14
G Probleme mit Tomcat Web Tier 14
E RichFaces 3.2.1 Probleme Web Tier 4
W JSTL macht Probleme Web Tier 6
W JavaBeans class="" macht Probleme Web Tier 2
A Time-Out Probleme Web Tier 21
B Probleme mit Marquee Tag Web Tier 3
looparda Spring MVC mit XML Konfiguration Web Tier 2
T Konfiguration Web Tier 4
B (JSP)+(Struts2)+(Servlet) Konfiguration web.xml Web Tier 2
reibi Konfiguration ausserhalb vom WAR-File Web Tier 7
M Frage zur Konfiguration einer RichFaces DataTable Web Tier 4
F Log4J Konfiguration in .war Datei Web Tier 4
Q tomcat konfiguration - rewrite Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben