76
Spring Web MVC

Spring Web MVC

  • Upload
    brygid

  • View
    34

  • Download
    1

Embed Size (px)

DESCRIPTION

Spring Web MVC. Ievads. Spring i r atklāta koda Java/J2EE aplikāciju ietvars Viens no interesantākiem komponentiem ir Spring Web MVC. Web aplik āciju uzdevumi. Svarīgie uzdevumi, kuri ir jāatrisina izstrādājot web aplikāciju : Stāvokļu pārvaldība (s tate management ) - PowerPoint PPT Presentation

Citation preview

Page 1: Spring Web MVC

Spring Web MVC

Page 2: Spring Web MVC

Ievads• Spring ir atklāta koda Java/J2EE aplikāciju ietvars

• Viens no interesantākiem komponentiem ir Spring Web MVC

Page 3: Spring Web MVC

Web aplikāciju uzdevumi• Svarīgie uzdevumi, kuri ir jāatrisina

izstrādājot web aplikāciju:• Stāvokļu pārvaldība (state management)• Darba plūsma (workflow)• Validācija

• Spring web ietvars ir uzprojektēts, lai palīdzet izstrādātājiem risināt šīs problēmas

Page 4: Spring Web MVC

Model-View-Controller Pattern• Model-View-Controller (MVC) ir arhitektūras

paraugs (aprakstīts 1979. gadā, Smalltalk valodā)

• Pamata mērķis: atdalīt datus (Model) no

lietotāja interfeisa (View)

• MVC atrisina

problēmu ieviešot

starpnieka komponenti - kontrolieri (Controller)

Page 5: Spring Web MVC

Model-View-Controller Pattern• Model - Represents enterprise data and the business rules.

• View - Renders the contents of a model. Accesses enterprise data through the model and specifies how that data should be presented.

• Controller - Translates interactions with the view (button clicks, menu selections) into actions to be performed by the model (activating processes, changing the state of the model).

Page 6: Spring Web MVC

Spring MVC• Spring MVC sastāv no vairākiem komponentiem,

starp kuriem notiek sadarbība apstrādājot klienta pieprasījumu

Page 7: Spring Web MVC

Pieprasījuma dzīves cikls (1)• Klients sūta pieprasījumu, kurš tiek nodots

DispatcherServlet komponentam

• Visi pieprasījumi vienmēr tiek nodoti vienam servletam,

kuru sauc par

priekšējo kontrolieri

(front controller)

Page 8: Spring Web MVC

Pieprasījuma dzīves cikls (2)• Komponents, kurš atbild par pieprasījuma apstrādi ir

Controller

• Lai nolemt kuram kontrolierim atdot

pieprasījumu, DispatcherController

izmanto

HandlerMapping

komponentus

• HandlerMapping:

URL piesaistīšana kontrolieriem

Page 9: Spring Web MVC

Pieprasījuma dzīves cikls (3-4)• Kad DispatcherServlet nolemj par kontroliera

objektu, tad parsūta tam pieprasījumu, lai kontrolieris izpilda biznesa loģiku

• Pēc darba pabeigšanas Controller atgriež ModelAndView objektu

• ModelAndView saturView objektu vaiskata loģisko vārdu

Page 10: Spring Web MVC

Pieprasījuma dzīves cikls (5)• Ja ModelAndView objekts satur skata loģisko

vārdu, tad DispatcherServlet izmanto ViewResolver komponenti

• ViewResolver

atrod atbilstošu

View objektu,

lai attēlot atbildi

klientam

Page 11: Spring Web MVC

Pieprasījuma dzīves cikls (6)• Visbeidzot, DispatcherServlet atdod pieprasījumu

tam View objektam, uz kuru norāda ModelAndView

• View objekts ir atbildīgs par pieprasījumaatbildes atgriešanu un parādīšanu klientam

Page 12: Spring Web MVC

Spring MVC Sequence Diagram

Page 13: Spring Web MVC

Front Controller• At the heart of Spring MVC is

