RewriteRules und JSF / JAVA EE

Hallo,

bei meiner alten Seite in PHP hatte ich Rewrite Rules eingerichtet um z.B. folgendes zu realisieren. www.domain.de/Rezeptname anschließend wurde die passende Rezeptseite aufgerufen. Nun wüsste ich gerne wie ich das mit JSF mache. Könnt ihr mir da Tipps geben?

Ich löse das mit der Bibliothek Prettyfaces, die ist sehr mächtig und hervorragend dokumentiert!

Das sieht gut aus! Hast du vlt. noch eine passende Bibliothek um geschützte Seiten zu realisieren? Also, dass z.B. registrierte Benutzer auf die Rezeptverwaltung kommen und unregistrierte nicht. Oder kann man das gleich auch mit Prettyfaces lösen?

Hi,

Security ist in JSF schon enthalten, das kannst du in der web.xml lösen: https://blogs.oracle.com/enterprisetechtips/entry/improving_jsf_security_configuration_with

Danke dir, in meinem Netbeans Java EE Projekt gibt es keine pom.xml. Wie geht man dann vor? (Damit ich die Dependencies vom PrettyFaces eintragen kann.)

Ich vermute die braucht man nur mit einem Apache Server / Maven. Ich verwende hier aber den GlassFish Server.

Hi,

die pom.xml ist ein Bestandteil von https://maven.apache.org/. Das könnte man als eine Art Projektmanagement-Tool bezeichnen, mit dem du Build-Steps und Abhängigkeiten verwalten kannst.
Du kannst aber auch ganz einfach hier das ZIP-File mit den Bibliotheken herunterladen: http://repo1.maven.org/maven2/org/ocpsoft/rewrite/rewrite-distribution/2.0.8.Final/

Ich habe die rewrite-servlet-2.0.8.Final-sources.jar zu den Libaries im Netbeans Projekt hinzugefügt und erhalte im Glassfish server trotzdem noch diese Fehlermeldung.

