Spring MVC — базовый пример с использованием JSTL
Стандартная библиотека тегов JSP (JSTL) представляет собой набор тегов, которые можно использовать для реализации некоторых распространенных операций, таких как зацикливание, условное форматирование и другие. JSTL стремится обеспечить простой способ обслуживания страниц SP. Использование тегов, определенных в JSTL, упростило задачу дизайнеров по созданию веб-страниц. Теперь они могут просто использовать тег, связанный с задачей, которую им нужно реализовать на странице JSP.
To read more in-depth about JSTL refer to this article: JSP Standard Tag Library
Итак, в этой статье мы собираемся обсудить базовый проект Spring MVC, в котором мы увидим проблему без использования JSTL и то, как JSTL решает эту проблему.
Пример проекта
По сути, мы собираемся разработать простую форму, как на изображении ниже, и мы собираемся отображать данные, введенные пользователем, на следующей странице.
Здесь мы использовали Spring MVC — текстовое поле формы и Spring MVC — флажок формы. Итак, мы будем хранить значения Skills внутри массива String и будем отображать данные с JSTL и без него. Пожалуйста, создайте проект на своей машине, чтобы понять пример более подробно.
Настройка проекта
Мы собираемся использовать Spring Tool Suite 4 IDE для этого проекта. Пожалуйста, обратитесь к этой статье, чтобы установить STS на свой локальный компьютер. Как загрузить и установить среду IDE Spring Tool Suite (Spring Tools 4 для Eclipse)? Перейдите в среду IDE STS, затем создайте новый проект maven, выберите «Файл» > «Создать» > «Проект Maven» и выберите следующий архетип, как показано на изображении ниже, следующим образом:
Добавьте следующие зависимости maven и подключаемый модуль в файл yourpom.xml.
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.18</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- plugin --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
Ниже приведен полный код файла pom.xml после добавления этих зависимостей.
Файл: pom.xml
XML
< modelVersion >4.0.0</ modelVersion > < groupId >com.geeksforgeeks</ groupId > < artifactId >simple-calculator</ artifactId > < packaging >war</ packaging > < version >0.0.1-SNAPSHOT</ version > < name >simple-calculator Maven Webapp</ name > < dependencies > < dependency > < groupId >junit</ groupId > < artifactId >junit</ artifactId > < version >3.8.1</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-webmvc</ artifactId > < version >5.3.18</ version > </ dependency > < dependency > < groupId >javax.servlet</ groupId > < artifactId >javax.servlet-api</ artifactId > < version >4.0.1</ version > < scope >provided</ scope > </ dependency > </ dependencies > < build > < finalName >simple-calculator</ finalName > < plugins > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-war-plugin</ artifactId > < version >2.6</ version > < configuration > < failOnMissingWebXml >false</ failOnMissingWebXml > </ configuration > </ plugin > </ plugins > </ build > </ project > |
Настройка диспетчерского сервлета
Прежде чем перейти к части кодирования, давайте посмотрим на структуру файла на изображении ниже.
Note: Please refer to the green color box files. Other files are not present in this project.
Итак, сначала создайте папку src/main/java и внутри этой папки создайте класс с именем CalculatorAppIntilizer и поместите его в пакет com.geeksforgeeks.calculator.config и расширите класс AbstractAnnotationConfigDispatcherServletInitializer . Обратитесь к изображению ниже.
И всякий раз, когда вы расширяете этот класс, у него есть некоторые предабстрактные методы, которые нам нужны для реализации. Теперь внутри этого класса нам нужно просто написать две строки кода для настройки сервлета Dispatcher. Перед этим мы должны создать еще один класс для файла конфигурации Spring. Итак, перейдите в папку src/main/java и внутри этой папки создайте класс с именем CalculatorAppConfig и поместите его в пакет com.geeksforgeeks.calculator.config . Ниже приведен код файла CalculatorAppConfig.java .
Файл: CalculatorAppConfig.java
Java
package com.geeksforgeeks.calculator.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan (basePackages = "com.geeksforgeeks.calculator.controllers" ) public class CalculatorAppConfig { } |
Ниже приведен полный код файла CalculatorAppIntilizer.java . Комментарии добавляются внутри кода, чтобы понять код более подробно.
Файл: CalculatorAppIntilizer.java
Java
package com.geeksforgeeks.calculator.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class CalculatorAppIntilizer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { // TODO Auto-generated method stub return null ; } // Registering the Spring config file @Override protected Class<?>[] getServletConfigClasses() { Class aClass[] = { CalculatorAppConfig. class }; return aClass; } // Add mapping url @Override protected String[] getServletMappings() { String arr[] = { "/geeksforgeeks.org/*" }; return arr; } } |
Настройка ViewResolver
Spring MVC — это Web MVC Framework для создания веб-приложений. В общем, все фреймворки MVC предоставляют способ работы с представлениями. Spring делает это с помощью ViewResolvers, что позволяет отображать модели в браузере, не привязывая реализацию к конкретной технологии просмотра. Подробнее читайте здесь: ViewResolver в Spring MVC. Итак, для настройки ViewResolver перейдите в файл CalculatorAppConfig.java и запишите код следующим образом.
@Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/view/"); viewResolver.setSuffix(".jsp"); return viewResolver; }
А ниже обновленный код файла CalculatorAppConfig.java после написания кода для настройки ViewResolver.
Файл: Обновленный CalculatorAppConfig.java
Java
package com.geeksforgeeks.calculator.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; @EnableWebMvc @Configuration @ComponentScan (basePackages = "com.geeksforgeeks.calculator.controllers" ) public class CalculatorAppConfig { // setup ViewResolver @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix( "/WEB-INF/view/" ); viewResolver.setSuffix( ".jsp" ); return viewResolver; } } |
Создать DTO
Сначала нам нужно создать класс DTO. Итак, перейдите в папку src/main/java и внутри этой папки создайте класс с именем JSTLDemoDto и поместите его в пакет com.geeksforgeeks.calculator.dto . Ниже приведен код файла JSTLDemoDto.java .
Файл: JSTLDemoDto.java
Java
package com.geeksforgeeks.calculator.dto; public class JSTLDemoDto { private String name; // Here we have taken the // skills data in Array of String private String[] skills; public String getName() { return name; } public void setName(String name) { this .name = name; } public String[] getSkills() { return skills; } public void setSkills(String[] skills) { this .skills = skills; } } |
Создать контроллер
Перейдите в папку src/main/java и внутри этой папки создайте класс с именем JSTLController и поместите его в пакет com.geeksforgeeks.calculator.controllers . Ниже приведен код файла JSTLController.java .
Файл: Файл JSTLController.java
Java
package com.geeksforgeeks.calculator.controllers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import com.geeksforgeeks.calculator.dto.JSTLDemoDto; @Controller public class JSTLController { @RequestMapping ( "/jstl" ) public String showRegistrationPage( @ModelAttribute ( "jstldemo" ) JSTLDemoDto jstlDemoDto) { return "jstl-demo" ; } @RequestMapping ( "/display-data" ) public String displayData( @ModelAttribute ( "jstldemo" ) JSTLDemoDto jstlDemoDto) { return "display-data" ; } } |
Reference article: Spring MVC @ModelAttribute Annotation with Example
Создать представление
Теперь нам нужно создать представление с именем « jstl-demo » внутри папки WEB-INF/view с расширением .jsp . Итак, перейдите в src > main > webapp > WEB-INF и создайте представление папки, а внутри этой папки создайте файл jsp с именем jstl-demo . Ниже приведен код файла jstl-demo.jsp .
Файл: jstl-demo.jsp
HTML
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> < html > < head > </ head > < body > < h1 align = "center" >JSTL Basic Example</ h1 > < form:form action = "display-data" method = "get" modelAttribute = "jstldemo" > < div align = "center" > <!-- A Simple Input Field --> < label >Name : </ label > < form:input path = "name" /> < br /> <!-- CheckBox Field --> < label >Skills : </ label > Java : < form:checkbox path = "skills" value = "java" /> Python : < form:checkbox path = "skills" value = "python" /> C++ : < form:checkbox path = "skills" value = "cpp" /> DSA : < form:checkbox path = "skills" value = "dsa" /> Spring : < form:checkbox path = "skills" value = "spring" /> < br /> <!-- Button Field --> < input type = "submit" value = "Display Data" > </ div > </ form:form > </ body > </ html > |
Точно так же создайте другое представление с именем «display-data» для отображения данных. Итак, ниже приведен код файла display-data.jsp .