<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mosopefoluwa Adebawojo</title>
    <description>The latest articles on DEV Community by Mosopefoluwa Adebawojo (@madebawojo).</description>
    <link>https://dev.to/madebawojo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3258533%2F5a00152d-70db-440c-89da-1477315dd999.png</url>
      <title>DEV Community: Mosopefoluwa Adebawojo</title>
      <link>https://dev.to/madebawojo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/madebawojo"/>
    <language>en</language>
    <item>
      <title>Building Auto-Clearance: Automating NYSC Monthly Clearance Document Generation for PPAs</title>
      <dc:creator>Mosopefoluwa Adebawojo</dc:creator>
      <pubDate>Mon, 29 Dec 2025 11:50:17 +0000</pubDate>
      <link>https://dev.to/madebawojo/building-auto-clearance-automating-nysc-monthly-clearance-document-generation-for-ppas-14em</link>
      <guid>https://dev.to/madebawojo/building-auto-clearance-automating-nysc-monthly-clearance-document-generation-for-ppas-14em</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Project Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Auto-Clearance is an automated solution designed to streamline the Human Resources (HR) workflow for clearing National Youth Service Corps (NYSC) members (corpers) working in their organization.&lt;br&gt;
Every month, each corper is required to present a clearance document from their Place of Primary Assignment (PPA). Auto-Clearance eliminates the repetitive manual process of creating these documents by automating the generation of personalized clearance letters, saving both time and organizational resources.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq65m7c3gd71u5yho4tqj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq65m7c3gd71u5yho4tqj.png" alt="Login Page" width="446" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem Statement
&lt;/h2&gt;

&lt;p&gt;NYSC mandates that all corpers submit a monthly clearance document issued by their respective PPAs. At many organizations, this document is manually edited for each corper using a template.&lt;br&gt;
This approach is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time-consuming&lt;/li&gt;
&lt;li&gt;Repetitive&lt;/li&gt;
&lt;li&gt;Prone to human error&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Auto-Clearance addresses this challenge by automating the generation and delivery of clearance documents based on each corper’s clearance request and approval status.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;: Java 21 with Spring Boot 3&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;: React&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database&lt;/strong&gt;: MySQL - Stores data related to PPAs, users (Global Admin, Superadmin, Admin, Corper), units, and clearance requests&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Roles &amp;amp; Responsibilities
&lt;/h2&gt;

&lt;p&gt;The Auto-Clearance system supports four distinct user roles, each with clearly defined responsibilities:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Global Admin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9sf47i07p5w00zfrt33r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9sf47i07p5w00zfrt33r.png" alt="Screenshot of the Global Admin Dashboard" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manages multiple PPAs&lt;/li&gt;
&lt;li&gt;Creates PPAs and assigns a Superadmin to each&lt;/li&gt;
&lt;li&gt;Seeded into the database on the first application startup&lt;/li&gt;
&lt;li&gt;On subsequent startups, the system checks for an existing Global Admin to prevent duplication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Superadmin (PPA HR)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6jm7vx9hizq7it9o0py.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6jm7vx9hizq7it9o0py.png" alt="Screenshot of the Super Admin Dashboard" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each PPA has exactly one Superadmin&lt;/li&gt;
&lt;li&gt;Manages units and assigns unit heads (Admins)&lt;/li&gt;
&lt;li&gt;Reviews clearance requests after unit head approval&lt;/li&gt;
&lt;li&gt;Performs final approval or rejection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Admin (Unit Head)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fbvh0ic2ik59es1jqfb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fbvh0ic2ik59es1jqfb.png" alt="Screenshot of the Admin Dashboard" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manages a specific unit within a PPA&lt;/li&gt;
&lt;li&gt;Reviews and approves or rejects clearance requests from corpers within their unit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Corper (NYSC Member)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa7s1q22mcmt52chiu05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa7s1q22mcmt52chiu05.png" alt="Screenshot of the Corps member's Dashboard" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Submits monthly clearance requests&lt;/li&gt;
&lt;li&gt;Receives the clearance letter after approval by both the unit head and Superadmin&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Workflow
&lt;/h2&gt;

&lt;p&gt;The Global Admin creates a PPA and assigns a Superadmin&lt;/p&gt;

