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.
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.
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.
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.
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.
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!
Um den Vorgang zu überprüfen, werde ich eine Beispielanwendung implementieren. Richten Sie zuerst maven ein.
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)
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>
h: messages
ist der Bereich, in dem Nachrichten angezeigt werden.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>
Eine Meldung wurde angezeigt und der Bildschirmübergang war möglich. Es war einfacher als ich erwartet hatte! das ist alles.