[JAVA] déplacé! JSF + CDI (Préférences) avec Tomcat

introduction

Je veux implémenter l'EE plus facilement! Je veux essayer! Donc, je voudrais exécuter JSF + CDI sur Tomcat. JSF et CDI ne fonctionnent généralement pas avec Tomcat, mais Tomcat 9 semble prendre en charge CDI, je vais donc essayer.

L'exemple d'application pour la vérification des opérations crée un écran de connexion et un écran supérieur qui transite en cas de succès. À peu près comme ça. サンプルアプリ L'environnement est le suivant.

Ce que vous devez faire avant la mise en œuvre

Pour utiliser CDI, Apache OpenWebBeans Pour utiliser JSF, vous avez besoin de Apache My Faces.

Suivez les étapes ci-dessous pour configurer l'environnement.

  1. Téléchargez et décompressez le zip Apache OpenWebBeans
  2. Téléchargez le zip Apache MyFaces (ne le décompressez pas)
  3. Exécutez le shell dans le dossier décompressé en 1.
  4. Paramètres Web.xml

1. Téléchargez Apache OpenWebBeans

Téléchargement depuis la page Apache OpenWebBeans (https://openwebbeans.apache.org/download.html). Cette fois, j'ai téléchargé openwebeans-distribution-2.0.18-binary.zip. Après le téléchargement, décompressez-le.

2. Téléchargez Apache MyFaces

Téléchargez depuis la page Apache MyFaces (http://myfaces.apache.org/#/core23next). Cette fois, j'ai téléchargé myfaces-core-assembly-2.3-next-M4-bin.zip. Ce zip n'a pas besoin d'être décompressé. Je vais l'utiliser tel quel.

3. Exécutez le shell

Il y a install_owb_tomcat7_myfaces.sh dans le dossier où vous avez décompressé OpenWebBeans, alors exécutez-le. Les arguments sont le fichier zip myfaces téléchargé et le chemin Tomcat.

./install_owb_tomcat7_myfaces.sh /Télécharger le chemin/myface-core-assembly-2.3-next-M4-bin.zip vers le chemin mcat

Une fois exécuté, le fichier jar requis sera copié dans tomcat / lib et l'écouteur sera ajouté à context.xml.

4. Paramètres Web.xml

Définissez Listener pour activer CDI et JSF. Définissez-le et mappage de servlet.

web.xml


<listener>
    <listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class>
</listener>
<listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

Vous êtes maintenant prêt. CDI / JSF devrait maintenant fonctionner sur Tomcat!

la mise en oeuvre

Pour vérifier l'opération, je vais implémenter un exemple d'application. Tout d'abord, configurez maven.

paramètres maven

pom.xml


<!-- Servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

<!-- JSF -->
<dependency>
    <groupId>org.apache.myfaces.core</groupId>
    <artifactId>myfaces-api</artifactId>
    <version>2.3-next-M4</version>
    <scope>provided</scope>
</dependency>

<!-- CDI -->    
<dependency>
    <groupId>javax.enterprise</groupId>
    <artifactId>cdi-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>

<!-- Lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

Ajouter fourni avec fourni pour la compilation CDI et JSF. Puisqu'il est dans tomcat / lib au moment de l'opération Tu n'as pas besoin. J'ai également présenté lombok. (Ce n'est pas obligatoire)

Créer un écran

Dans JSF, un écran (xhtml) et un Backing Bean correspondant à l'écran sont créés. Commencez par créer un écran. Ignorez la conception et implémentez-la de manière concise.

index.xhtml


<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" 
	xmlns:ui="http://java.sun.com/jsf/facelets" 
	xmlns:h="http://java.sun.com/jsf/html" 
	xmlns:ph="http://xmlns.jcp.org/jsf/passthrough"
	xmlns:f="http://java.sun.com/jsf/core">

<h:head>
    <title>Échantillon JSF</title>
</h:head>

<body>

    <h:messages escape="true" id="messages" showDetail="false" closable="true"/>
    <h:form id="form">
        <br/>
        <h:inputText value="#{index.loginId}" ph:placeholder="Username" /><br/>
        <h:inputSecret value="#{index.password}" ph:placeholder="Password" /><br/>
        <h:commandButton action="#{index.loginEvent()}" value="S'identifier" update="@form" />
    </h:form>
</body>
</html>

Ensuite, Backing Bean.

IndexBean.java


@Named("index")    //・ ・ ・ ①
@ViewScoped
@Getter
@Setter
public class IndexBean implements Serializable {

    private String loginId;        //・ ・ ・ ②
    private String password;

    public String loginEvent() {
        if (!loginId.isEmpty() && !password.isEmpty()) {
            return "top.xhtml?redirect=true";     //・ ・ ・ ③

        } else {
            //・ ・ ・ ④
            FacesContext context = FacesContext.getCurrentInstance();
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur d'authentification", "");
            context.addMessage(null, message);
            return null;
        }
    }
}

(1) Utilisez l'annotation Named pour la définir afin qu'elle puisse être vue à partir de l'expression EL dans index.xhtml. (2) Définissez les attributs en fonction des éléments à l'écran. (3) Si quelque chose est entré à la fois dans l'ID de connexion et le mot de passe, l'écran changera. ④ Dans d'autres cas, le message s'affiche sur l'écran personnel.

Vient ensuite l'écran supérieur de la destination de transition.

top.xhtml


<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" 
	xmlns:ui="http://java.sun.com/jsf/facelets" 
	xmlns:h="http://java.sun.com/jsf/html" 
	xmlns:ph="http://xmlns.jcp.org/jsf/passthrough"
	xmlns:f="http://java.sun.com/jsf/core">

<h:head>
	<title>Échantillon JSF</title>
</h:head>

<body>
	<h:form id="form">
		<div>Écran TOP</div>
	</h:form>
</body>
</html>

Achevée

Un message a été affiché et la transition d'écran était possible. C'était plus facile que ce à quoi je m'attendais! c'est tout.

référence

Apache OpenWebBeans

Recommended Posts

déplacé! JSF + CDI (Préférences) avec Tomcat
déplacé! JSF + CDI dans Tomcat et Validation Bean
JSP sur Tomcat
Tomcat v8 sur CentOS7
Erreur 1002 sur Tomcat + WebSocket
Installez Tomcat sur le VPS de Sakura
Installez Tomcat + eclipse sur Mac