[JAVA] gerührt! JSF + CDI (Einstellungen) mit Tomcat

Einführung

Ich möchte EE einfacher implementieren! Ich möchte es versuchen! Daher möchte ich JSF + CDI auf Tomcat ausführen. JSF und CDI funktionieren normalerweise nicht mit Tomcat, aber Tomcat 9 scheint CDI zu unterstützen, also werde ich es versuchen.

Die Beispielanwendung für die Betriebsprüfung erstellt einen Anmeldebildschirm und einen oberen Bildschirm, der bei Erfolg übergeht. Ungefähr so. サンプルアプリ Die Umgebung ist wie folgt.

Was Sie vor der Implementierung tun müssen

Um CDI zu verwenden, "Apache OpenWebBeans" Um JSF verwenden zu können, benötigen Sie "Apache My Faces".

Befolgen Sie die nachstehenden Anweisungen, um die Umgebung festzulegen.

  1. Laden Sie die Apache OpenWebBeans-Zip-Datei herunter und entpacken Sie sie
  2. Laden Sie die Zache von Apache MyFaces herunter (nicht entpacken)
  3. Führen Sie die Shell in dem Ordner aus, der in 1 entpackt wurde.
  4. Web.xml-Einstellungen

1. Laden Sie Apache OpenWebBeans herunter

Download von der Apache OpenWebBeans-Seite (https://openwebbeans.apache.org/download.html). Dieses Mal habe ich openwebbeans-Distribution-2.0.18-binary.zip heruntergeladen. Entpacken Sie es nach dem Herunterladen.

2. Laden Sie Apache MyFaces herunter

Download von der Apache MyFaces-Seite (http://myfaces.apache.org/#/core23next). Dieses Mal habe ich "myfaces-core-Assembly-2.3-next-M4-bin.zip" heruntergeladen. Dieser Reißverschluss muss nicht dekomprimiert werden. Ich werde es so verwenden, wie es ist.

3. Shell ausführen

In dem Ordner, in dem Sie OpenWebBeans entpackt haben, befindet sich install_owb_tomcat7_myfaces.sh. Führen Sie es also aus. Die Argumente sind die heruntergeladene ZIP-Datei von myfaces und der Tomcat-Pfad.

./install_owb_tomcat7_myfaces.sh /Download-Pfad/myface-core-assembly-2.3-next-M4-bin.zip to mcat path

Bei der Ausführung wird die erforderliche JAR-Datei nach "tomcat / lib" kopiert und der Listener zur Datei context.xml hinzugefügt.

4. Web.xml-Einstellungen

Stellen Sie Listener so ein, dass CDI und JSF aktiviert werden. Stellen Sie es und Servlet-Mapping ein.

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>

Sie sind jetzt bereit. CDI / JSF sollte jetzt auf Tomcat funktionieren!

Implementierung

Um den Vorgang zu überprüfen, werde ich eine Beispielanwendung implementieren. Richten Sie zuerst maven ein.

Maven-Einstellungen

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>

Hinzufügen mit CDI- und JSF-Kompilierung. Da es sich zum Zeitpunkt des Betriebs in tomcat / lib befindet Du brauchst nicht. Ich habe auch Lombok eingeführt. (Dies ist nicht erforderlich)

Bildschirm erstellen

In JSF werden ein Bildschirm (xhtml) und eine dem Bildschirm entsprechende Backing Bean erstellt. Erstellen Sie zunächst einen Bildschirm. Ignorieren Sie das Design und implementieren Sie es präzise.

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>JSF-Beispiel</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="Einloggen" update="@form" />
    </h:form>
</body>
</html>

Als nächstes kommt 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, "Authentifizierungsfehler", "");
            context.addMessage(null, message);
            return null;
        }
    }
}

(1) Verwenden Sie die Annotation Named, um sie so festzulegen, dass sie aus dem EL-Ausdruck in index.xhtml ersichtlich ist. (2) Definieren Sie die Attribute gemäß den Elementen auf dem Bildschirm. (3) Wenn sowohl in der Login-ID als auch im Passwort etwas eingegeben wird, ändert sich der Bildschirm. ④ In anderen Fällen wird die Meldung auf dem Selbstbildschirm angezeigt.

Als nächstes wird der obere Bildschirm des Übergangsziels angezeigt.

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>JSF-Beispiel</title>
</h:head>

<body>
	<h:form id="form">
		<div>TOP-Bildschirm</div>
	</h:form>
</body>
</html>

Komplett

Eine Meldung wurde angezeigt und der Bildschirmübergang war möglich. Es war einfacher als ich erwartet hatte! das ist alles.

Referenz

Apache OpenWebBeans

Recommended Posts

gerührt! JSF + CDI (Einstellungen) mit Tomcat
gerührt! JSF + CDI in der Tomcat- und Bean-Validierung
JSP auf Tomcat
Tomcat v8 unter CentOS7
1002 Fehler bei Tomcat + WebSocket
Installieren Sie Tomcat auf Sakuras VPS
Installieren Sie Tomcat + Eclipse auf einem Mac