DispatcherServlet, a servlet that functions as front controller

• A front controller is a common web-application pattern where a single servlet delegates responsibility for a request to other components of an application to perform the actual processing

Page 14: Spring Web MVC

DispatcherServlet config• Jākonfigurē web aplikācijas web.xml failā:

<servlet> <servlet-name>training</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup></servlet>

• Nākamais solis ir nodefinēt servlet mapping:

<servlet-mapping><servlet-name>training</servlet-name><url-pattern>*.htm</url-pattern>

</servlet-mapping>

Page 15: Spring Web MVC

DispatcherServlet context• WebApplicationContext tiek ielādēts no faila:

training-servlet.xml

kurš atrodas direktorijā WEB-INF (līdzīgi web.xml failam)

• Ir iespējams arī sadalīt

konfigurāciju starp

vairākiem failiem

Page 16: Spring Web MVC

Vienkāršas Web lapas izveidošana• Nepieciešamie soļi, lai izveidot web lapu ar

Spring MVC:

1. Uzrakstīt kontroliera klasi, kas izpildīs biznesa loģiku

2. Iekonfigurēt kontrolieri DispatcherServlet konteksta konfigurācijas failā (training-servlet.xml)

3. Iekonfigurēt view resolver, kurš piesaistīs kontrolieri pie JSP

4. Uzrakstīt JSP, kas attēlos lapu klientam

Page 17: Spring Web MVC

Kontroliera izveidošanapublic class HomeController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { return new ModelAndView("home", "message", greeting); }

private String greeting; public void setGreeting(String greeting) { this.greeting = greeting; }}

• Nodarbojas ar pieprasījuma apstrādāšanu• Pamata metodes signatūra ir līdzīga servleta service() metodei• Atgriež ModelAndView objektu

Page 18: Spring Web MVC

Kontroliera konfigurēšana• Kontrolieri ir jāieraksta DispatcherServlet

konteksta konfigurācijas failā:<bean name="/home.htm" class="com.springinaction.training.mvc.HomeController"><property name="greeting"> <value>Welcome to Spring Training!</value></property></bean>

• The default handler mapping is BeanNameUrlHandlerMapping, which uses the base name as the URL pattern

• When a request comes with a URL that ends with “/home.htm”, DispatcherServlet will dispatch the request to HomeController

Page 19: Spring Web MVC

View Resolver deklarēšana• View resolver darbs ir pēc skata loģiska vārda (kurš ir

atgriezts ModelAndView objektā) atrast pašu skatu

• Viens no variantiem ir izmantot skata vārdu kā JSP faila vārdu:<bean id="viewResolver" class="org.springframework.web.

servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property></bean>

“home” /WEB-INF/jsp/home.jsp

Page 20: Spring Web MVC

JSP izveidošana• Pēdējais kas palika – izveidot pašu JSP

<html><head><title>Spring Training, Inc.</title></head><body><h2>${message}</h2></body></html>

• Failu ir jānosauc par “home.jsp” un ir jānoliek zem /WEB-INF/jsp/ direktorijas

Page 21: Spring Web MVC

Kopsavilkums

Page 22: Spring Web MVC

HandlerMapping• Tipiski piesaista specifisku kontrolieri pie

URL adreses parauga

• Spring piedāvā četras noderīgas HandlerMapping implementācijas

• BeanNameUrlHandlerMapping

• SimpleUrlHandlerMapping

• CommonsPathMapHandlerMapping

Page 23: Spring Web MVC

BeanNameUrlHandlerMapping• Piesaista URL adresi pie kontroliera, kurš ir

reģistrēts konfigurācijas failā ar tādu pašu vārdu• e.g. /simple.htm maps to a bean named “/simple.htm”

• Ir jāizmanto name atribūtu, jo “/” nav atļauts XML atribūtā id

<bean class="org.springframework.web.servlet. handler.BeanNameUrlHandlerMapping"/>

<bean name="/simple.htm" class="com.mvc.web.SimpleController">. . .</bean>

Page 24: Spring Web MVC