&lt;p&gt;A. The Superadmin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates units within the PPA&lt;/li&gt;
&lt;li&gt;Assigns unit heads (Admins)&lt;/li&gt;
&lt;li&gt;Adds corpers to units&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;B. A corper submits a clearance request (status: &lt;code&gt;PENDING&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;C. The unit head (Admin) reviews the request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If approved → status changes to &lt;code&gt;LEVEL_ONE&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If rejected → status changes to &lt;code&gt;REJECTED&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;D. The Superadmin reviews the request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If approved → status changes to &lt;code&gt;CLEARED&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If rejected → status changes to &lt;code&gt;REJECTED&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once fully approved, the system generates the clearance document for the corper which can be viewed, downloaded or printed from the superadmin’s dashboard. Here's an example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6oxtbwepkxu8m68r2fpo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6oxtbwepkxu8m68r2fpo.png" alt="SuperAdmin Clearance Dashboard" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn184bbxoxvlhcikok7yt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn184bbxoxvlhcikok7yt.png" alt="Screenshot of the Modal for Viewing the Clearance Document" width="483" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhd70w5unp9gzlaed9k0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhd70w5unp9gzlaed9k0g.png" alt="Sample Clearance PDF" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Clearance Request Statuses
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;PENDING&lt;/code&gt; – Initial state after submission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LEVEL_ONE&lt;/code&gt; – Approved by the unit head&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CLEARED&lt;/code&gt; – Fully approved by the Superadmin&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;REJECTED&lt;/code&gt; – Rejected at any approval level&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenges &amp;amp; Key Decisions
&lt;/h2&gt;

&lt;p&gt;One of the major challenges I faced while developing Auto-Clearance was deciding whether to customize the application for one organization or make it scalable for multiple organizations. I initially thought of building a single-use version for one PPA, but I realized that there could be other organizations and PPAs who could benefit from this solution.&lt;br&gt;
After weighing the options, I decided to extend the application to support multiple PPAs. This led to the introduction of the Global Admin role, which allows management of multiple PPAs and facilitates scalability across different organizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This project has been an incredible learning experience. A special thanks to &lt;strong&gt;Ekemini Eduok&lt;/strong&gt; for taking the lead on the frontend development of this project and allowing me to focus more on building the backend.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>softwareengineering</category>
      <category>buildinpublic</category>
      <category>nysc</category>
    </item>
    <item>
      <title>Fix JSP Not Rendering in Spring Boot (MVC + IntelliJ Guide)</title>
      <dc:creator>Mosopefoluwa Adebawojo</dc:creator>
      <pubDate>Wed, 11 Jun 2025 22:09:01 +0000</pubDate>
      <link>https://dev.to/madebawojo/fix-jsp-not-rendering-in-spring-boot-mvc-intellij-guide-nmd</link>
      <guid>https://dev.to/madebawojo/fix-jsp-not-rendering-in-spring-boot-mvc-intellij-guide-nmd</guid>
      <description>&lt;p&gt;When I began learning Spring MVC, one of the hurdles I encountered was rendering &lt;code&gt;.jsp&lt;/code&gt; (Java Server Pages) in a Spring Boot project using IntelliJ IDEA Community Edition. Unlike other IDEs that may offer built-in support for enterprise features like JSP rendering, the Community Edition requires some extra configuration.&lt;/p&gt;

&lt;p&gt;After countless attempts and piecing together various resources, I finally figured out a working solution, and I’m here to share it with you in a step-by-step guide. &lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step 1: Create a New Maven Web Project
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open IntelliJ IDEA Community Edition&lt;/li&gt;
&lt;li&gt;Create a new Project&lt;/li&gt;
&lt;li&gt;Select Maven Archetype (from the left corner)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3h5q8m02o5slzjlwwr5e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3h5q8m02o5slzjlwwr5e.png" alt="New project window in IntelliJ" width="585" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name your project – e.g., GetJSPWorking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F642zvb1mhht4a6w0av26.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F642zvb1mhht4a6w0av26.png" alt="New project window in IntelliJ" width="589" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose Maven as your build tool (if not already selected)&lt;/li&gt;
&lt;li&gt;Select the archetype:  &lt;strong&gt;maven-archetype-webapp&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3wooy147w26x0xe5mx4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3wooy147w26x0xe5mx4.png" alt="Screenshot of the various archetype options in IntelliJ" width="595" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, you should see the following structure:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3z1l5nilkg5t9gub744.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3z1l5nilkg5t9gub744.png" alt="Project Structure Screenshot" width="504" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step 2: Setup the Project Structure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a directory named java inside &lt;code&gt;src/main/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inside java, create your base package, e.g., &lt;code&gt;com.example&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmclim9cjzj6au03z592k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmclim9cjzj6au03z592k.png" alt="Screenshot of the created package" width="339" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step 3: Configure the pom.xml File
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Replace the default &lt;code&gt;pom.xml&lt;/code&gt; content with the following:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&amp;gt;
  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;

  &amp;lt;parent&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-boot-starter-parent&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.4.6&amp;lt;/version&amp;gt;
    &amp;lt;relativePath/&amp;gt;
  &amp;lt;/parent&amp;gt;

  &amp;lt;groupId&amp;gt;com.example&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;GetJSPWorking&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;
  &amp;lt;packaging&amp;gt;war&amp;lt;/packaging&amp;gt;

  &amp;lt;dependencies&amp;gt;
    &amp;lt;!-- Spring Boot Web --&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;
    &amp;lt;/dependency&amp;gt;

    &amp;lt;!-- JSP Support --&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.apache.tomcat.embed&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;tomcat-embed-jasper&amp;lt;/artifactId&amp;gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;

    &amp;lt;!-- JSTL Support --&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;jakarta.servlet.jsp.jstl&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;jakarta.servlet.jsp.jstl-api&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;3.0.0&amp;lt;/version&amp;gt;
    &amp;lt;/dependency&amp;gt;

    &amp;lt;!-- Dev Tools --&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;spring-boot-devtools&amp;lt;/artifactId&amp;gt;
      &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;
      &amp;lt;optional&amp;gt;true&amp;lt;/optional&amp;gt;
    &amp;lt;/dependency&amp;gt;

    &amp;lt;!-- Testing --&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;spring-boot-starter-test&amp;lt;/artifactId&amp;gt;
      &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
  &amp;lt;/dependencies&amp;gt;

  &amp;lt;build&amp;gt;
    &amp;lt;finalName&amp;gt;TestWebApplicationJSP&amp;lt;/finalName&amp;gt;
    &amp;lt;plugins&amp;gt;
      &amp;lt;plugin&amp;gt;
        &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;spring-boot-maven-plugin&amp;lt;/artifactId&amp;gt;
      &amp;lt;/plugin&amp;gt;
    &amp;lt;/plugins&amp;gt;
  &amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NB: Don’t forget to update your groupId and artifactId to match your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step 4: Create the Application Entry Point
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Inside your &lt;code&gt;com.example&lt;/code&gt; package, create the main application class:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GetJSPWorkingApplication {
    public static void main(String[] args) {
        SpringApplication.run(GetJSPWorkingApplication.class, args);
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe76ilrc6ppmts30njfq8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe76ilrc6ppmts30njfq8.png" alt="Screenshot of the main application in IntelliJ" width="800" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step 5: Create a Controller
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Also inside &lt;code&gt;com.example&lt;/code&gt;, create a controller:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package com.example;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class GetJSPWorkingController {

    @RequestMapping("/get-jsp")
    public String getJsp() {
        return "index"; // Refers to index.jsp
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswnywfcvcewnyazm1yp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswnywfcvcewnyazm1yp5.png" alt="Screenshot of the controller in IntelliJ" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step 6: Add Your JSP File
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Inside &lt;code&gt;src/main/webapp/WEB-INF/&lt;/code&gt;, create a folder named jsp.&lt;/li&gt;
&lt;li&gt;Inside jsp, create a file named index.jsp.&lt;/li&gt;
&lt;li&gt;Paste this simple HTML code:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;html&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;h2&amp;gt;Hello JSP!&amp;lt;/h2&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ap51bmzfxdkixac1n0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ap51bmzfxdkixac1n0a.png" alt="Screenshot of the index.jsp file on IntelliJ" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step 7: Configure View Resolver
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a file named &lt;code&gt;application.properties&lt;/code&gt; inside &lt;code&gt;src/main/resources/&lt;/code&gt; with the following contents:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.web.resources.static-locations=classpath:/static/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Step 8: Build and Run the Application
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open the Maven tab in IntelliJ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9j7oxspkbj6a24hvao52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9j7oxspkbj6a24hvao52.png" alt="Screenshot of pointing to the mvn icon in IntelliJ" width="772" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3mr55ef15xwol769bwg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3mr55ef15xwol769bwg.png" alt="Screenshot of the icon that opens the mvn terminal" width="554" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run the following commands:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;mvn clean install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffstb0hs0sghc5vm7v4b9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffstb0hs0sghc5vm7v4b9.png" alt="Screenshot of the command in IntelliJ" width="673" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mvn spring-boot:run&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnc9w0y5gwfx8c659ycyf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnc9w0y5gwfx8c659ycyf.png" alt="Screenshot of the command in IntelliJ" width="673" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;a href="http://localhost:8080/get-jsp" rel="noopener noreferrer"&gt;http://localhost:8080/get-jsp&lt;/a&gt; in your browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If everything was set up correctly, you should see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8nvogxg4me9uikugkur6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8nvogxg4me9uikugkur6.png" alt="Screenshot of the rendered JSP in the browser" width="451" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Getting JSP to work with Spring Boot in IntelliJ Community Edition can feel tricky, but it’s totally doable. If you're like me and got stuck along the way, I hope this guide clears up the confusion and helps you render your JSP views without a hitch.&lt;/p&gt;

&lt;p&gt;N.B: This setup is ideal for learning purposes. In production, it’s recommended to use Thymeleaf or another modern template engine, as JSP is gradually being phased out of modern Spring applications. However, understanding how to configure JSP is valuable for legacy systems and academic projects.&lt;/p&gt;

</description>
      <category>springmvc</category>
      <category>java</category>
      <category>intellij</category>
      <category>jsp</category>
    </item>
  </channel>
</rss>
