Share
Embed
Web frameworks, Spring MVC and Spring Boot
Presentation from Paul Chapman and Michael Isvy at the Korea Spring User Group
Michael Isvy
November 27, 2014
Transcript
32 slides
-
1 Before we start ࠄ ೯ࢎী খࢲ ৈ۞࠙ झ݃
ಪਵ۽ http://tinyurl.com/koreaspring ۽ زೞ࣊ࢲ 5 ޙ೦ী ߸ ࠗఌ ٘݀פ. (࢚ ࣗਃदр 1࠙) Please go to http://tinyurl.com/koreaspring on your mobile phone. Please answer those 5 questions (it takes one minute) -
2 • 전자정부 표준프레임워크 개발자 양성과정 ü 일정 : 2014.03.10
~ 2014.05.23 (400시간, 14명) ü 커리큘럼 : Java, Spring Framework, DBMS, Mini Project • Java Application 전문가 양성 과정 ü 일정 : (1차) 2014.06.30 ~ 2014.09.24 (400시간, 30명) (2차) 2014.08.07 ~ 2014.10.31 (400시간, 30명) ü 커리큘럼 : Java, Spring Framework, DBMS, Mini Project Hadoop, Big Data Java Programming 3 weeks Spring Framework 4 weeks Spring Project Big Data 3 weeks - Java Programming - JSP - Core Spring - Spring Web - Hibernate w/ Spring - Hadoop - Data Science -
3 Paul Chapman Michael Isvy
Pivotal Education 2008 - Spring - Tomcat 2009-2012 - Spring - Tomcat - Cloud Foundry - GemFire… 2013 onwards - Spring, Cloud Foundry - Tomcat, Redis, Hadoop - GemFire P -
6 Disclaimer: framework versus standard JSF is part of
Java EE specification Technically JSF is not exactly a web framework but rather a specification and an implementation – We’ve used the word “framework” here to keep things simple P -
7 2000: Servlet/JSP public class MyServlet extends HttpServlet {" "
" public void doGet(HttpServletRequest req, HttpServletResponse resp) {" …" } public void doPost(HttpServletRequest req, HttpServletResponse resp) {" … } " } Not a POJO Request params parsed manually Form validation done manually No I18N support … Verbose XML config M -
8 2003: Apache Struts public class UserAction extends Action {"
" " public void execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) {" …" } " } Not a POJO Request params parsed manually Form validation done manually Verbose XML config … public class UserForm extends ActionForm {" " private String name; public String getName() { return name; } public void seName(String name) { this.name = name; }" } No Internationalization support P -
9 2003: Apache Struts Java community formed a consensus
Quickly became the way to go for Java web frameworks So what happened next? 9 P -
10 2004: JSF Struts was created by Craig McClanahan
– Also one of the key founders of Servlet, JSP, JSTL and Tomcat Craig wanted to create a component-oriented Web framework – Event/Listener model M -
11 2004: JSF Problem: view layer was good but
some major limitations – Form validation very limited – Couldn’t disable JavaScript – No support for “GET” methods… Specification versus framework – For it to succeed, JSF should have been a framework, not a specification ▪ Frameworks can be updated every month ▪ Java EE Specs are updated once every 2 years M -
12 2005: The JSF / Struts 1 & 2 story
Original plan What happened Struts JSF Struts 2 Struts WebWork Struts 2 M -
13 2005: Spring MVC without annotations Spring MVC was
similar to Struts – But more modern ▪ Easier to extend ▪ Well integrated for Dependency Injection public class UserController extends SimpleFormController { private UserService service; public ModelAndView onSubmit(Object command) { //... } } P Not a POJO Request params parsed manually Form validation done manually Simpler XML config … No Internationalization support -
14 2008: Spring @MVC Annotations are the way to
go for Spring @MVC! public class UserController extends SimpleFormController { private UserService service; public ModelAndView onSubmit(Object command) { //... } } @Controller public class UserController { @Autowired private UserService service; @RequestMapping(value="/users/", method=RequestMethod.POST) public ModelAndView createUser(User user) { //... } } P Now POJO based!! No XML needed for controllers anymore!! -
16 Let’s talk about CSS and Javascript Back in
2008, there were plenty of small CSS frameworks – None of them really did the job Now there is Bootstrap! M -
17 What is Bootstrap? Originally called “Twitter Bootstrap”
Available from 2011 Typography, forms, buttons, charts, navigation and other interface components Integrates well with jQuery M -
19 Let’s talk about JavaScript Back in 2008, there
were too many JavaScript frameworks Now there is jQuery! M -
20 Spring @MVC and the View Layer Spring @MVC
is neat and elegant on the controller side – Form submission, Validation, File upload, testing… Spring @MVC is view-agnostic – No much tooling for integration with CSS/JavaScript frameworks – It’s your job to create the custom tags you need ▪ But that’s not hard! P -
21 Form fields: Without custom tags <div class=“control-group” id=“${lastName}"> <label
class="control-label">${lastNameLabel}</label> <div class="controls"> <form:input path="${name}"/> <span class="help-inline"> <form:errors path="${name}"/> </span> </div> </div> CSS div Label Form input Error message (if any) JSP M -
22 Using custom tags First create a tag (or
tagx) file <%@ taglib prefix="form" uri="http://www.spring…org/tags/form" %> <%@ attribute name="name" required="true" rtexprvalue="true" %> <%@ attribute name="label" required="true" rtexprvalue="true" %> <div class="control-group" id="${name}"> <label class="control-label">${label}</label> <div class="controls"> <form:input path="${name}"/> <span class="help-inline"> <form:errors path="${name}"/> </span> </div> </div> inputField.tag Custom tags are part of Java EE P -
23 Using custom tags Custom tag call Folder which
contains custom tags <html xmlns:custom="urn:jsptagdir:/WEB-INF/tags/html" …> … <custom:inputField name="firstName" label="Enter your first name" /> <custom:inputField name=”lastName" label="Enter your last name" /> </html> JSP file 1 line of code instead of 9!! P -
24 Some tags already exist! Dandelion for DataTables (nice
addition to Spring @MVC) – dandelion.github.com <datatables:table data="${userList}" id="dataTable" > <datatables:column title="First Name" property="firstName" sortable="true" /> <datatables:column title="Last Name" property="lastName" sortable="true" /> </datatables:table> JSP file M -
25 Dandelion is based on jQuery Datatables and Bootstrap
Click, sort, scroll, search, next/previous… PDF and Excel exports… M -
26 Spring Boot: the future of Spring applications? Spring
Boot allows to reduce configuration a lot – Based on Convention over configuration P -
27 Spring Boot: the future of Spring applications? Example
with Spring Petclinic application Pom.xml Spring Configuration Properties Total Spring without Boot 377 lines 350 lines 17 lines 744 lines Spring Boot 117 lines 130 lines 10 lines 257 lines 65% less configuration code!!! Spring Petclinic without Boot: https://github.com/spring-projects/spring-petclinic/ With Boot: https://github.com/FabienLauf/spring-petclinic P -
29 Spring Boot conventions Spring Boot takes an opinionated
approach to application decisions – Example Opinion: Web applications should use Tomcat – Example Opinion: JPA applications should use Hibernate What if you have different opinions? – Run on Jetty, use EclipseLink No Problem! – Simply override the default configuration P -
30 Cloud Foundry: new way to deploy Java apps!
PaaS (Platform as a Service) Open Source Deploy and Scale in Seconds on Your choice of technologies -
32 Conclusion Once upon a 5me, Java community was
unified around Struts! JavaScript and CSS: you now have good frameworks! Spring @MVC now is the most popular Web framework for Java Create your own custom tags for the View layer Start learning Spring Boot and Cloud Foundry! N