Learn the Java Spring Framework: Create a Social Network with Spring Boot
Learn how to get dynamic and secure websites running quickly with Spring Boot
Enroll in Course
off original price!
The coupon code you entered is expired or invalid, but the course is still available!
This is a course on the Java Spring framework and Spring Boot.
To learn about Spring we'll be creating a simple social network, complete with profiles and real-time messaging.
You'll need to understand basic Java to take this course. Knowledge of HTML/CSS and SQL is also helpful. Knowledge of JSP/JSTL will be useful.
Your Instructor
John Purcell
After working as a software developer and contractor for over 14 years for a whole bunch of companies including CSC, Proquest, SPSS and AT&T in the UK and Netherlands, I decided to work full-time as a private software trainer. I moved to the beautiful city of Budapest, where I turned Cave of Programming from just a bunch of articles into what you see today. I now live in Italy.
Course Curriculum
Creating a Basic Web App
Available in
days
days
after you enroll
-
PreviewIntroduction to the course (4:15)
-
PreviewPrerequisites (1:28)
-
PreviewInstalling Software (1:42)
-
PreviewCreating a Maven Spring Boot Project (13:09)
-
PreviewA Basic Web App (12:53)
-
PreviewTemplate Engines (3:31)
-
PreviewAdding a JSP (9:40)
-
PreviewGenerating a Project Without Eclipse (4:07)
-
PreviewPackaging with Maven (6:28)
-
PreviewBuilding with Eclipse (5:14)
-
PreviewExecutable Wars (5:46)
-
PreviewDeploying to Existing Tomcat (12:42)
-
PreviewMultiple Pages and Controllers (10:20)
Composing Pages with Apache Tiles
Available in
days
days
after you enroll
Bootstrap and Static Resources
Available in
days
days
after you enroll
Using Data: Hibernate and JPA
Available in
days
days
after you enroll
Spring Forms and Displaying Data
Available in
days
days
after you enroll
How Forms Work
Available in
days
days
after you enroll
Form Validation
Available in
days
days
after you enroll
Pagination
Available in
days
days
after you enroll
-
StartAbout Paging (2:09)
-
StartGetting URL Parameters (11:02)
-
StartGetting Pages of Results (7:11)
-
StartOutputting Pages (7:30)
-
StartFormatting the Status Updates (2:37)
-
StartOutputting Page Numbers (12:22)
-
StartCustom Tags (11:35)
-
StartCycling Through Page Blocks (8:10)
-
StartDisplaying Page Number Blocks (9:48)
-
StartFixing the Block Hyperlinks and Separator (4:37)
-
StartJumping to the First Page of Blocks (8:22)
Improving the App: Dropdowns, WYSIWYG and Other Stuff
Available in
days
days
after you enroll
Editing and Deleting Data
Available in
days
days
after you enroll
Spring Security: Logging in Users
Available in
days
days
after you enroll
User Registration
Available in
days
days
after you enroll
-
StartThe User Domain Object (5:29)
-
StartThe User Service (4:13)
-
StartThe User Service (7:44)
-
StartConfiguring the User Service (5:24)
-
StartRegistration Forms (7:57)
-
StartMaking Registration Work (5:59)
-
StartPassword Encryption (11:39)
-
StartUsing Roles (8:17)
-
StartRestricting Urls on Roles (3:36)
Validation
Available in
days
days
after you enroll
Email Verification
Available in
days
days
after you enroll
-
StartFake Smtp Test Services (5:48)
-
StartConfiguring a Mail Sender (9:59)
-
StartCreating a Mail Service (8:35)
-
StartTesting Mail Sending (1:26)
-
StartSending as HTML (2:08)
-
StartCreating a Verify Email Page (4:08)
-
StartAdding Thymeleaf Support (5:22)
-
StartCreating a Thymeleaf Template (6:09)
-
StartConfiguring Thymeleaf (5:05)
-
StartRendering the Thymeleaf Template (5:47)
-
Start[Obsolete -- will be removed soon; please skip this video] Creating a Velocity Template (6:37)
-
Start[Obsolete -- will be removed soon; please skip this video] Rendering Velocity Templates (6:48)
Token Validation
Available in
days
days
after you enroll
-
StartDisabling Users (7:04)
-
StartStoring Verification Tokens (12:12)
-
StartUpdating a User (3:12)
-
StartA VerificationDao (2:12)
-
StartToken User Service Methods (5:00)
-
StartCreating a Message page (9:10)
-
StartInvalid User and Expired Token Pages (2:44)
-
StartCreating the Verification Link (11:54)
-
Start[Obsolete -- will be removed soon. Please skip this video] Creating the Verfication Link (6:05)
-
StartImplementing Verification (8:27)
-
StartDeleting Used Tokens (3:29)
-
StartAsynchronous Methods (5:33)
Handling Errors
Available in
days
days
after you enroll
User Profiles
Available in
days
days
after you enroll
-
StartAdding a Profile Link (2:59)
-
StartRetrieving the Logged in Username (5:29)
-
StartCreating a Profile Domain Object (8:22)
-
StartAdding a Profile Page (8:54)
-
StartAdding Profile Text (3:44)
-
StartStyling the Profile (6:44)
-
StartThe Profile DAO (2:08)
-
StartThe Profile Service (2:36)
-
StartEnsuring Privacy in Domain Objects (4:27)
-
StartGetting the Current User (3:53)
-
StartCreating Profiles (7:33)
-
StartDisplaying Profile Text (4:27)
-
StartThe Edit About JSP (3:19)
-
StartViewing the Edit About Page (6:17)
-
StartUpdating Profile About Text (7:31)
-
StartValidating the Profile (6:34)
-
StartAdding a Policy Factory (7:25)
-
StartSanitising the HTML (9:36)
Uploading Photos
Available in
days
days
after you enroll
-
StartAbout Uploading Files (3:11)
-
StartCreating an Upload Form (7:32)
-
StartThe Upload Directory (2:34)
-
StartFile Upload Code (7:42)
-
StartHandling Errors (5:17)
-
StartGetting File Extensions (4:46)
-
StartChecking Extensions (5:20)
-
StartTesting Private Methods with Reflection (8:22)
-
StartTesting isImageExtension (3:21)
-
StartCreating a Random Subdirectory (6:15)
-
StartTesting Directory Creation (5:17)
-
StartDefining an Exception (1:44)
-
StartCreating an Image Save Method (7:40)
-
StartUploading Photos (5:14)
-
StartTransferring File Information (3:58)
-
StartGetting File Information (3:07)
-
StartStoring File Information (7:05)
-
StartLocating the Default Avatar (1:09)
-
StartReturn the Full Photo Path (2:28)
-
StartServing the Photo (11:15)
-
StartUsing the Photo (4:15)
-
StartDeleting Old Photos (3:40)
-
StartEnsuring Name Uniqueness (4:29)
-
StartStructuring the Resize Code (6:28)
-
StartResizing the Profile Photo (13:10)
Improving File Upload with Javascript
Available in
days
days
after you enroll
-
StartTranslating Upload Status (9:03)
-
StartReturning Data from a Method (5:18)
-
StartRunning Javascript (8:42)
-
StartInvoking the File Chooser (5:36)
-
StartSubmitting the Form Automatically (3:11)
-
StartIntercepting Form Submission (6:51)
-
StartUploading Data with Javascript (9:49)
-
StartReturning Http Status Codes (2:55)
-
StartDynamically Refreshing the Image (5:56)
-
StartAdding a Status Message (4:27)
-
StartDisplaying the Status Message (4:24)
-
StartRemoving the Unwanted Form (2:28)
-
StartMethod Based Security (7:09)
Viewing Other Profiles
Available in
days
days
after you enroll
Attaching Tags to Profiles
Available in
days
days
after you enroll
-
StartDefining an Interest (8:07)
-
StartInterest Service and Dao (5:08)
-
StartMany to Many (12:48)
-
StartAbout Cascading and Ordering (4:23)
-
StartSaving Interests (5:15)
-
StartMerging and Copying (2:15)
-
StartModifying Classes for Testing (4:19)
-
StartCreating a Profile Test Class (7:32)
-
StartImplementing the Profile Interest Test (11:22)
-
StartFetch Types and Proxies (10:01)
-
StartA REST Method for Saving Interests (12:54)
-
StartA REST Method for Deleting Interests (6:23)
-
StartTest Config for Testing Controller Methods (7:14)
-
StartMocking Users (3:21)
-
StartMocking a Post Request (9:13)
-
StartFinishing the REST Tests (9:57)
-
StartJavascript Tagging Libraries (9:11)
-
StartIncluding CSS and Javascript for Tagging (10:00)
-
StartInvoking the Tagging Library (5:35)
-
StartInspecting Generated HTML (4:46)
-
StartStyling Interest Tags (7:08)
-
StartConfiguring Tagging (6:34)
-
StartDealing with CSRF in Javascript (10:17)
-
StartSetting POST Headers (6:34)
-
StartImplementing the Ajax Post (4:44)
-
StartOutputting the Interest List (6:26)
-
StartRemoving Autocomplete Text (6:14)
-
StartMaking Profiles Read Only (7:54)
Searching
Available in
days
days
after you enroll
-
StartAbout Searching (3:59)
-
StartAdding a Search Box (5:18)
-
StartStyling the Search Box (6:22)
-
StartA Search Controller (8:02)
-
StartCollecting Names (13:25)
-
StartFixing Tests (10:34)
-
StartMocking Data (2:43)
-
StartTest Data (11:05)
-
StartCreating a Stream (4:13)
-
StartStream Operations (14:14)
-
StartMock Users (18:41)
-
StartSaving the Test Data (6:13)
-
StartPerforming the Search (9:28)
-
StartAbout Data Leakage and Layers (6:34)
-
StartReorganising the Model Packages (3:51)
-
StartThe SearchResult DTO (6:38)
-
StartStream Mapping (5:07)
-
StartThe List of Results (7:33)
-
StartFormatting the Results Page (3:21)
-
StartAdding Photos (5:24)
-
StartRearranging the Results (12:59)
-
StartLinking to Profiles (3:04)
-
StartAdding a Register Prompt (4:43)
-
StartCSS for the Results (7:15)
-
StartClickable Interests (5:04)
-
StartImproving Searching (6:30)
-
StartMore About Paging (6:06)
-
StartChecking Paging Functionality (7:18)
-
StartUsing the Debugger (12:13)
-
StartAdding a Page Number Parameter (4:56)
-
StartImplementing Basic Paging (8:06)
-
StartTesting Out Basic Paging (6:10)
-
StartConverting from Lists to Pages (10:20)
-
StartAdding the Pagination Tag (9:36)
-
StartTweaking the Pagination Tag (9:38)
-
StartSending Search Data to the Results Page (4:44)
-
StartUsing the JSTL Contains Function (5:49)
-
StartApplying the Final Pagination Fix (6:05)
-
StartAdjusting Page Numbers and Results (5:19)
Upgrading Spring Boot
Available in
days
days
after you enroll
-
StartWorking Sets and Filters (7:56)
-
StartSome Simple Package Upgrades (6:26)
-
StartUsing the New Crudrepository Methods (8:42)
-
StartUpgrading Test Annotations (6:49)
-
StartConfiguring Servers in Spring Boot 2 (6:49)
-
StartUpgrading PageRequests (5:52)
-
StartUsing a Test Database (12:54)
-
StartRunning the Tests (5:38)
-
StartMaking the Tests Rerunnable (6:08)
-
StartFixing Image Upload Bugs (6:43)
-
StartFixing Search Results Bug (4:20)
Messaging with Websockets and STOMP
Available in
days
days
after you enroll
-
StartIntroducing Websockets (8:00)
-
StartWebjars (6:31)
-
StartChecking Webjars Javascript (1:26)
-
StartWebsocket Configuration (13:36)
-
StartGetting the CSRF Token (9:20)
-
StartEstablishing a Web Socket Connection (9:07)
-
StartA Chatview Page (7:42)
-
StartAdding Chatview Script (6:51)
-
StartCompleting the Chat Form (7:28)
-
StartResponding to Clicks and the Enter Key (4:35)
-
StartGetting the Logged In User ID (9:21)
-
StartGetting the Chat User Details (10:34)
-
StartA SimpleMessage Class (5:10)
-
StartMessage Handling Controller Method (3:32)
-
StartMessage Sending Additional Code (12:01)
-
StartSending the Message (7:26)
-
StartSending the Message Back to the User (11:42)
-
StartReceiving Messages
-
StartA Javascript Connection Manager Class (12:59)
-
StartThe Subscription Array (10:55)
-
StartGetting the ConnectionManager Working (12:34)
-
StartTransferring Code to ConnectionManager (10:07)
-
StartA Custom User Details Class (5:51)
-
StartAdding the Profile Name (9:25)
-
StartWorking with Profiles (5:43)
-
StartAdding a Chat Icon (7:19)
-
StartAbout Queues (8:29)
-
StartSending and Receiving (5:59)
-
StartDisplaying Formatted Messages (4:54)
-
StartStyling Messages (2:21)
-
StartDifferentiating Replies from Sent Messages (6:19)
-
StartA Message Class (6:55)
-
StartMessage Service and Repository (6:17)
-
StartFetchConversation Controller Method (7:32)
-
StartFetchConversation Message Service Method (8:11)
-
StartQuerying the Conversation Messages (8:54)
-
StartRetrieving the Conversation (8:15)
-
StartUsing Javascript to Retrieve the Conversation (5:20)
-
StartPosting the Conversation Request (6:45)
-
StartDisplaying Past Messages (5:24)
-
StartOrdering Messages (8:04)
-
StartRetrieving Previous Message Pages (6:39)
-
StartAdding Previous Messages (5:43)
-
StartSizing the Chat Window (11:39)
-
StartSending a Message Notification (5:43)
-
StartBrowser Notifications (8:17)
-
StartMaking Notifications Clickable (2:20)
-
StartAdding a Messages Page (3:52)
-
StartRetrieving the Message List (7:52)
-
StartDisplaying the Message List (5:43)
-
StartFormatting Messages (6:10)
-
StartGetting the Message ID (4:41)
-
StartMarking Messages as Read (7:19)
Appendix
Available in
days
days
after you enroll
Frequently Asked Questions
When does the course start and finish?
The course starts now and never ends! It is a completely self-paced online course - you decide when you start and when you finish.
How long do I have access to the course?
How does lifetime access sound? After enrolling, you have unlimited access to this course for as long as you like - across any and all devices you own.
What if I am unhappy with the course?
We would never want you to be unhappy! If you are unsatisfied with your purchase, contact us in the first 30 days and we will give you a full refund.
off original price!
The coupon code you entered is expired or invalid, but the course is still available!