JavaServer Faces

di il
4 risposte

JavaServer Faces

Stavo seguendo questa guida ( http://www.html.it/articoli/introduzione-a-jsf-1 ) per iniziare a capire qualcosa di JSF ma ho un problema con la prima applicazione.
L'applicazione dell'esempio dovrebbe permettere di inserire attraverso un form il nome dell'utente e successivamente di visualizzare un messaggio di benvenuto però qualcosa non va.
La struttura del progetto è questa:

host immagini


Questi sono i vari file:
faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" 
	      xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xi="http://www.w3.org/2001/XInclude"
              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-facesconfig_1_2.xsd">
  
  <navigation-rule>
      <from-view-id>/index.jsp</from-view-id>
      <navigation-case>
         <from-outcome>benvenuto</from-outcome>
         <to-view-id>/welcome.jsp</to-view-id>
      </navigation-case>
      <navigation-case>
         <from-outcome>uscita</from-outcome>
         <to-view-id>/exit.jsp</to-view-id>
      </navigation-case>
  </navigation-rule>
  
  <managed-bean>
      <managed-bean-name>utente</managed-bean-name>
      <managed-bean-class>IT.html.jsf.bean.UtenteBean</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>
</faces-config> 
UtenteBean.java

package IT.html.jsf.bean;

public class UtenteBean {
  private String nome;
  
  public String getNome() { 
       return nome; 
  }
  
  public void setNome(String nome) { 
       this.nome = nome; 
  }
} 
web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <context-param>
     <param-name>javax.faces.CONFIG_FILES</param-name>
     <param-value>/WEB-INF/faces-config.xml</param-value>
  </context-param>
  
  <servlet>
     <servlet-name>FacesServlet</servlet-name>
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
     <servlet-name>FacesServlet</servlet-name>
     <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
     <welcome-file>/faces/index.jsp</welcome-file>
  </welcome-file-list>
</web-app> 
index.jsp

<%@ taglib uri="http://java.sun.com/jsf/html" 
           prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" 
           prefix="f" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <title>..:: JSF Esempio::..</title>
  </head>
  <body>
    <f:view>
      <h:form>
        <h:outputText value="Inserisci il tuo nome per accedere" />
        <h:inputText value="#{utente.nome}" />
        <h:commandButton value="Accedi" action="benvenuto" />
        <h:commandButton value="Esci" action="uscita" />
      </h:form>
    </f:view>
  </body>
</html> 
welcome.jsp

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>..:: JSF Esempio::..</title>
  </head>
  <body>
    <f:view>
      <h:outputText value="Benvenuto" />
      <h:outputText value="#{utente.nome}" />
    </f:view>
  </body>
</html>

Una volta avviato GlassFish, deployata la web application e avviato il file "index.jsp" questo è l'errore che viene generato:
http://s23.postimg.org/xva6e6ovf/Immagine1.jp

Io pensavo che potesse dipendere dagli uri presenti in "index.jsp" associati alle taglibrary ma non ne ho la certezza.

4 Risposte

  • Re: JavaServer Faces

    newutente ha scritto:


    Stavo seguendo questa guida ( http://www.html.it/articoli/introduzione-a-jsf-1 ) per iniziare a capire qualcosa di JSF
    Scusa ma dovresti ancora comprendere veramente bene Servlet/JSP (e magari filter e custom tag) .... e già passi a JSF?
  • Re: JavaServer Faces

    Effettivamente può sembrare azzardato però volevo cercare di farmi un'infarinatura di alcune tecnologie per poi ritornare a approfondire con i dubbi già chiariti.
  • Re: JavaServer Faces

    Ho un dubbio relativo alla modalità di accesso sicuro delle componenti web. Faccio l'esempio della pagina JSF perchè in questo modo evito di aprire un'altra discussione, tanto la procedura è la stessa anche per le altre componenti (es. servlet, JSP, websocket, ecc.).

    Per prima cosa ogni componente web ha un suo file "web.xml" dove all'interno è possibile definire dei tag per la sicurezza e parliamo di <security-role>, <security-constraint> e <login-config>.
    <security-role> permette di definire i ruoli cioè le tipologie di utenti che avranno il permesso di accedere all'applicazione.
    <security-constraint> permette di definire quali parti dell'applicazione saranno soggette ai controlli di sicurezza, quali tipi di richieste (es. metodo doGet(), doPost(), ecc.) e quali utenti avranno accesso a queste parti.
    <login-config> permette di indicare la modalità di accesso (es. tramite form) e le pagine da visualizzare per il login o eventuali errori.

    Una volta che apro la mia pagina JSF (o JSP, o servlet o altro) se la pagina rientra tra quelle definite nel file "web.xml" (nel sottotag "url-pattern") mi sarà restituita la pagina di login definita nel file "web.xml" (nel sottotag "form-login-page") che mi permettà di effettuare il login.
    Diciamo che questa pagina conterrà un form con un bottone "submit" che si occuperà di effettuare una richiesta di tipo POST al server per verificare la correttezza di username e password.
    Il dubbio che ho adesso riguarda proprio questa richiesta. Come fa il server a verificare la correttezza dei dati inseriti? Cioè, in quale componente avviene il controllo delle credenziali di accesso?
    Faccio questa domanda perchè il resto del funzionamento della sicurezza mi è abbastanza chiaro, quindi ad esempio l'utilizzo di un bean per ottenere alcune informazioni importanti sull'utente loggato tramite il metodo getUserPrincipal(), ma non ho ben capito come si arriva al login effettuato con successo.
    Scusate se la domanda è stupida ma voglio capire bene.
  • Re: JavaServer Faces

    newutente ha scritto:


    ome fa il server a verificare la correttezza dei dati inseriti? Cioè, in quale componente avviene il controllo delle credenziali di accesso?
    Se usi la security "dichiarativa" definita nel web.xml (quindi <login-config> ecc..) la autenticazione la fa il container (che sia servlet-container es. Tomcat o application-server completo es. GlassFish). La "base dati" per utenti e ruoli è quindi gestita e configurata dal container .. non dall'applicazione.
Devi accedere o registrarti per scrivere nel forum
4 risposte