Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Learn the Java Spring Framework: Create a Social Network with Spring Boot
Creating a Basic Web App
Introduction to the course (4:15)
Prerequisites (1:28)
Installing Software (1:42)
Creating a Maven Spring Boot Project (13:09)
A Basic Web App (12:53)
Template Engines (3:31)
Adding a JSP (9:40)
Generating a Project Without Eclipse (4:07)
Packaging with Maven (6:28)
Building with Eclipse (5:14)
Executable Wars (5:46)
Deploying to Existing Tomcat (12:42)
Multiple Pages and Controllers (10:20)
Composing Pages with Apache Tiles
Setting up Apache Tiles (10:28)
Creating Tiles Definitions (10:38)
Adding and Extending Tiles Definition (6:27)
Bootstrap and Static Resources
Static Resources - Bootstrap (10:57)
Adding a Bootstrap Navbar (7:11)
Styling the Navbar (10:56)
Setting the Context Root (15:11)
The Bootstrap Grid (8:42)
Bootstrap Panels (5:55)
Adding a HTML Form (3:15)
Using Data: Hibernate and JPA
JUnit (11:09)
MySQL Databases (5:32)
Creating a MySQL User (7:40)
Connecting to MySQL (12:23)
Creating a Domain Object (6:08)
Using JPA (8:50)
Using CrudRepository (15:24)
Retrieving the Most Recent Status Object (10:08)
Spring Forms and Displaying Data
Adding a Service Layer (3:42)
Model and View (11:59)
Spring Form Tags (11:40)
Displaying Data (9:05)
Formatting Dates (7:51)
How Forms Work
JSPs, Objects and Classes (8:40)
Model Attributes (6:18)
Refreshing and Updating (7:34)
Form Validation
Validating Forms (9:57)
Customising Validation Messages (7:44)
Pagination
About Paging (2:09)
Getting URL Parameters (11:02)
Getting Pages of Results (7:11)
Outputting Pages (7:30)
Formatting the Status Updates (2:37)
Outputting Page Numbers (12:22)
Custom Tags (11:35)
Cycling Through Page Blocks (8:10)
Displaying Page Number Blocks (9:48)
Fixing the Block Hyperlinks and Separator (4:37)
Jumping to the First Page of Blocks (8:22)
Improving the App: Dropdowns, WYSIWYG and Other Stuff
What If There Is Only One Page (3:03)
Redirecting (4:35)
Editing the Home Page (7:09)
Javascript Visual Editors (6:14)
Dropdown Menus (9:44)
Editing and Deleting Data
Adding Edit and Delete Links (7:53)
Deleting Status Updates (6:46)
Displaying Statuses for Editing (8:17)
Saving Edits (10:18)
Spring Security: Logging in Users
Adding Spring Security (7:38)
Conditional Formatting (3:41)
Additional Security Rules (6:58)
Adding a Login Form (15:22)
Authentication (9:12)
Login Error Messages (4:28)
Logging Out (6:49)
The Security Taglib (5:49)
User Registration
The User Domain Object (5:29)
The User Service (4:13)
The User Service (7:44)
Configuring the User Service (5:24)
Registration Forms (7:57)
Making Registration Work (5:59)
Password Encryption (11:39)
Using Roles (8:17)
Restricting Urls on Roles (3:36)
Validation
Validating the Email Address (7:44)
Validating the Password (9:50)
Adding Custom Validation (5:38)
Custom Validaton Annotation (6:47)
Adding the Password Match Constraint (9:34)
Email Verification
Fake Smtp Test Services (5:48)
Configuring a Mail Sender (9:59)
Creating a Mail Service (8:35)
Testing Mail Sending (1:26)
Sending as HTML (2:08)
Creating a Verify Email Page (4:08)
Adding Thymeleaf Support (5:22)
Creating a Thymeleaf Template (6:09)
Configuring Thymeleaf (5:05)
Rendering the Thymeleaf Template (5:47)
[Obsolete -- will be removed soon; please skip this video] Creating a Velocity Template (6:37)
[Obsolete -- will be removed soon; please skip this video] Rendering Velocity Templates (6:48)
Token Validation
Disabling Users (7:04)
Storing Verification Tokens (12:12)
Updating a User (3:12)
A VerificationDao (2:12)
Token User Service Methods (5:00)
Creating a Message page (9:10)
Invalid User and Expired Token Pages (2:44)
Creating the Verification Link (11:54)
[Obsolete -- will be removed soon. Please skip this video] Creating the Verfication Link (6:05)
Implementing Verification (8:27)
Deleting Used Tokens (3:29)
Asynchronous Methods (5:33)
Handling Errors
Tightening the Security Rules (5:13)
Handling 403 Errors in Spring 2 (6:21)
Handling 403 Forbidden (5:31)
Adding an Access Denied Page (5:36)
Handling Exceptions (8:11)
Creating an Error Page (8:38)
Handling Duplicate Users (6:43)
User Profiles
Adding a Profile Link (2:59)
Retrieving the Logged in Username (5:29)
Creating a Profile Domain Object (8:22)
Adding a Profile Page (8:54)
Adding Profile Text (3:44)
Styling the Profile (6:44)
The Profile DAO (2:08)
The Profile Service (2:36)
Ensuring Privacy in Domain Objects (4:27)
Getting the Current User (3:53)
Creating Profiles (7:33)
Displaying Profile Text (4:27)
The Edit About JSP (3:19)
Viewing the Edit About Page (6:17)
Updating Profile About Text (7:31)
Validating the Profile (6:34)
Adding a Policy Factory (7:25)
Sanitising the HTML (9:36)
Uploading Photos
About Uploading Files (3:11)
Creating an Upload Form (7:32)
The Upload Directory (2:34)
File Upload Code (7:42)
Handling Errors (5:17)
Getting File Extensions (4:46)
Checking Extensions (5:20)
Testing Private Methods with Reflection (8:22)
Testing isImageExtension (3:21)
Creating a Random Subdirectory (6:15)
Testing Directory Creation (5:17)
Defining an Exception (1:44)
Creating an Image Save Method (7:40)
Uploading Photos (5:14)
Transferring File Information (3:58)
Getting File Information (3:07)
Storing File Information (7:05)
Locating the Default Avatar (1:09)
Return the Full Photo Path (2:28)
Serving the Photo (11:15)
Using the Photo (4:15)
Deleting Old Photos (3:40)
Ensuring Name Uniqueness (4:29)
Structuring the Resize Code (6:28)
Resizing the Profile Photo (13:10)
Improving File Upload with Javascript
Translating Upload Status (9:03)
Returning Data from a Method (5:18)
Running Javascript (8:42)
Invoking the File Chooser (5:36)
Submitting the Form Automatically (3:11)
Intercepting Form Submission (6:51)
Uploading Data with Javascript (9:49)
Returning Http Status Codes (2:55)
Dynamically Refreshing the Image (5:56)
Adding a Status Message (4:27)
Displaying the Status Message (4:24)
Removing the Unwanted Form (2:28)
Method Based Security (7:09)
Viewing Other Profiles
Refactoring the Show Profile Code (6:06)
Using Path Variables (5:10)
Viewing Other Profiles (4:09)
Getting Profile-Specific Photos (2:46)
Using the User ID in the Profile (3:45)
Attaching Tags to Profiles
Defining an Interest (8:07)
Interest Service and Dao (5:08)
Many to Many (12:48)
About Cascading and Ordering (4:23)
Saving Interests (5:15)
Merging and Copying (2:15)
Modifying Classes for Testing (4:19)
Creating a Profile Test Class (7:32)
Implementing the Profile Interest Test (11:22)
Fetch Types and Proxies (10:01)
A REST Method for Saving Interests (12:54)
A REST Method for Deleting Interests (6:23)
Test Config for Testing Controller Methods (7:14)
Mocking Users (3:21)
Mocking a Post Request (9:13)
Finishing the REST Tests (9:57)
Javascript Tagging Libraries (9:11)
Including CSS and Javascript for Tagging (10:00)
Invoking the Tagging Library (5:35)
Inspecting Generated HTML (4:46)
Styling Interest Tags (7:08)
Configuring Tagging (6:34)
Dealing with CSRF in Javascript (10:17)
Setting POST Headers (6:34)
Implementing the Ajax Post (4:44)
Outputting the Interest List (6:26)
Removing Autocomplete Text (6:14)
Making Profiles Read Only (7:54)
Searching
About Searching (3:59)
Adding a Search Box (5:18)
Styling the Search Box (6:22)
A Search Controller (8:02)
Collecting Names (13:25)
Fixing Tests (10:34)
Mocking Data (2:43)
Test Data (11:05)
Creating a Stream (4:13)
Stream Operations (14:14)
Mock Users (18:41)
Saving the Test Data (6:13)
Performing the Search (9:28)
About Data Leakage and Layers (6:34)
Reorganising the Model Packages (3:51)
The SearchResult DTO (6:38)
Stream Mapping (5:07)
The List of Results (7:33)
Formatting the Results Page (3:21)
Adding Photos (5:24)
Rearranging the Results (12:59)
Linking to Profiles (3:04)
Adding a Register Prompt (4:43)
CSS for the Results (7:15)
Clickable Interests (5:04)
Improving Searching (6:30)
More About Paging (6:06)
Checking Paging Functionality (7:18)
Using the Debugger (12:13)
Adding a Page Number Parameter (4:56)
Implementing Basic Paging (8:06)
Testing Out Basic Paging (6:10)
Converting from Lists to Pages (10:20)
Adding the Pagination Tag (9:36)
Tweaking the Pagination Tag (9:38)
Sending Search Data to the Results Page (4:44)
Using the JSTL Contains Function (5:49)
Applying the Final Pagination Fix (6:05)
Adjusting Page Numbers and Results (5:19)
Upgrading Spring Boot
Working Sets and Filters (7:56)
Some Simple Package Upgrades (6:26)
Using the New Crudrepository Methods (8:42)
Upgrading Test Annotations (6:49)
Configuring Servers in Spring Boot 2 (6:49)
Upgrading PageRequests (5:52)
Using a Test Database (12:54)
Running the Tests (5:38)
Making the Tests Rerunnable (6:08)
Fixing Image Upload Bugs (6:43)
Fixing Search Results Bug (4:20)
Messaging with Websockets and STOMP
Introducing Websockets (8:00)
Webjars (6:31)
Checking Webjars Javascript (1:26)
Websocket Configuration (13:36)
Getting the CSRF Token (9:20)
Establishing a Web Socket Connection (9:07)
A Chatview Page (7:42)
Adding Chatview Script (6:51)
Completing the Chat Form (7:28)
Responding to Clicks and the Enter Key (4:35)
Getting the Logged In User ID (9:21)
Getting the Chat User Details (10:34)
A SimpleMessage Class (5:10)
Message Handling Controller Method (3:32)
Message Sending Additional Code (12:01)
Sending the Message (7:26)
Sending the Message Back to the User (11:42)
Receiving Messages
A Javascript Connection Manager Class (12:59)
The Subscription Array (10:55)
Getting the ConnectionManager Working (12:34)
Transferring Code to ConnectionManager (10:07)
A Custom User Details Class (5:51)
Adding the Profile Name (9:25)
Working with Profiles (5:43)
Adding a Chat Icon (7:19)
About Queues (8:29)
Sending and Receiving (5:59)
Displaying Formatted Messages (4:54)
Styling Messages (2:21)
Differentiating Replies from Sent Messages (6:19)
A Message Class (6:55)
Message Service and Repository (6:17)
FetchConversation Controller Method (7:32)
FetchConversation Message Service Method (8:11)
Querying the Conversation Messages (8:54)
Retrieving the Conversation (8:15)
Using Javascript to Retrieve the Conversation (5:20)
Posting the Conversation Request (6:45)
Displaying Past Messages (5:24)
Ordering Messages (8:04)
Retrieving Previous Message Pages (6:39)
Adding Previous Messages (5:43)
Sizing the Chat Window (11:39)
Sending a Message Notification (5:43)
Browser Notifications (8:17)
Making Notifications Clickable (2:20)
Adding a Messages Page (3:52)
Retrieving the Message List (7:52)
Displaying the Message List (5:43)
Formatting Messages (6:10)
Getting the Message ID (4:41)
Marking Messages as Read (7:19)
Appendix
Source Code
Upgrading from SpringBoot 1 to 2 (6:07)
Deployment (7:30)
Conclusion (1:46)
Teach online with
Styling the Profile
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock