# Angezeigte Url verändern



## MZ3291 (4. Sep 2012)

Hallo alle zusammen,

mein Problem sollte eigentlich recht einfach zu lösen sein, leider komme ich nicht mehr weiter, weder durch Google noch durch ausprobieren.

Meine ActionBeans (ich verwende Stripes) kümmern sich vorbildlich, um das ANzeigen meiner jsp Seiten und weiteren Schnick schnack. 
Dabei endet die angezteigte Url mit .action, 
Beispiel: http://localhost/de.company.project/packages/Login.action

Was muss ich tun wenn ich diese Url verändern möchte und sie beispielsweise auf .htm enden soll ?

Ich würde vermuten, dass ich etwas in meiner WEB.xml ändern muss, weiß aber leider nicht was..

Bin dankbar für jede Hilfe und jede Idee 

Grüße


----------



## JimPanse (4. Sep 2012)

URLRewrite hatte ich mal in einem Stripes-Projekt im Einsatz....


----------



## Sym (4. Sep 2012)

URLRewrite ist doch serverabhängig, oder?

In der Regel verwendet man vor einer Anwendung einen Apache, damit kannst Du das natürlich lösen.


----------



## nillehammer (4. Sep 2012)

Du willst, dass der Aufruf Deiner ActionBeans nicht mit ".action" sondern mit ".html" endet und es trotzdem funktioniert? Das machst Du in Deiner web.xml mit dem Element "servlet-mapping" Ganz grob so:
[XML]
<servlet-mapping>
  <servlet-name>
    NameDeinesServlets (siehe servlet-Elemente)
  </servlet-name>  
  <url-pattern>
     *.html
   </url-pattern>
</servlet-mapping> 
[/XML]
Könnte je nach Framework auch sein, dass es ein Filter und kein Servlet ist. Dann wäre es filter-mapping. Die Art und Weise des Mappings ist gleich. Du sollstest in Deiner web.xml sehen können, wie Requests auf die Klassen des Frameworks geleitet werden.


----------



## JimPanse (4. Sep 2012)

Sym hat gesagt.:


> URLRewrite ist doch serverabhängig, oder?
> 
> In der Regel verwendet man vor einer Anwendung einen Apache, damit kannst Du das natürlich lösen.



Nein, ein ServletFilter!

Wäre eine weitere Möglichkeit:
clean-and-usable-urls-in-stripes/


----------



## Sym (4. Sep 2012)

Ah danke, das ist interessant.


----------



## JimPanse (4. Sep 2012)

nillehammer hat gesagt.:


> Du willst, dass der Aufruf Deiner ActionBeans nicht mit ".action" sondern mit ".html" endet und es trotzdem funktioniert? Das machst Du in Deiner web.xml mit dem Element "servlet-mapping" Ganz grob so:
> [XML]
> <servlet-mapping>
> <servlet-name>
> ...



Das sollte nicht funktionieren weil der Stripes Dispatcher über das Pattern *.action die entsprechend ActionBean antriggert. (Namenskonvention)


----------



## MZ3291 (4. Sep 2012)

Auf diese Weise hatte ich es auch selber probiert .. einfach das url-pattern von *.action zu *.htm ändern.. daraufhin kam der Fehler, dass die ActionBean nicht mehr registriert ist.. 
Oder habe ich vllt vergessen das auch woanders zu ändern?

EDIT: Da hab ich mich vertan.. es kommt ein einfacher 404 dass die Resource .../Login.action nicht available ist.


----------



## JimPanse (4. Sep 2012)

Wie ich bereits geschrieben habe kannst du das pattern nicht einfach ändern!

Stripes mappt die Klassen drauf -> Namenskonvention:

MyClassActionBean <-- --> myclass.action


----------



## MZ3291 (4. Sep 2012)

Scheinbar schon .. sonst würde es von mir ja nicht verlangt werden ..


----------



## nillehammer (4. Sep 2012)

> Oder habe ich vllt vergessen das auch woanders zu ändern?
> 
> EDIT: Da hab ich mich vertan.. es kommt ein einfacher 404 dass die Resource .../Login.action nicht available ist.


Prinzipiell kannst du das Mapping in der web.xml schon ändern. Wenn Du *.html als url-pattern nimmst, muss die URL natürlich so aussehen 
	
	
	
	





```
/Login.html
```
, damit der Request auf die Login-Action geleitet wird. Problem ist jetzt, wenn intern auf URLs geforwardet wird oder Redirects an den Client gesendet werden. Wenn hier weiterhin das Namenschema ".action" benutzt wird, klappt das natürlich nicht mehr. Ist also vielleicht keint gangbarer Weg, weil zu aufwendig.

Dann bleibt Dir tatsächlich nichts anderes übrig, als durch einen externen Mechanismus (vorgeschalteter Apache oder Servlet-Filter) die Requests, die mit .html ankommen auf .action umzuschreiben und an Dein Framework zu senden.


----------



## JimPanse (4. Sep 2012)

Configuration Reference - Stripes - Stripes Framework

Mir war so das es in den älteren Versionen die Konvention *.action -> <Klasse>ActionBean gab aber nun gut dann wurde das eventuell in den neueren Version geändert. 

Damit musst du natürlich wie mein Vorgänger angedeutet hat die Action über das entsprechende pattern aufrufen.


----------



## MZ3291 (4. Sep 2012)

Ich glaube ich habe jetzt die Lösung ..

Der Trick ist beim StripesFilter für ActionResolver.Class als Parameter eine (unsere) firmeninterne lösung einzusetzen und dann muss/kann beim DispatcherServlet im Servlet-Mapping *.htm als url-pattern gesetzt werden.

So gesehen hast du vermutlich Recht Nillehammer, mit der Ergänzung dass der aufwand schon betrieben wurde ..

Vielen Dank trotzdem für die Tipps, die mich etwas schlauer gemacht haben !


----------