SimpleUrlHandlerMapping• Pats vispārīgs veids kā piesaistīt pieprasījuma

URLus kontrolieriem

• Tiek konfigurēts kā saraksts no name/value pāriem (URL/kontrolieru vārds)

<bean id="simpleUrlMapping" class="org.springframework.web .servlet.handler.SimpleUrlHandlerMapping">

<property name="mappings"> <props> <prop key="/listCourses.htm">listCoursesController</prop> <prop key="/register.htm">registerStudentController</prop> <prop key="/displayCourse.htm">displayCourseController</prop> </props> </property></bean>

Page 25: Spring Web MVC

CommonsPathMapHandlerMapping• Considers source-level metadata placed in a controller’s

source code to determine the URL mapping

• Need to set up build to

include the Commons

Attributes compiler so

that the attributes will

be compiled into

application code

<bean id="urlMapping" class="org.springframework.web.servlet.handler.metadata.CommonsPathMapHandlerMapping"/>

/** @@org.springframework.web.servlet. handler.commonsattributes.PathMap(

"/displayCourse.htm")*/public class DisplayCourseControllerextends AbstractCommandController {…}

Page 26: Spring Web MVC

Multiple handler mappings• Ir iespējams deklarēt vairākus handler

mappings vienā aplikācijā

• Handler mapping klases implementē Spring’a Ordered interfeisu

• Var uzstādīt order īpašību, lai norādīt izpildes kārtību attiecībā uz citiem handler mapping komponentiem

Page 27: Spring Web MVC

Multiple handler mappings<bean id="beanNameUrlMapping"

class="org.springframework.web.

servlet.handler.BeanNameUrlHandlerMapping"> <property name="order"><value>1</value></property></bean>

<bean id="simpleUrlMapping" class="org.springframework.web.

servlet.handler.SimpleUrlHandlerMapping"> <property name="order"><value>0</value></property> <property name="mappings"> … </property></bean>

Page 28: Spring Web MVC

Kontrolieri• Ja DispatcherServlet ir Spring MVC

sirds, tad kontrolieri ir smadzenes

Page 29: Spring Web MVC

Kontrolieru hierarhija• Spring piedāvā

bagātu kontrolieruhierarhiju

• Hierarhijas virsotnē atrodas Controller interfeiss

• Parasti ir jāizmantokādu no implementācijas apakšklasēm

Page 30: Spring Web MVC

AbstractController• Pats vienkāršākais kontrolieris

public class SampleController extends AbstractController {

public ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response) throws Exception {

return new ModelAndView("hello“, “message”, "Hello World!");

}}

Page 31: Spring Web MVC

ModelAndView objekts• Iekapsulē skatu un modeļa datus, kurus skats attēlos

• Modelis ir realizēts kā java.util.Map

• Ērts konstruktors viena modeļa objekta gadījumam:

ModelAndView(

String viewName,

String modelName,

Object modelObject)

Page 32: Spring Web MVC

ModelAndView objekts• Ir iespējams arī pievienot modelim

vairākus objektus:

public ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response) throws Exception {

ModelAndView mav = new ModelAndView(“welcome"); mav.addObject("message1", “Welcome!"); mav.addObject("message2", "Nice to see you!"); return mav; }

Page 33: Spring Web MVC

Parametru apstrāde• Web pieprasījums bieži satur vienu vai vairākus

parametrus

Kādā veidā varētu piekļūt parametriem kontroliera kodā???

<form action="/login" method="POST"> Login: <input id=“login" name="login"/> Password: <input id="password" name="password" type="password"/> <input type="submit" value="Login"/></form>

Page 34: Spring Web MVC

Risinājums• Varētu izmantot AbstractController un

nolasīt parametrus no HttpServletRequest

public ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response) throws Exception {

String login = request.getParameter("login"); String pass = request.getParameter("password"); . . .}

Spring piedāvā ērtāku iespēju!

Page 35: Spring Web MVC

AbstractCommandController• Automātiski ieraksta parametrus speciālajā

