2016-04-11 5 views
4

Ich möchte die URL für meine Struts2-basierte Anwendung (derzeit in der Entwicklungsumgebung) neu schreiben. Ich habe danach gesucht und über Tuckey URL Rewrite gefunden und in meinem Projekt eingerichtet. Jetzt möchte ich meine Login-URL, die derzeit http://localhost:8080/MyProject/loadLogin.action (ich verwende Wildcard-Mapping in Struts2), wie http://localhost:8080/login aussehen. Unten ist mein Konfigurationscode:Brauchen Sie Hilfe in URL Rewrite mit Tuckey URL Rewrite in Struts2

struts.xml:

<action name="*Login" method="{1}" class="com.myproject.controller.LoginController"> 
      <result name="login" type="tiles">mylogin</result> 
     </action> 

web.xml:

<filter> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
     <init-param> 
       <param-name>logLevel</param-name> 
       <param-value>DEBUG</param-value> 
      </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

    <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> 

Jetzt ist hier die urlrewrite.xml, die die Regel hat, und ich weiß nicht, ob ich habe die Regel korrekt konfiguriert:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" 
     "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd"> 

<!-- 

    Configuration file for UrlRewriteFilter 
    http://www.tuckey.org/urlrewrite/ 

--> 
<urlrewrite> 

     <rule> 
      <from>^/*</from> 
      <to type="redirect">/login</to> 
     </rule> 


</urlrewrite> 
+0

Warum wollen Sie UrlRewrite benutzen? Um '/ MyProject' zu entfernen? -> Stellen Sie Ihre App einfach auf root. Um 'loadLogin.action' zu ändern? -> Benenne einfach deine Aktion um. –

+0

@AleksandrM Über Ihren zweiten Vorschlag der Umbenennung der Aktion verwende ich Wildcard-Mapping wo Load() ist die Methode in meinem LoginController, die die Login-Seite anzeigt, so wie kann ich es umbenennen, um das gleiche Ergebnis zu erhalten. Danke für Ihre Antwort. –

+0

Warum Wildcard? Was sonst noch meldest du dem Login-Controller? Erstellen Sie eine Aktion ohne Platzhalter. –

Antwort

2

Um diese URL umzuschreiben http://localhost:8080/login müssen Sie den urlrewrite-Filter im root-Kontext bereitstellen. Aber die Anwendung läuft unter dem /MyProject Kontext. Sie können nicht beide Filter in derselben Anwendung im selben Kontext bereitstellen, um die gewünschten Funktionen auszuführen.

So funktioniert die Umschreibungs-URL: Zuerst greifen Sie auf die URL zu, die angezeigt werden soll. Anschließend sucht urlrewrite nach den Regeln. Wenn die Regel gefunden wird, wird die Anfrage (standardmäßig) an die neue URL weitergeleitet für den Benutzer versteckt.

Wenn Sie type="redirect" im <to> Tag die neue URL wird angezeigt, weil es bedeutet,

Anfragen die „Bedingungen“ Anpassung und die „aus“ für diese Regel wird HTTP umgeleitet werden. Dies ist das gleiche ein Tuns: HttpServletResponse.sendRedirect([to value]))

URL zu umschreiben Sie diese Regel an der Wurzel Kontext der Anwendung bereitgestellt verwenden sollten

<rule> 
    <from>^/login$</from> 
    <to type="redirect">/MyProject/loadLogin.action</to> 
</rule>