Videoautomat Web
Aus Salespoint
(comment3, http://venfuvele.chez.com/site-279.html òðîëëü ñëèÿíèå è ïîãëîùåíèå ñêà÷àòü, =-O, http://itneuducgio.szm.com/page-36.html ñêà÷àòü ïðåçåíòàöèþ ïðàâèëà áåçîïàñòíîñòè äëÿ) |
(Änderung 809 von 91.214.45.63 (Diskussion) wurde rückgängig gemacht.) |
||
Zeile 1: | Zeile 1: | ||
- | + | =Einleitung= | |
+ | Frameworks erleichtern die Programmierarbeit in vielerlei Hinsicht. Sie können Datenstrukturen und Prozesse eines bestimmten Anwendungsgebietes vordefinieren und darüber hinaus einen sauberen Entwurf erzwingen. Dennoch bedeutet ihre Verwendung zunächst einen erhöhten Einarbeitungsaufwand für den Programmierer. Um diesen zu minimieren wurde die folgende Abhandlung geschrieben. Grundlage für das Verständnis dieses Tutorials ist der Technische Überblick über das Framework SalesPoint. Wer diesen bisher noch nicht gelesen hat, wird gebeten diese Abkürzung zu nehmen. | ||
+ | |||
+ | Des weiteren sehr hilfreich zu Installation der Entwicklungsumgebung ist dieser [http://www.youtube.com/watch?v=JNCIa4uhxq0 ScreenCast]. | ||
+ | |||
+ | ==Spring Basics== | ||
+ | Zusätzlich kommt als Webframework Spring zum Einsatz. Dieses Framework stellt eine MVC-Implementierung bereit, die Anfragen an den Webserver annimmt, an den richtigen Controller (das Salespoint-Web-Äquivalent zum ''Salespoint'') weiterleitet, der auf dem Model (Catalogs, Stocks, Users) arbeitet und bestimmt welche View (JSP-Datei) als Antwort zum Browser zurückgesendet wird. | ||
+ | Spring ist ein sehr umfangreiches Framework und hat viele weitere Einsatzgebiete als nur Webapplikationen. Es wird kein allumfassendes Verständnis darüber verlangt, bei auftretenden MVC-Problemen sowie Fragen zur Erweiterung hier angeführter Möglichkeiten sei die [http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ Spring-Dokumentation der Version 3] allerdings '''erste Anlaufstelle'''. Im Folgenden wird ein ganz grober MVC-Überblick von Spring geliefert. Es bestehen '''sehr viele''' andere Konfigurationsmöglichkeiten. Wir verwenden eine annotationsbasierte Konfiguration, die in der salespoint-2010-blankweb.war hinterlegt ist und als Ausgangsbasis für eine neues Projekt benutzt werden kann. | ||
+ | |||
+ | ===Servlet Engine Konfiguration=== | ||
+ | In Javabasierten Webprojekten ist eine gewisse Verzeichnisstruktur vorgegeben. Wichtig hierbei ist, dass die Datei ''WebContent/WEB-INF/web.xml'' existiert, welche die grundlegende Konfiguration der Webapplikation darstellt. Neben dem Namen und einer Beschreibung der Applikation wird anhand von URL-Pattern festgelegt, welche Anfragen auf welche Servlets (Javaklassen, die ein gewisses Interface Implementieren) abgebildet werden. Da dies nur wenig Abstraktionsmöglichkeiten zulässt, definieren wir neben einem ''default''-Servlet, das nur statische Dateien wie Bilder, CSS-Dateien, etc. ausliefert, nur einen großen FrontController, der alle Anfragen annimmt und delegieren somit das Abbildungsproblem an diesen. Im Falle von Spring ist dies der ''DisplatchServlet''. | ||
+ | |||
+ | '''WebContent/WEB-INF/web.xml''' | ||
+ | <code xml> | ||
+ | <?xml version="1.0" encoding="UTF-8"?> | ||
+ | <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xmlns="http://java.sun.com/xml/ns/javaee" | ||
+ | xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" | ||
+ | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> | ||
+ | |||
+ | <!--Basicsettings--> | ||
+ | <display-name>sp2010_videoautomat_web</display-name> | ||
+ | <description>SalesPoint2010-BlankWebapplication</description> | ||
+ | |||
+ | <!--Mapping of static resources--> | ||
+ | <servlet-mapping> | ||
+ | <servlet-name>default</servlet-name> | ||
+ | <url-pattern>/static/*</url-pattern> | ||
+ | </servlet-mapping> | ||
+ | |||
+ | <!--DispatcherConfig--> | ||
+ | <servlet> | ||
+ | <description>Spring MVC Dispatcher Servlet</description> | ||
+ | <servlet-name>dispatch</servlet-name> | ||
+ | <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> | ||
+ | <load-on-startup>2</load-on-startup> | ||
+ | </servlet> | ||
+ | <servlet-mapping> | ||
+ | <servlet-name>dispatch</servlet-name> | ||
+ | <url-pattern>/</url-pattern> | ||
+ | </servlet-mapping> | ||
+ | |||
+ | </web-app> | ||
+ | </code> | ||
+ | |||
+ | Als Servlet Engine/Container wird Tomcat in der Version 6.x empfohlen. | ||
+ | |||
+ | ===Spring Konfiguration=== | ||
+ | [[Datei:spring_mvc.png]] | ||
+ | |||
+ | Die Grafik stammt aus der Spring Dokumentation und zeigt Spring's MVC-Prinzip. Der Frontcontroller entspricht, wie oben erwähnt, dem DispatchServlet. Dieser wird in der ''WebContent/WEB-INF/dispatch-servlet.xml'' näher konfiguriert. | ||
+ | |||
+ | Bevor darauf näher eingegangen werden kann, gilt es Spring's ''Dependency Injection'' zu verstehen. Die Idee dabei ist, Teile der Application möglichst lose miteinander zu koppeln - gemeinsame Abhängigkeiten nicht zwischeneinander ständig hinundherzureichen, sondern von außen zu ''injizieren''. Man lässt somit Spring XML-konfiguriert Instanzen von Klassen erzeugen und jeweils untereinander injizieren. | ||
+ | |||
+ | '''WebContent/WEB-INF/dispatch-servlet.xml''' | ||
+ | <code xml> | ||
+ | <?xml version="1.0" encoding="UTF-8"?> | ||
+ | <beans xmlns="http://www.springframework.org/schema/beans" | ||
+ | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xmlns:p="http://www.springframework.org/schema/p" | ||
+ | xmlns:mvc="http://www.springframework.org/schema/mvc" | ||
+ | xmlns:context="http://www.springframework.org/schema/context" | ||
+ | xsi:schemaLocation="http://www.springframework.org/schema/beans | ||
+ | http://www.springframework.org/schema/beans/spring-beans-3.0.xsd | ||
+ | http://www.springframework.org/schema/context | ||
+ | http://www.springframework.org/schema/context/spring-context-3.0.xsd | ||
+ | http://www.springframework.org/schema/mvc | ||
+ | http://www.springframework.org/schema/mvc/spring-mvc.xsd"> | ||
+ | |||
+ | <!-- messages for i18n --> | ||
+ | 1 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> | ||
+ | 1.1 <property name="basename" value="messages" /> | ||
+ | </bean> | ||
+ | |||
+ | <!-- use the interceptor-enabled annotation based handler mapping --> | ||
+ | 2 <bean class="org.salespointframework.web.spring.annotations.SalespointAnnotationHandlerMapping"> | ||
+ | <property name="messageSource" ref="messageSource" /> | ||
+ | </bean> | ||
+ | |||
+ | <!-- scan this package for annotated controllers --> | ||
+ | 3 <context:component-scan base-package="org.salespointframework.web.examples.videoautomat" /> | ||
+ | |||
+ | <!-- very standard viewresolver --> | ||
+ | 4 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> | ||
+ | <property name="prefix" value="/jsp/" /> | ||
+ | <property name="suffix" value=".jsp" /> | ||
+ | </bean> | ||
+ | |||
+ | </beans> | ||
+ | </code> | ||
+ | #Erzeugt eine Instanz der angegebenen Klasse welche später per definierter id referenzierbar ist. In diesem Fall wird eine MessageSource-Instanz erzeugt, die für die Internationalisierung verwendet wird. | ||
+ | ##Nach der Instanzierung wird per Setter das Attribut "basename" mit dem String "messages" gesetzt, was bedeutet dass im classpath die Datei messages.properties(sowie für weitere Sprachen z.b. messages_de.properties, messages_en.properties) erwartet wird, in der unter gewissen Codes die richtige Sprachversion des Textes abgelegt wird. | ||
+ | #Instanziiert ein Salespointspezifisches HandlerMapping, welches anhand von annotatierten Klassen ein URL-auf-Controller-Mapping bereitstellt. | ||
+ | ##injeziert die MessageSource-Instanz | ||
+ | #Gibt ein Package an, in dem nach annotierten Klassen gesucht werden soll. Dieser Tag kann mehrmals einsetzt werden um mehrere Packages durchsuchen zu lassen. | ||
+ | #Erzeugt ein ViewResolver, der vom Controller zurückgegebene ViewNames auf einen Pfad zur JSP abbildet, z.B "index" => "/jsp/index.jsp" | ||
+ | |||
+ | Zusammenfassend bedeutet diese Konfiguration, dass das Package ''org.salespointframework.web.spring'' nach annotierten Klassen durchsucht wird, die selbst per Annotation bestimmen, auf welche URLs sie reagieren, und Strings zurückgeben, die vom viewResolver auf den Pfad zur JSP-Datei gemappt wird. | ||
+ | |||
+ | comment5, http://lignvenicar.szm.com/page_462.html îðãàíèçàöèÿ êàê ôóíêöèÿ ìåíåäæìåíòà äàéòå ñêà÷àòü, =[[, http://lisynleguar.chez.com/page_441.html ñêà÷àòü áåñïëàòíî àëüáîìû ãðóïïû êàáðèîëåò, trtymc, http://keyposihan.chez.com/site-279.html ñêà÷àòü îïåðó íà êîìïüþòåð ÷åðåç òåëåôîí, wtb, http://knoljesmidis.szm.com/doc_432.html ïðîãðàììà ïî ïîäáîðó íàñîñà ñêà÷àòü, 92248, http://lignvenicar.szm.com/page_464.html ýðîòè÷åñêèå ìóëüòèêè áåëîñíåæêà ñêà÷àòü, =-[[[, http://lignvenicar.szm.com/page_232.html ñêà÷àòü ïåñíè âåðû êóøíèð, 2050, | ||
+ | |||
+ | comment5, http://lbizkinrekil.chez.com/site-197.html ãóô è àéçà-ïðèçíàíèå ñêà÷àòü áåñïëàòíî, rrencl, http://libtastvenli.szm.com/doc_107.html ðåôåðàò áèîëîãèÿ ïðèíöèïû êëàññèôèêàöèè âèäîâ ñêà÷àòü, qyaljp, http://lignvenicar.szm.com/page-398.html toxic áðèòíè ñêà÷àòü avi, frqvb, http://lisynleguar.chez.com/page-92.html ïóøêè îñòðîâà íàâàðîí ôèëüì ñêà÷àòü, cdwdex, http://knowantota.szm.com/site-115.html ïåñíÿ è ñàðóõàíîâà ñêà÷àòü, 039906, http://lechanrochess.chez.com/skachat-besplatno-inek-analitik.html ñêà÷àòü áåñïëàòíî èíýê-àíàëèòèê, 015, http://lobswelersver.chez.com/skachat-player-baby-come-back.html ñêà÷àòü player baby come back, 026818, | ||
+ | |||
+ | comment4, http://lassgacentro.chez.com/page-302.html ïóãà÷åâà ñêà÷àòü karaoke, dtyo, http://knoljesmidis.szm.com/skachat-otaku-vengeance---pokemonmp3.html ñêà÷àòü otaku vengeance - pokemon.mp3, %DD, http://lj2lcg.fromru.su/skachat-mp3-besplatno-stas-peha.html ñêà÷àòü mp3 áåñïëàòíî ñòàñ ïüåõà, 820, http://kortacara.szm.com/page-304.html ïðîãðàììà partitionmagic 8.02.ñêà÷àòü, 905002, http://knoljesmidis.szm.com/doc_455.html ñêà÷àòü áåñïëàòíî êëèï áàðâèõà, xnc, http://laehightechi.szm.com/skachat-traktor-3-rusifikator.html ñêà÷àòü traktor 3 ðóñèôèêàòîð, 869562, http://leinermamat.szm.com/page_473.html ñêà÷àòü áåñïëàòíî ðîññèéñêèå ìåëîäðàììû, >:), |
Version vom 19:51, 13. Okt. 2010
Inhaltsverzeichnis |
Einleitung
Frameworks erleichtern die Programmierarbeit in vielerlei Hinsicht. Sie können Datenstrukturen und Prozesse eines bestimmten Anwendungsgebietes vordefinieren und darüber hinaus einen sauberen Entwurf erzwingen. Dennoch bedeutet ihre Verwendung zunächst einen erhöhten Einarbeitungsaufwand für den Programmierer. Um diesen zu minimieren wurde die folgende Abhandlung geschrieben. Grundlage für das Verständnis dieses Tutorials ist der Technische Überblick über das Framework SalesPoint. Wer diesen bisher noch nicht gelesen hat, wird gebeten diese Abkürzung zu nehmen.
Des weiteren sehr hilfreich zu Installation der Entwicklungsumgebung ist dieser ScreenCast.
Spring Basics
Zusätzlich kommt als Webframework Spring zum Einsatz. Dieses Framework stellt eine MVC-Implementierung bereit, die Anfragen an den Webserver annimmt, an den richtigen Controller (das Salespoint-Web-Äquivalent zum Salespoint) weiterleitet, der auf dem Model (Catalogs, Stocks, Users) arbeitet und bestimmt welche View (JSP-Datei) als Antwort zum Browser zurückgesendet wird. Spring ist ein sehr umfangreiches Framework und hat viele weitere Einsatzgebiete als nur Webapplikationen. Es wird kein allumfassendes Verständnis darüber verlangt, bei auftretenden MVC-Problemen sowie Fragen zur Erweiterung hier angeführter Möglichkeiten sei die Spring-Dokumentation der Version 3 allerdings erste Anlaufstelle. Im Folgenden wird ein ganz grober MVC-Überblick von Spring geliefert. Es bestehen sehr viele andere Konfigurationsmöglichkeiten. Wir verwenden eine annotationsbasierte Konfiguration, die in der salespoint-2010-blankweb.war hinterlegt ist und als Ausgangsbasis für eine neues Projekt benutzt werden kann.
Servlet Engine Konfiguration
In Javabasierten Webprojekten ist eine gewisse Verzeichnisstruktur vorgegeben. Wichtig hierbei ist, dass die Datei WebContent/WEB-INF/web.xml existiert, welche die grundlegende Konfiguration der Webapplikation darstellt. Neben dem Namen und einer Beschreibung der Applikation wird anhand von URL-Pattern festgelegt, welche Anfragen auf welche Servlets (Javaklassen, die ein gewisses Interface Implementieren) abgebildet werden. Da dies nur wenig Abstraktionsmöglichkeiten zulässt, definieren wir neben einem default-Servlet, das nur statische Dateien wie Bilder, CSS-Dateien, etc. ausliefert, nur einen großen FrontController, der alle Anfragen annimmt und delegieren somit das Abbildungsproblem an diesen. Im Falle von Spring ist dies der DisplatchServlet.
WebContent/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<!--Basicsettings-->
<display-name>sp2010_videoautomat_web</display-name>
<description>SalesPoint2010-BlankWebapplication</description>
<!--Mapping of static resources-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
<!--DispatcherConfig-->
<servlet>
<description>Spring MVC Dispatcher Servlet</description>
<servlet-name>dispatch</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatch</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Als Servlet Engine/Container wird Tomcat in der Version 6.x empfohlen.
Spring Konfiguration
Die Grafik stammt aus der Spring Dokumentation und zeigt Spring's MVC-Prinzip. Der Frontcontroller entspricht, wie oben erwähnt, dem DispatchServlet. Dieser wird in der WebContent/WEB-INF/dispatch-servlet.xml näher konfiguriert.
Bevor darauf näher eingegangen werden kann, gilt es Spring's Dependency Injection zu verstehen. Die Idee dabei ist, Teile der Application möglichst lose miteinander zu koppeln - gemeinsame Abhängigkeiten nicht zwischeneinander ständig hinundherzureichen, sondern von außen zu injizieren. Man lässt somit Spring XML-konfiguriert Instanzen von Klassen erzeugen und jeweils untereinander injizieren.
WebContent/WEB-INF/dispatch-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- messages for i18n -->
1 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
1.1 <property name="basename" value="messages" />
</bean>
<!-- use the interceptor-enabled annotation based handler mapping -->
2 <bean class="org.salespointframework.web.spring.annotations.SalespointAnnotationHandlerMapping">
<property name="messageSource" ref="messageSource" />
</bean>
<!-- scan this package for annotated controllers -->
3 <context:component-scan base-package="org.salespointframework.web.examples.videoautomat" />
<!-- very standard viewresolver -->
4 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
- Erzeugt eine Instanz der angegebenen Klasse welche später per definierter id referenzierbar ist. In diesem Fall wird eine MessageSource-Instanz erzeugt, die für die Internationalisierung verwendet wird.
- Nach der Instanzierung wird per Setter das Attribut "basename" mit dem String "messages" gesetzt, was bedeutet dass im classpath die Datei messages.properties(sowie für weitere Sprachen z.b. messages_de.properties, messages_en.properties) erwartet wird, in der unter gewissen Codes die richtige Sprachversion des Textes abgelegt wird.
- Instanziiert ein Salespointspezifisches HandlerMapping, welches anhand von annotatierten Klassen ein URL-auf-Controller-Mapping bereitstellt.
- injeziert die MessageSource-Instanz
- Gibt ein Package an, in dem nach annotierten Klassen gesucht werden soll. Dieser Tag kann mehrmals einsetzt werden um mehrere Packages durchsuchen zu lassen.
- Erzeugt ein ViewResolver, der vom Controller zurückgegebene ViewNames auf einen Pfad zur JSP abbildet, z.B "index" => "/jsp/index.jsp"
Zusammenfassend bedeutet diese Konfiguration, dass das Package org.salespointframework.web.spring nach annotierten Klassen durchsucht wird, die selbst per Annotation bestimmen, auf welche URLs sie reagieren, und Strings zurückgeben, die vom viewResolver auf den Pfad zur JSP-Datei gemappt wird.
comment5, http://lignvenicar.szm.com/page_462.html îðãàíèçàöèÿ êàê ôóíêöèÿ ìåíåäæìåíòà äàéòå ñêà÷àòü, =[[, http://lisynleguar.chez.com/page_441.html ñêà÷àòü áåñïëàòíî àëüáîìû ãðóïïû êàáðèîëåò, trtymc, http://keyposihan.chez.com/site-279.html ñêà÷àòü îïåðó íà êîìïüþòåð ÷åðåç òåëåôîí, wtb, http://knoljesmidis.szm.com/doc_432.html ïðîãðàììà ïî ïîäáîðó íàñîñà ñêà÷àòü, 92248, http://lignvenicar.szm.com/page_464.html ýðîòè÷åñêèå ìóëüòèêè áåëîñíåæêà ñêà÷àòü, =-[[[, http://lignvenicar.szm.com/page_232.html ñêà÷àòü ïåñíè âåðû êóøíèð, 2050,
comment5, http://lbizkinrekil.chez.com/site-197.html ãóô è àéçà-ïðèçíàíèå ñêà÷àòü áåñïëàòíî, rrencl, http://libtastvenli.szm.com/doc_107.html ðåôåðàò áèîëîãèÿ ïðèíöèïû êëàññèôèêàöèè âèäîâ ñêà÷àòü, qyaljp, http://lignvenicar.szm.com/page-398.html toxic áðèòíè ñêà÷àòü avi, frqvb, http://lisynleguar.chez.com/page-92.html ïóøêè îñòðîâà íàâàðîí ôèëüì ñêà÷àòü, cdwdex, http://knowantota.szm.com/site-115.html ïåñíÿ è ñàðóõàíîâà ñêà÷àòü, 039906, http://lechanrochess.chez.com/skachat-besplatno-inek-analitik.html ñêà÷àòü áåñïëàòíî èíýê-àíàëèòèê, 015, http://lobswelersver.chez.com/skachat-player-baby-come-back.html ñêà÷àòü player baby come back, 026818,
comment4, http://lassgacentro.chez.com/page-302.html ïóãà÷åâà ñêà÷àòü karaoke, dtyo, http://knoljesmidis.szm.com/skachat-otaku-vengeance---pokemonmp3.html ñêà÷àòü otaku vengeance - pokemon.mp3, %DD, http://lj2lcg.fromru.su/skachat-mp3-besplatno-stas-peha.html ñêà÷àòü mp3 áåñïëàòíî ñòàñ ïüåõà, 820, http://kortacara.szm.com/page-304.html ïðîãðàììà partitionmagic 8.02.ñêà÷àòü, 905002, http://knoljesmidis.szm.com/doc_455.html ñêà÷àòü áåñïëàòíî êëèï áàðâèõà, xnc, http://laehightechi.szm.com/skachat-traktor-3-rusifikator.html ñêà÷àòü traktor 3 ðóñèôèêàòîð, 869562, http://leinermamat.szm.com/page_473.html ñêà÷àòü áåñïëàòíî ðîññèéñêèå ìåëîäðàììû, >:),