komandas objektā (command object)

• Ir iespēja pievienot validatoru, lai nodrošināt to, ka parametri ir pareizi

• Galvenā izpildes metode:

handle(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)

Page 36: Spring Web MVC

AbstractCommandController

public class DisplayCourseController extends AbstractCommandController {

public DisplayCourseController() { setCommandClass(DisplayCourseCommand.class);}

protected ModelAndView handle(HttpServletRequest request,HttpServletResponse response, Object command,BindException errors) throws Exception {

DisplayCourseCommand displayCommand =(DisplayCourseCommand) command;

Course course = courseService.getCourse(displayCommand.getId()); return new ModelAndView("courseDetail", "course", course);}

Page 37: Spring Web MVC

Command Object• A command object is a bean that is meant

to hold request parameters for easy access

public class DisplayCourseCommand {private Integer id;public void setId(Integer id) {

this.id = id;}public Integer getId() {

return id;}

}

• Spring will attempt to match any parameters passed in the request to properties in the command object

Page 38: Spring Web MVC

Pārskats

Page 39: Spring Web MVC

Formu apstrāde• Tipiska web aplikācija satur vismaz vienu formu

• Lietotājs aizpilda formu un aizsūta to• Dati tiek nosūtīti serverim• Kad datu apstrāde ir pabeigta, tad lietotājs

saņem vienu no variantiem:• Lapa ar veiksmīgas izpildes paziņojumu• Formas lapa ar kļūdu paziņojumiem

Kādā veidā varētu to realizēt???

Page 40: Spring Web MVC

Risinājums• Izmantot AbstractController formas

attēlošanai• Izmantot AbstractCommandController

formas apstrādei

• Trūkums: vajag uzturēt divus dažādus kontrolierus, kuri kopā nodarbojas ar viena uzdevuma risināšanu

Page 41: Spring Web MVC

SimpleFormController• Formu kontroliera funkcionalitāte:

• Attēlo formu uz HTTP GET pieprasījuma• Apstrādā formu uz HTTP POST pieprasījuma• Ja notiek kļūda, tad atkārtoti parāda formupublic class RegisterStudentControllerextends SimpleFormController {

public RegisterStudentController() {setCommandClass(Student.class);

}protected void doSubmitAction(Object command)throws Exception {

Student student = (Student) command;studentService.enrollStudent(student);

}}

Page 42: Spring Web MVC

SimpleFormController config• Kontrolieris ir uzprojektēts tādā veidā, lai pēc iespējas

vairāk atdalīt skatu detaļas no kontroliera koda<bean id="registerStudentController" class="com.springinaction.

training.mvc.RegisterStudentController"> <property name="formView">

<value>newStudentForm</value> </property> <property name="successView">

<value>studentWelcome</value> </property> . . .</bean>

HTTP GET

• Ja ir nepieciešams aizsūtīt datus skatam, tad vajag izmantot onSubmit() metodi

Page 43: Spring Web MVC

Formu validācija• Viens no svarīgiem uzdevumiem ir formas datu

validācija

• Par validāciju atbild sekojošais interfeisspublic interface Validator { void validate(Object obj, Errors errors); boolean supports(Class clazz);}

• Implementējot šī interfeisa validate() metodi vajag pārbaudīt objekta atribūtu vērtības un noraidīt nepareizas vērtības izmantojot Errors objektu

Page 44: Spring Web MVC

Validatora reģistrēšana• Validatoru vajag piesaistīt kontrolierim

konfigurācijas failā

<bean id="registerStudentController" class="com.springinaction.training.mvc.

RegisterStudentController">… <property name="validator"> <bean class="com.springinaction.training.

mvc.StudentValidator"/> </property></bean>

Page 45: Spring Web MVC

Wizard (daudzekrānu) formas

• Uzdevums – realizēt aptaujas formu ar 40 jautājumiem

• Variants – izmantot SimpleFormController, izvietot visus jautājumus vienā lapā

• Bet tas nav ērti lietotājam!

Kādā veidā varētu to realizēt???

Page 46: Spring Web MVC

Wizard formas• Spring piedāvā kontrolieri, kas atbild par secīgu

virzīšanos cauri vairākām lapām

AbstractWizardFormController

• Līdzīgs parastai formai, bet ir iespējams validēt datus pa daļām (katrā ekrānā savu daļu)

• Formas apstrāde parasti notek pašās beigās

• Ir iespēja visu procesu atcelt (cancel) jebkurā brīdī

Page 47: Spring Web MVC

Wizard formas kontrolierispublic class FeedbackWizardController

extends AbstractWizardFormController {

public FeedbackWizardController() {setCommandClass(FeedbackSurvey.class);

}

protected ModelAndView processFinish(HttpServletRequest request,HttpServletResponse response, Object command,BindException errors) throws Exception {

FeedbackSurvey feedback = (FeedbackSurvey) command;feedbackService.submitFeedback(feedback);return new ModelAndView("thankyou");

}

Page 48: Spring Web MVC

Wizard formas konfigurēšana

• Formas kontroliera konfigurēšana

<bean id="feedbackController" class="com.springinaction.training.mvc.MyWizardController">

<property name="pages"> <list> <value>general</value> <value>instructor</value> <value>course</value> </list></property></bean>

• Šeit tiek definētas visas lapas

Page 49: Spring Web MVC

Wizard formas lapas• Pa lapām var pārvietoties ierakstot

pieprasījumā parametru ar vārdu "_targetX", kur X ir lapas numurs

<form method="POST" action="feedback.htm">…<input type="submit" value="Back" name="_target1"> <input type="submit" value="Next" name="_target3"></form>

Page 50: Spring Web MVC

Wizard formas finish/cancel• Formas pabeigšana - tiks izsaukta metode processFinish()

<input type="submit" value="Finish" name="_finish">

• Formas atcelšana - tiks izsaukta metode processCancel()

<input type="submit" value="Cancel" name="_cancel">

Page 51: Spring Web MVC

Wizard formas validācija• Formas komandas objekts tiek validēts pa

lapām

protected void validatePage(Object command, Errors errors, int page) {

FeedbackSurvey feedback = (FeedbackSurvey) command;FeedbackValidator validator =

(FeedbackValidator) getValidator();if(page == 0) { validator.validateEmail(feedback.getEmail(), errors);}}

Page 52: Spring Web MVC

Vairāku darbību apstrāde• Visi līdz šīm apskatītie kontrolieri pildīja kādu vienu

uzdevumu• Veidot vairākus kontrolierus lai pildīt līdzīgus uzdevumus

nav īsti racionāli• Piemērām, vajag attēlot kursu sarakstu dažādos variantos:

• Nesakārtotā veidā• Sakārtoti pēc datuma• Sakārtoti pēc nosaukuma

Kādā veidā varētu to realizēt???

Page 53: Spring Web MVC

MultiActionController

public class ListCoursesController extends MultiActionController {

public ModelAndView coursesUnsorted(HttpServletRequest request, HttpServletResponse response) {. . .}public ModelAndView coursesSortedByStartDate(HttpServletRequest request, HttpServletResponse response) {. . .}public ModelAndView coursesSortedByName(HttpServletRequest request, HttpServletResponse response) {. . .}

Page 54: Spring Web MVC

Metodes vārda noteikšana• Pēc noklusējuma metodes vārds tiek noteikts

izmantojot URL sastāvdaļu:

•“http://…/coursesUnsorted.htm” coursesUnsorted()

•“http://…/coursesSortedByStartDate.htm”

coursesSortedByStartDate()

•“http://…/coursesSortedByName.htm” coursesSortedByName()

Page 55: Spring Web MVC

Metodes vārda noteikšana• Ir pieejami arī citi varianti:

• ParameterMethodNameResolver - Resolves the execution method name based on a parameter in the request

• PropertiesMethodNameResolver -Resolves the name of the execution method by consulting a list of key/value pairs

Page 56: Spring Web MVC

Pārskats

Page 57: Spring Web MVC

ThrowawayController• Nav Controller hierarhijas daļa

• Netiek izmantots HTTP pieprasījums vai komandas objekts

• Parametri tiek ierakstīti tieši kontrolierī• Ir noderīgi, kad nav modeļa objekta, kuru varētu

izmantot• Atšķirībā no citiem kontrolieriem, nav singleton

public interface ThrowawayController { ModelAndView execute() throws Exception;}

Page 58: Spring Web MVC

ThrowawayController

public class DisplayCourseController

implements ThrowawayController {

private Integer id;

public void setId(Integer id) { this.id = id; }

public ModelAndView execute() throws Exception {

Course course = courseService.getCourse(id);

return new ModelAndView(

"courseDetail", "course", course);

}

}

Page 59: Spring Web MVC

Interceptors• Iespēja pievienot papildus funkcionalitāti pirms

un pēc pieprasījuma

• Satur divas interception metodes –

preHandle un postHandle

• Satur vienu callback metodi –

afterCompletion

• Tiek piesaistīts kontrolieru kopai kopā ar HandlerMapping

Page 60: Spring Web MVC

Piemērs: Interceptor config<beans> <bean id="handlerMapping" class="org.springframework.web.

servlet.handler.SimpleUrlHandlerMapping">

<property name="interceptors"> <list> <ref bean="officeHoursInterceptor"/> </list> </property> <property name="mappings"> <value> /*.form=editAccountFormController

</value> </property> </bean>

<bean id="officeHoursInterceptor" class="samples.TimeBasedAccessInterceptor"> <property name="openingTime" value="9"/> <property name="closingTime" value="18"/> </bean><beans>

Page 61: Spring Web MVC

Piemērs: Interceptor kodspublic class TimeBasedAccessInterceptor extends

HandlerInterceptorAdapter {

. . .

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

Calendar cal = Calendar.getInstance(); int hour = cal.get(HOUR_OF_DAY); if (openingTime <= hour < closingTime) { return true; } else { response.sendRedirect(

"http://host.com/outsideOfficeHours.html");

return false; } }}

Page 62: Spring Web MVC

View Resolving• A view is a bean that renders results to the user• Spring MVC consults view resolvers when trying

to determine which View bean to use

Page 63: Spring Web MVC

ViewResolver implementācijasSpring piedāvā četras pamata ViewResolver interfeisa implementācijas

• InternalResourceViewResolver –• Resolves logical view names into View objects

that are rendered using template file resources (such as JSPs and Velocity templates)

• BeanNameViewResolver - • Resolves logical view names into View beans

in the DispatcherServlet’s application context

Page 64: Spring Web MVC

ViewResolver implementācijas• ResourceBundleViewResolver –

• Mappings are contained within a properties file• Supports internationalization

• XmlViewResolver –

• Mappings are contained within a XML file that is separate from the DispatcherServlet’s application context

• VelocityViewResolver• FreeMarkerViewResolver

Page 65: Spring Web MVC

View klasesSpring piedāvā sekojošas skatu apakšklases:• JstlView

• Attēlo viewName par JSP lapu, kurā uzstādīti arī JSTL tagu bibliotēkām vajadzīgie mainīgie, piemēram, lokalizācija.

• RedirectView• Veic HTTP Redirect

• VelocityLayoutView, VelocityToolboxView, VelocityView

• Velocity skati ar vai bez papildu objektiem, ko konfigurē toolbox.xml

• FreeMarkerView

Page 66: Spring Web MVC

Internacionalizācija• Spring dod iespēju automātiski izvēlēties ziņojumu

tekstus izmantojot lietotāja lokāli

• DispatcherServlet izmanto LocaleResolver lai noteikt klienta lokāli

• AcceptHeaderLocaleResolver• izmantot HTTP "Accept-language" hederi lokāles atrašanai

• CookieLocaleResolver• izmantot cookies lokāles atrašanai

• SessionLocaleResolver • lokāle liek glabāta sesijā

Page 67: Spring Web MVC

Internacionalizācija• Lokāles izmaiņas funkcionalitātei var izmantot klasi

LocaleChangeInterceptor, to ir jāpieliek klāt kādam HandlerMapping

• Visbeidzot, teksta ziņojumus ir jāieraksta failos zem /WEB-INF/classes/:

• messages_en.properties• messages_de.properties• utml

• JSP lapā ziņojumus var ielikt izmantojot tagu <fmf:message key="<msg_name>">

<fmf:message key=“hello">

#msg_name=msg_textgreetings=Hello!true=Yesfalse=No

Page 68: Spring Web MVC

Springa tēmas• Viegli konfigurējamas un izpildes laikā

nomaināmas aplikācijas "ādas“

Page 69: Spring Web MVC

Springa tēmas• Tēma (theme) ir statisko resursu kolekcija,

kas ietekmē aplikācijas vizuālo stilu• style sheets (css), images

• ResourceBundleThemeSource ielāde properties failus no classpath saknes

/WEB-INF/classes/

• Daudz līdzības ar internacionalizācijas konfigurēšanu

Page 70: Spring Web MVC

Springa tēmas• Properties faila piemērs:

styleSheet=/themes/cool/style.css background=/themes/cool/img/coolBg.jpg

• JSP lapā ir jāizmanto <spring:theme> tagu<%@ taglib prefix="spring"

uri="http://www.springframework.org/tags"%><html> <head> <link rel="stylesheet"

href="<spring:theme code="styleSheet"/>" type="text/css"/>

</head> <body background="<spring:theme code="background"/>"> ... </body></html>

Page 71: Spring Web MVC

Failu augšupielāde• Spring piedāvā failu augšupielādes funkcionalitāti

(multipart file upload)

• Atbalsta CommonFileUpload un COS FileUpload

<bean id="multipartResolver“ class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property name="maxUploadSize" value="100000"/></bean>

<h1>Please upload a file</h1><form method="post" action="upload.form"

enctype="multipart/form-data"><input type="file" name="file"/><input type="submit"/></form>

Page 72: Spring Web MVC

Izņēmumu apstrāde• Viena no Springa īpatnībām - vairums izņēmumu

ir RuntimeException apakštipi, tos nevajag metodēs ķert vai deklarēt

• Ir piedāvāta iespēja apstrādāt negaidītas kļūdas

• SimpleMappingExceptionResolver• Iespēja piesaistīt skatu izņēmuma klasei

konfigurācijas failā

• HandlerExceptionResolver• Interfeiss, kuru vajag implementēt, lai apstrādāt

kontrolieru kļūdas

Page 73: Spring Web MVC

SimpleMappingExceptionResolver

<bean id="exceptionResolver" class="org.springframework.web.

servlet.handler. SimpleMappingExceptionResolver">

<property name="exceptionMappings"><props>

<prop key="java.lang.Exception">friendlyError</prop>

</props></property>

</bean>

Page 74: Spring Web MVC

Countries piemērs• Spring piemēru, kuru var palaist un apskatīties

kodu var atrast zem:\spring-framework-2.0.6\samples\countries\

Special Spring MVC features:• paged list navigation• locale and theme switching• localized view definitions• page composition through

view definitions• generation of PDF and

Excel views

Page 75: Spring Web MVC

Resursi• Spring Home

http://www.springframework.org

• C. Walls, R.Breidenbach. Spring in Action http://www.manning.com/walls2/

• Spring Web MVC Framework http://www.springframework.org/docs/reference/mvc.html

• Spring MVC step-by-step Tutorial http://www.springframework.org/docs/MVC-step-by-step/Spring-MVC-step-by-step.html

Page 76: Spring Web MVC

Resursi• Model-View-Controller pattern by Sun

http://java.sun.com/blueprints/patterns/MVC.html

• Core J2EE Patterns - Front Controller http://java.sun.com/blueprints/corej2eepatterns/Patterns/FrontController.html