WARNING: Unable to load class org.ocpsoft.rewrite.faces.util.NullComponent, reason: java.lang.ClassNotFoundException: org.ocpsoft.rewrite.faces.util.NullComponent
WARNING: Unable to load class com.ocpsoft.pretty.faces.component.UrlBuffer, reason: java.lang.ClassNotFoundException: com.ocpsoft.pretty.faces.component.UrlBuffer
WARNING: Unable to load class com.ocpsoft.pretty.faces.util.NullComponent, reason: java.lang.ClassNotFoundException: com.ocpsoft.pretty.faces.util.NullComponent
WARNING: Unable to load class com.ocpsoft.pretty.faces.component.Link, reason: java.lang.ClassNotFoundException: com.ocpsoft.pretty.faces.component.Link
WARNING: Unable to load class com.ocpsoft.pretty.faces.component.renderer.LinkRenderer, reason: java.lang.ClassNotFoundException: com.ocpsoft.pretty.faces.component.renderer.LinkRenderer
WARNING: Unable to load class com.ocpsoft.pretty.faces.component.renderer.UrlBufferRenderer, reason: java.lang.ClassNotFoundException: com.ocpsoft.pretty.faces.component.renderer.UrlBufferRenderer
INFO: Initializing Mojarra 2.2.0 ( 20130502-2118 https://svn.java.net/svn/mojarra~svn/tags/2.2.0@11930) for context ‚/wie-koche-ich‘
WARNING: WELD-001529 An InjectionTarget implementation is created for a class org.primefaces.context.PrimePartialViewContextFactory which does not have any appropriate constructor.
INFO: Monitoring jndi:/server/wie-koche-ich/WEB-INF/faces-config.xml for modifications
INFO: Running on PrimeFaces 3.5
FINEST: Begin predeploying Persistence Unit wie-koche-ichPU; session file:/home/martin/NetBeansProjects/wie-koche-ich/build/web/WEB-INF/classes/_wie-koche-ichPU; state Deployed; factoryCount 1
FINEST: End predeploying Persistence Unit wie-koche-ichPU; session file:/home/martin/NetBeansProjects/wie-koche-ich/build/web/WEB-INF/classes/_wie-koche-ichPU; state Deployed; factoryCount 2
FINEST: Begin deploying Persistence Unit wie-koche-ichPU; session file:/home/martin/NetBeansProjects/wie-koche-ich/build/web/WEB-INF/classes/_wie-koche-ichPU; state Deployed; factoryCount 2
FINEST: End deploying Persistence Unit wie-koche-ichPU; session file:/home/martin/NetBeansProjects/wie-koche-ich/build/web/WEB-INF/classes/_wie-koche-ichPU; state Deployed; factoryCount 2
INFO: RewriteFilter starting up…
INFO: Loaded [2] org.ocpsoft.rewrite.servlet.spi.RewriteLifecycleListener [org.ocpsoft.rewrite.servlet.impl.DefaultRewriteLifecycleListener<2147483647>, org.ocpsoft.rewrite.servlet.config.lifecycle.JoinRewriteLifecycleListener<2147483647>]
INFO: Loaded [1] org.ocpsoft.rewrite.servlet.spi.RequestCycleWrapper [org.ocpsoft.rewrite.servlet.impl.HttpRewriteRequestCycleWrapper<0>]
INFO: Loaded [1] org.ocpsoft.rewrite.spi.RewriteProvider [org.ocpsoft.rewrite.servlet.impl.DefaultHttpRewriteProvider<0>]
INFO: Loaded [1] org.ocpsoft.rewrite.spi.RewriteResultHandler [org.ocpsoft.rewrite.servlet.impl.HttpRewriteResultHandler<0>]
INFO: Loaded [1] org.ocpsoft.rewrite.servlet.spi.InboundRewriteProducer [org.ocpsoft.rewrite.servlet.impl.HttpInboundRewriteProducer<0>]
INFO: Loaded [1] org.ocpsoft.rewrite.servlet.spi.OutboundRewriteProducer [org.ocpsoft.rewrite.servlet.impl.HttpOutboundRewriteProducer<0>]
INFO: Loaded [0] org.ocpsoft.rewrite.servlet.spi.ContextListener
INFO: Loaded [0] org.ocpsoft.rewrite.servlet.spi.RequestListener
INFO: Loaded [0] org.ocpsoft.rewrite.servlet.spi.RequestParameterProvider
INFO: Loaded [0] org.ocpsoft.rewrite.el.spi.ExpressionLanguageProvider
INFO: Loaded [0] org.ocpsoft.rewrite.spi.InvocationResultHandler
INFO: Loaded [0] org.ocpsoft.common.spi.ServiceEnricher
INFO: Loaded [1] org.ocpsoft.rewrite.spi.ConfigurationCacheProvider [org.ocpsoft.rewrite.servlet.impl.ServletContextConfigurationCacheProvider<0>]
INFO: Loaded [1] org.ocpsoft.rewrite.config.ConfigurationProvider [org.ocpsoft.rewrite.annotation.config.AnnotationConfigProvider<100>]
INFO: Loaded [0] org.ocpsoft.rewrite.spi.RuleCacheProvider
INFO: Rewrite 2.0.8.Final initialized.
INFO: Loading application [wie-koche-ich] at [/wie-koche-ich]
INFO: Loaded [1] org.ocpsoft.rewrite.spi.GlobalParameterProvider [org.ocpsoft.rewrite.instance.WildcardParameterProvider<0>]

Aber er schreibt dann nacher selber, dass er die Rewrite initialisiert hat. Kan ich die erste Exception ignorieren? Jedenfalls habe ich in meiner erstellten pretty-config.xml im WEB-INF Ordner folgenden Inhalt:

<pretty-config xmlns="http://ocpsoft.org/schema/rewrite-config-prettyfaces" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xsi:schemaLocation="http://ocpsoft.org/schema/rewrite-config-prettyfaces
                      http://ocpsoft.org/xml/ns/prettyfaces/rewrite-config-prettyfaces.xsd">
    
    <url-mapping id="viewRecipe"> 
        <pattern value="#{ recipe }/" />
        <view-id value="/faces/viewRecipe.jsf" />
    </url-mapping>


</pretty-config>

und in der web.xml ist :

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 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_3_0.xsd">

    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    
    <context-param>
        <param-name>com.ocpsoft.pretty.BASE_PACKAGES</param-name>
        <param-value>com.example.myapp,com.ocpsoft</param-value>
    </context-param>
    
    <context-param>
        <param-name>com.ocpsoft.pretty.DEVELOPMENT</param-name>
        <param-value>true</param-value>
    </context-param>
    
    <!-- JSF mapping -->
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- Map these files with JSF -->
    <servlet>
        <servlet-name>ControllerServlet</servlet-name>
        <servlet-class>Get.Controller.ControllerServlet</servlet-class>
    </servlet>

    <!-- Welcome page -->
    <welcome-file-list>
        <welcome-file>faces/Spaetzle</welcome-file>
    </welcome-file-list>
    <servlet-mapping>
        <servlet-name>ControllerServlet</servlet-name>
        <url-pattern>/ControllerServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

Laut Dokumentation sollte es eigentlich funktionieren. Aber er leitet mich immer auf eine 404 Seite. Es scheint als würde die erstellte RewriteRule nicht zum zug kommen.

Hi,

ich bin mir nicht sicher, ob du das richtige JAR verwendest: Guck mal hier: http://repo1.maven.org/maven2/com/ocpsoft/prettyfaces-jsf2/3.3.3/

Vielleicht hilft es dir ja, wenn ich Auszüge aus meinem Setup hier poste:

Eingebundene Bibliothek: prettyfaces-jsf2-3.3.3.jar

In der web.xml habe ich nichts eingetragen, ein Servlet 3.0 kompatibler Container kann das Servlet automatisch registrieren. Kommt darauf an, welchen Application-Server du benutzt.

Auszug aus meiner pretty-config.xml:
[XML]


#{lkwDetailController.refreshCurrent()}
[/XML]

Gruß,
Tim

Edit: Bist du sicher, dass dein Value in der pretty-config so funktionieren kann? Probier mal value="/#{recipe}/"

Hallo,

danke für deine hilfe. Anscheinend hatte ich mein Servlet nicht richtig im web.xml definiert. Und meine filterName Propertie hat nur “” zurückgegeben weshalb die RewriteRule auch nicht richtig funktioniert hat.