Documentos de Académico
Documentos de Profesional
Documentos de Cultura
• Einleitung
– Warum Framework? Warum Java? Warum Struts2?
• Struktur von Webanwendungen
– HTTP-Requests, Browser, HTML, CSS, JavaScript
– Architektur (Model View Controller & MVC2)
• Struts2
– Vom Browser-Request HTML
– struts.xml, Actionklassen und JSPs
– Plugins, Interceptors und Best Practices
• Meta
– Wozu Webseiten? Unterschiede zu Desktopapps?
JavaScript, JS-Frameworks
CSS2.0, 3.0
HTML, HTML5
Verschiedene Browser
• Warum Java?
• kompilierter Code: schneller als PHP
• Syntax schöner als PHP
• Compiler: Typ-Sicher
• Debugging und …
• Autocompletion in IDE
• Open Source & Kostenlos
• Java bietet für alles Bibliotheken
• Warum Struts2?
• Erprobtes Framework
» Weiterentwicklung von Struts + WebWork
• Hohe Verbreitung große Community
• Viele Plugins weniger Code schreiben
• Abstraktion von Protokollen & Servlet-API
» Programmlogik == POJOs
» Controller == xml-Konfiguration
• (oder wahlweise Annotationen)
• Warum Struts2?
• Erprobtes Framework
» Weiterentwicklung von Struts + WebWork
• Hohe Verbreitung große Community
• Viele Plugins weniger Code schreiben
• Abstraktion von Protokollen & Servlet-API
» Programmlogik == POJOs
» Controller == xml-Konfiguration
• (oder wahlweise Annotationen)
• UseCases
• Alles mit ausreichend Komplexität
• (mehrere Seiten, Applikationslogik und
Datenbankzugriffe)
• Alles was „sicher“ sein muss
• Alles was „performant“ sein muss
• Kompliziert
• Daher nun einige
wichtige Basics
<html>
HTML = Struktur
<head>
CSS = Aussehen
<title>Eine Seite</title> JavaScript = Verhalten
<link rel='stylesheet' href="css/mein.css"
type="text/css" />
<script src='utils/jquery-1.4.2.min.js'></script>
<script type="text/javascript">
$(document).ready(function() {
alert('Hello User');
});</script>
</head><body>
<p class="red">Hi there!</p>
<img src="images/beispiel.jpg" />
</body>
</html>
<html>
<link rel='stylesheet' href="css/mein.css" type="text/css" />
<script src='utils/jquery-1.4.2.min.js'></script>
<html>
<head>
<title>Eine Seite</title>
<link rel='stylesheet' href="css/mein.css"
type="text/css" />
<script src='utils/jquery-1.4.2.min.js'></script>
<script type="text/javascript">
$(document).ready(function() {
alert('Hello User');
});</script>
</head><body>
<p class="red">Hi there!</p>
<img src="images/beispiel.jpg" />
</body>
</html>
.red {
font-family:Verdana;
font-size:30px;
color:#FF0000;
}
• Klassisches ModelViewController:
• Klassisches ModelViewController:
URLs
HTML Datenbank
Browser
Datenbank
und
HTML Serverlogik
Oliver Steele1 fragt: Wo ist die Trennung? Was ist mit JavaScript?
1 vgl. http://osteele.com
Ascora GmbH, http://www.ascora.de
Struktur von Webanwendungen
1 vgl. http://osteele.com
Ascora GmbH, http://www.ascora.de
Struktur von Webanwendungen
2 „Ein RDFa-Editor zur Einbettung semantischer Informationen in ein Weblog-System“ Tim Dellas, 2009
result
JSP
statisches result
RAM + DB
Serverlogik
(Javaklassen!)
Serverlogik
(Java)
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<struts>
<constant
name="struts.enable.DynamicMethodInvocation"
value="false" />
<constant name="struts.devMode" value=“true" />
…
</package>
</struts>
de.abelssoft.
loginpage.action Pages „success“
/pages/static.jsp
String loginp();
[HTML]
UserName: Tim
Password: 123456
Submit login.action
Serverlogik
(Java)
package de.abelssoft.updateyeti.Frontend.beispiel;
import com.opensymphony.xwork2.ActionSupport;
@SessionTarget
Session dbsession;
@TransactionTarget
Transaction dbtransaction;
Session dbsession;
Transaction dbtransaction;
Serverlogik
(Java)
de.abelssoft.
loginpage.action Pages „success“
/pages/static.jsp
String loginp();
[HTML]
UserName: Tim
Password: 123456
Submit login.action
Serverlogik
(Java)
<s:actionerror/>
<s:fielderror/>
</s:form>
</body>
</html>
<s:iterator value="users">
<tr><td><s:property value="username"/></td>
<td><s:property value="email"/></td>
<td><s:property value="realname"/></td>
<td><a href="doEditAccount.action?editid=<s:property
value="id"/>">Edit</a></td>
<td><s:if test="username!=u.username">
<a href="doDeleteAccount.action?deleteid=<s:property
value="id"/>">Delete</a></s:if></td></tr>
</s:iterator>
</table>
• Hibernate
– Struts2-fullhibernatecore-plugin-[version].jar hinzufügen
– hibernate.cfg.xml Datei im src Verzeichnis hinzufügen
– Die MySql-Connector.jar nicht vergessen!
– Nutzung wie in Code-Beispielen mit @SessionTarget und @TransactionTarget
– org.hibernate.Session benutzen. Muss nicht geöffnet / geschlossen werden
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/datenbankname?autoReconnect=true</property>
<property name="hibernate.connection.password">dbuserpassword</property>
<property name="hibernate.connection.username">dbusername</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver</property>
<property name="connection.pool_size">1</property>
<property name="hibernate.dialect"> org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="current_session_context_class">thread</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.connection.autoReconnectForPools">true</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<!– Alle mit @Entity bezeichneten DB-Klassen aufführen, z. B.-->
<mapping class="de.abelssoft.project.model.users.DbUser" />
• jQuery
– Struts2-jquery-plugin-[version].jar hinzufügen
– Bringt jsp-Tagbibliothek mit:
<%@taglib uri="/struts-jquery-tags" prefix="sj"%>
– Im <head> tag muss folgender Code stehen (der z. B. jQuery einbindet):
<sj:head jqueryui="true" loadFromGoogle="true" />
– Dann können <sj:…> tags genutzt werden, Beispiele auf
http://www.weinfreund.de/struts2-jquery-showcase/index.action
– Außerdem kann man in der jsp-Seite normalen jQuery code einsetzen:
var $search = $('#autocompleter');
$search.focus(function(){
if ($search.attr('value')=='Suchen...') {
$search.attr('value','');
}
}).blur(function(){
if (!this.value) {
this.value = 'Suchen...';
}
});
Serverlogik
(Java)
• Webangebote
• Webangebote
• Webangebote